開発者ドキュメント

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が禁止を実装する方法を構成できます。 ここにいくつかのより重要なものがあります:

禁止アクションの定義


禁止が必要な場合、fail2banはかなりの数の異なる方法で処理を進めることができます。 次のパラメータを確認して、必要なアクションを決定します。

電子メールアラートを構成する


禁止が開始されたときにメールで通知するようにfail2banを構成する場合は、デフォルトのセクションでも構成できます。

マシンにメールサーバーを構成している場合は、外部アドレスに電子メールを送信するようにfail2banを構成できます。 それ以外の場合は、ローカルのUNIXアカウントに配信することができます。

関連するパラメータは2つあります。

メールを設定したい場合は、編集する必要があります action 上記のパラメータ。 アクションを「action_mw」または「action_mwl」に変更して、電子メール情報を禁止スクリプトに渡します。

ローカルメール配信を設定している場合は、次のように入力してメールを確認できます。

sudo nano /var/mail/mail

アプリケーション固有のJailを構成する


ファイルのさらに下に、次のようにマークされたセクションが表示されます。

[ application_name ]

ほとんどのパラメータを解読できるはずです。

The filter パラメータは、内のファイルを指定します /etc/fail2ban/filter.d ディレクトリ。 これは、失敗した認証試行についてプログラムのログファイルを解析する方法をfail2banに指示します。

The logpath 変数は、サービスのログファイルへのパスを保持します。このログファイルは、fail2banが失敗を解析します。

ここで、他のデフォルトパラメータを上書きできます。 たとえば、 maxretry SSHのオプションは、Debianインストールのdaultオプションとは異なります。

ステップ3– –iptablesを構成する


実際にはiptablesの構成をあまり行いませんが、その動作を実装する構成ファイルを見ていきます。 これは、fail2banが禁止ポリシーをどのように実装しているかを理解するのに役立ちます。

jail構成で指定されたファイルを banaction パラメータ:

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番目に新しいルールが表示されます。

結論


これで、サーバーをブルートフォース攻撃の標的にしにくくすることで、セキュリティを強化する必要があります。 これは素晴らしいスタートですが、より完全な解決策は、パスワード認証を完全に無効にし、キーベースの認証のみを許可することです。

ジャスティン・エリングウッド
モバイルバージョンを終了