Debian7でfail2banを使用してSSHを保護する方法
序章
サーバーまたはコンピューターをネットワークに接続することには、ある程度のリスクが伴います。 インターネットに接続されているVPSを含むすべてのマシンは、悪意のある攻撃の潜在的な標的です。
適切に構成されたファイアウォールを使用すると、さまざまな種類の不正アクセスを防ぐことができますが、ログインしてサーバーを管理できるようにするには、特定のサービスを開く必要があります。 SSHは、リモートシステムへのログインに最も一般的に使用されるサービスであるため、最も頻繁に対象となるサービスの1つでもあります。
幸い、 fail2ban と呼ばれる、この攻撃ベクトルを軽減できるツールが利用可能です。 これは、SSHを使用した正当なログインを許可するように構成できますが、設定された回数後に正しく認証に失敗した後はIPアドレスを禁止します。
このソフトウェアをDebian7VPSにインストールして設定します。
ステップ1-fail2banをインストールします
Debianはデフォルトのリポジトリにfail2banを含んでいます。 次の一連のコマンドを使用して、ダウンロードしてインストールできます。
sudo apt-get update sudo apt-get install fail2ban
これにより、fail2banがインストールされるだけでなく、デフォルト設定でサービスが開始されます。
ステップ2– –fail2banを構成する
fail2ban構成は、/etc/fail2ban
ディレクトリに保持されます。 デフォルトの禁止ルールを指定する構成ファイルは、jail.conf
と呼ばれます。
プログラムに新しいバージョンがある場合にfail2banが構成ファイルを更新する方法のため、デフォルトの構成ファイルを編集しないでください。
代わりに、それを新しい場所にコピーして、そこで編集する必要があります。
cd /etc/fail2ban sudo cp jail.conf jail.local sudo nano jail.local
ここでは、デフォルト構成で設定された、気に入らない設定を変更できます。
デフォルト設定
[DEFAULT]
で始まるセクションは、構成の後半でより具体的なコンテキストでオーバーライドされる可能性のあるデフォルトを構成します。 強力なデフォルトを設定することをお勧めします。
与えられた設定のほとんどは、デフォルトオプションの適切な選択です。 ただし、構成の恩恵を受ける領域がいくつかあります。
デフォルトを禁止する
いくつかのパラメーターを変更することにより、fail2banが禁止を実装する方法を構成できます。 ここにいくつかのより重要なものがあります:
- ignoreip :このパラメーターは、fail2banルールから除外する必要があるIPアドレスのリストを取得します。 ここにリストされているIPアドレスまたはブロックには制限がないため、賢明かつ具体的に選択してください。
- IPアドレスと範囲は空白で区切られます。
- ログインに問題が発生した場合にブロックされないように、リストの最後に自宅または職場のIPアドレスを追加する必要があります。
- これは次のようになります:「ignoreip = 127.0.0.1/8
YOUR_IP_ADDRESS
」
- bantime :これは、クライアントが正しく認証に失敗した場合に禁止が続く時間をリストします。 それは秒単位で与えられます。
- デフォルト値では、クライアントは10分間禁止されます。
- maxretry :このパラメーターは、禁止が開始されるまでに許可される試行回数を指定します。
禁止アクションの定義
禁止が必要な場合、fail2banはかなりの数の異なる方法で処理を進めることができます。 次のパラメータを確認して、必要なアクションを決定します。
- banaction :この設定は、禁止が必要な場合に使用される構成ファイルを指定します。
- このパラメータの値は、
/etc/fail2ban/action.d
ディレクトリ内のファイルを参照し、実際の禁止プロセスを処理します。 - デフォルト値では、iptables(ファイアウォール)を使用して、認証に失敗したときにすべてのポートでIPを禁止します。 具体的な禁止規則については後で説明します。
- このパラメータの値は、
- action :このパラメーターは、その上にリストされているアクション・ショートカットの1つを指定します。 基本的には
banaction
スクリプトを呼び出し(前述のとおり)、適切な情報を変数に割り当ててスクリプトに渡します。- デフォルトのアクションは
action_
で、スクリプトを呼び出し、名前、ポート、プロトコル、およびチェーンをスクリプトに渡します。 他のアクションのように、電子メールアドレスやログ行は送信されません。
- デフォルトのアクションは
電子メールアラートを構成する
禁止が開始されたときにメールで通知するようにfail2banを構成する場合は、デフォルトのセクションでも構成できます。
マシンにメールサーバーを構成している場合は、外部アドレスに電子メールを送信するようにfail2banを構成できます。 それ以外の場合は、ローカルのUNIXアカウントに配信することができます。
関連するパラメータは2つあります。
- destemail :このオプションは、禁止の場合に通知される電子メールアドレスを設定します。
- デフォルト値の「root@localhost 」は、現在のコンピューターのrootアカウントにメールを配信します。
- メールサーバーを設定している場合は、これを外部のメールアドレスに自由に変更してください。
- mta :これはメールの配信に使用されるメールエージェントを指定します。
- sendmailで構成されたメールサーバーがある場合は、デフォルトのオプション(sendmail)をそのままにします。
- メールサーバーを構成していないが、ローカルメールをユーザーアカウントに配信したい場合は、「sendmail」を「mail」に変更できます。
電子メールを設定したい場合は、上記のようにaction
パラメータを編集する必要があります。 アクションを「action_mw」または「action_mwl」に変更して、電子メール情報を禁止スクリプトに渡します。
ローカルメール配信を設定している場合は、次のように入力してメールを確認できます。
sudo nano /var/mail/mail
アプリケーション固有のJailを構成する
ファイルのさらに下に、次のようにマークされたセクションが表示されます。
[ application_name ]
ほとんどのパラメータを解読できるはずです。
filter
パラメーターは、/etc/fail2ban/filter.d
ディレクトリー内のファイルを指定します。 これは、失敗した認証試行についてプログラムのログファイルを解析する方法をfail2banに指示します。
logpath
変数は、サービスのログファイルへのパスを保持します。このログファイルは、fail2banが失敗を解析します。
ここで、他のデフォルトパラメータを上書きできます。 たとえば、SSHのmaxretry
オプションは、Debianインストールのdaultオプションとは異なります。
ステップ3– –iptablesを構成する
実際にはiptablesの構成をあまり行いませんが、その動作を実装する構成ファイルを見ていきます。 これは、fail2banが禁止ポリシーをどのように実装しているかを理解するのに役立ちます。
banaction
パラメーターの下でjail構成で指定されたファイルを開きます。
sudo nano /etc/fail2ban/action.d/iptables-multiport.conf
ここでは、fail2banがIPを禁止するように呼び出したときに実際に何が起こるかを確認できます。 iptablesファイアウォールソフトウェアを使用してルールを実装します。
fail2banが始まると、次の行が呼び出されます。
actionstart = iptables -N fail2ban-<name> iptables -A fail2ban-<name> -j RETURN # questionable usefulness iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
これにより、トラフィックがフィルタリングチェーンを通過するように環境が初期化されます。
iptablesソフトウェアは、「目標到達プロセス」または「チェーン」に基づいてトラフィックを制御します。 これらの各ファネルは、受け入れ可能かどうかを判断するために、与えられたすべてのトラフィックにルールを適用します。
最初の行iptables -N fail2ban-<name>
は、「fail2ban-」という名前の新しいチェーンを作成し、それに続くサービスの名前を付けます。 これは、特定のIPアドレスを禁止するルールを保持します。
次の行iptables -A fail2ban-<name> -j RETURN
は、作成したチェーンにルールを追加します。このルールは、iptablesにこのチェーンを呼び出したチェーンに制御を戻すように指示します。
最後の行iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
は、INPUTチェーン(jail.localファイルで指定)にルールを追加し、すぐに新しいfail2banチェーンに制御を渡します。
したがって、現在のフローは、着信トラフィックがINPUTチェーンによって処理されるというものです。 この時点で、fail2banチェーンに制御を渡すルールにヒットします。 このチェーンの最初のルールは、それを呼び出したチェーンであるINPUTチェーンに制御を戻します。
したがって、この時点では、制御は実際には何も起こらずに前後に渡されます。 ただし、追加のルールに対応する制御フローを設定しました。 IPアドレスを禁止する必要がある場合は、すぐ上のfail2banチェーンに別のルールを追加して、制御をINPUTチェーンに戻すことができます。
ここで、サービスが停止したときのfail2banルールを破棄するための補完的なアクションを確認できます。
actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name> iptables -F fail2ban-<name> iptables -X fail2ban-<name>
これは基本的に、今作成したすべてのルールを逆にするだけです。
クライアントを禁止すると、次のルールが実装されます。
actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP
これは、iptablesにそのIPアドレスからのパケットをドロップするように指示します。これにより、iptablesは再認証を試みることさえできなくなります。
禁止時間が経過すると、このルールは禁止を取り消します。
actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP
実装されているルールと現在禁止されているIPアドレスを確認したい場合は、次のように入力して、現在のiptablesルールを確認できます。
sudo iptables -L
クライアントが禁止されている場合、それらは最下位チェーンになります。
ステップ4– –fail2banを再起動します
構成に変更を加えたら、fail2banを再起動して新しいルールを実装する必要があります。
これを行うには、次のコマンドを入力します。
sudo service fail2ban restart
新しいルールをテストするには、別のVPSインスタンスを作成し、そのマシンから意図的に誤って認証して、禁止ルールをトリガーすることができます。 その後、SSH呼び出しはパスワードプロンプトを返しません。
構成したホストのiptableルールを見ると、新しいルールが表示されます。
sudo iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-ssh (1 references) target prot opt source destination DROP all -- xxx-xxxxxxxx.dyn.xxxxxxxxx.net anywhere RETURN all -- anywhere anywhere
下から2番目に新しいルールが表示されます。
結論
これで、サーバーをブルートフォース攻撃の標的にしにくくすることで、セキュリティを強化する必要があります。 これは素晴らしいスタートですが、より完全な解決策は、パスワード認証を完全に無効にし、キーベースの認証のみを許可することです。