ブルート フォース攻撃からサーバーを保護することは必須です。問題は、正確にどのように?幸運なことに、Fail2Ban はサーバーを保護するためにすぐそこまで来ていますが、Fail2Ban のデフォルト設定には、最適なセキュリティのために微調整が必要です.心配は無用です。このチュートリアルでカバーされています。
このチュートリアルでは、Fail2Ban を設定し、SSH サーバーを保護してブルート フォース攻撃を防ぐ方法を学びます。
準備? SSH サーバーのセキュリティを最適化するために読み進めてください!
前提条件
このチュートリアルは、段階的な手順で構成されています。フォローしたい場合は、次のものが用意されていることを確認してください:
- Ubuntu および Debian サーバー – このチュートリアルでは、Ubuntu 18.04 LTS を実行するサーバーを使用して Fail2Ban をセットアップし、Debian 10 サーバーを使用して Fail2Ban の禁止構成をテストします。
- スーパーユーザーとしてコマンドを実行するための、サーバーでの root アクセスまたは sudo 権限
- Ubuntu または Debian サーバーにインストールされた Fail2Ban。
ベース ファイアウォールの設定
Fail2Ban は、ログを監視し、特定の時間内にログインを試行しすぎる IP アドレスを禁止することで、サーバーを保護します。ただし、最初に、サーバーでの悪意のある行為をブロックするルールを追加できるベース ファイアウォールをセットアップします。
1. まず、service
を実行します 以下のコマンドで Fail2Ban を停止します (fail2ban stop
) ランニングから。構成ファイルに変更を加えるときは、Fail2Ban を停止して、変更をテストし、期待どおりに機能することを確認できるようにします。
sudo service fail2ban stop

2. apt install
を実行します Sendmail
をインストールするコマンド と IPTables-persistent
. Sendmail は、Fail2Ban が IP アドレスを禁止するときに通知するために使用するプログラムです。 IPTables-persistent は、変更した構成設定を /etc/sysconfig/iptables に保存するプログラムです。 ファイル。
これらのプログラムをインストールすると、停電などの予期しない事態が発生した場合でも、ファイアウォールの設定が損なわれません。
sudo apt install sendmail iptables-persistent -y
各 iptables
を実行します 以下のコマンドを実行して、ファイアウォールをセットアップします。これらのコマンドは出力を生成しませんが、ファイアウォールに 4 つのルールを追加します。これらのルールは、サーバーへの接続を許可またはブロックします。
## First Rule - Accepts all traffic generated by the server (lo interface)
sudo iptables -A INPUT -i lo -j ACCEPT
## Second Rule - Accepts all traffic that are part
## of an established o related connection
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
## Third Rule - Allows SSH traffic on port 22
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
## Fourth Rule - Arops all other traffic
sudo iptables -A INPUT -j DROP

4. iptables
を実行します 以下のコマンドを実行して、ファイアウォールで設定した内容の概要を表示します。
sudo iptables -S
以下で、強調表示されているのは、ファイアウォールに追加したルールです。

5. 次に、次のコマンドを実行して、ルールを /etc/sysconfig/iptables-config に保存します。 ファイルを作成し、Fail2Ban サービスを開始します。 iptables-config ファイルには、永続的なファイアウォール ルールがすべて保持されます。
Fail2Ban は、サーバーを保護するためにファイアウォールにいくつかのルールを自動的に追加します。
sudo dpkg-reconfigure iptables-persistent
sudo service fail2ban start
6. 最後に、iptables
を再実行します。 以下のコマンドを実行して、ファイアウォール ルールを表示します。
sudo iptables -S
以下に示すように、赤で強調表示されているのは、Fail2Ban がファイアウォールに追加した新しいルールです。

ローカルの Fail2Ban 構成の調整
基本的なファイアウォールが実行されたので、ローカルの Fail2Ban 構成ファイルを調整して、サーバーを保護するための制御を追加します。このチュートリアルでは、/etc/fail2ban/jail.conf を使用します 構成ファイルには、Fail2Ban アプリケーションのグローバル設定を構成するために必要なすべてのオプションが含まれているためです。
おそらく、SSH サーバーのカスタム ルールを作成したいと思うでしょう。その場合は、新しい jail.local を作成します ファイル (jail.conf に基づく) ファイル)、SSH 固有のルールを jail.local に配置します。 ファイル。そうすることで、jail.conf の設定を上書きできます サーバーのファイル。
1. awk
を実行します 以下のコマンドを実行して、以下を実行します:
- コンテンツを印刷 (
'{ printf "# "; print; }'
)/etc/fail2ban/jail.conf
の ファイル。 - jail.local という名前のファイルを作成します (jail.conf に基づく) jail.conf のデフォルト設定をオーバーライドするために使用できます。 ファイル。
/etc/fail2ban/jail.conf
の内容をパイプする ファイルをtee
に 指図。そうすることで、jail.conf
が書き込まれます ファイルの内容をローカルのファイルシステム (/etc/fail2ban/jail.local
).
awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

2. jail.local を作成したら ファイル、ls
を実行します 以下のコマンド。このコマンドは、サーバーの Fail2Ban ディレクトリの内容を一覧表示します (/etc/fail2ban
) を確認して jail.local ファイルが正しく生成されます。
ls /etc/fail2ban
新しい jail.local が表示された場合 以下に示すように、ローカル ファイルが正しく生成されました。

3. /etc/fail2ban/jail.local を開きます 任意のテキスト エディターでファイルを開き、[ssh] に移動します。 セクション。
[sshd] のコメントを外します そして有効 # を削除することによるオプション 以下に示すように、オプションの前に記号を付けて、SSH を有効にします。
この時点からチュートリアルの残りの部分では、# を削除します セクションまたはオプションの前に記号を付けて、それらを有効にします。

4. 下にスクロールして、[DEFAULT] のコメントを外します。 以下に示すセクション。このセクションでは、Fail2Ban のデフォルト設定を構成します。このセクションの設定は、Fail2Ban が管理するすべての刑務所に適用されます。

5. 次に、bantime まで下にスクロールします セクションに移動し、禁止時間を設定します 60 の場合 分。 バンタイム オプションは、ログイン試行が失敗した後に IP アドレスが禁止される時間を分単位で設定します。
デフォルトのバンタイム設定は 600 秒 (10 分) です。この設定は好みに合わせて調整できますが、bantime 設定が低いほど、サーバーの負荷が高くなることに注意してください。

6. findtime に移動します とmaxretry オプション。 findtime を守る そのまま (10 分 )、maxretry を下げます 3まで .
検索時間 オプションは、IP アドレスが禁止される前にログインに失敗できる時間を分単位で設定します。 最大再試行 オプションは、IP アドレスが禁止されるまでのログイン試行の失敗回数を設定します。
デフォルトの findtime 設定は 10 分、最大再試行 は5分です。その結果、10 分間に 5 回ログインに失敗した IP アドレスは禁止されます。

7. 下にスクロールしてコメントを外し、destemail を設定します 、送信者 、および mta オプション:
- destemail – Fail2Ban が通知を送信するメール アドレスを入力してください。
- 送信者 – Fail2Ban が destemail に送信するメールの「差出人」フィールドを設定します .
- mta – デフォルトのまま (sendmail ) そのまま。 mta オプションは、Fail2Ban が通知の送信に使用するメール配信エージェントを設定します。

8. アクションに移動します 以下に示すようにオプションを選択し、action_mwl のコメントを外します オプション。そうすることで、Fail2Ban がログウォッチ メールを送信できるようになります。ログウォッチの電子メールを確認して、サーバー上の潜在的なセキュリティの問題をさらに調査できます。
変更を保存して、テキスト エディターを終了します。

9. 以下のコマンドを実行して、fail2ban
を再起動します。 サービス。
sudo service fail2ban stop
sudo service fail2ban start
10. 最後に、以下のコマンドを実行して fail2ban
を確認します サービス status
. sudo service fail2ban status
Fail2Ban サービスが機能している場合は、次のような出力が得られます。
sudo service fail2ban status
Fail2Ban サービスが機能している場合は、次のような出力が得られます。

禁止設定のテスト
Fail2Ban を構成したので、禁止構成が実際に機能するかどうかをテストします。セカンダリ サーバーから Fail2Ban サーバーへの SSH ログインに複数回失敗し、そのセカンダリ サーバーが禁止されるかどうかを確認します。
1. セカンダリ サーバー (Debian) にログインし、以下のコマンドを実行して Fail2Ban サーバーに SSH 接続します。
このデモでは、IP が 134.122.20.103 から ssh
の Debian 10 サーバーを使用します。 fail2ban
に 69.28.83.134
の IP を持つサーバー .
ssh [email protected]
2. プロンプトが表示されたらランダムなパスワードを入力し、Enter キーを押します。
最初の試行で、Fail2Ban サーバーは SSH ログイン試行を停止し、Permission denied を出力します。 下図のようなメッセージ。 SSH ログイン試行をさらに 2 ~ 3 回繰り返すと、Fail2Ban サーバーは最終的に SSH ログイン試行への応答を停止します。
この時点で、Permission denied は表示されません メッセージはもうありませんが、空白の画面です。空白の画面が表示される場合は、2 番目のサーバー (Debian) が Fail2Ban サーバーから禁止されていることを示しています。

しかし、Fail2Ban サーバーからブロックする IP アドレスのリストが既にあるかもしれません。その場合は、jail.local を開きます ファイルを開き、[DEFAULT] に移動します セクション。 ignoreip のコメントを外します オプションを選択し、以下に示すように IP アドレスをブロックするように設定します。
アドレスは、複数の個別の IPv4 または IPv6 エントリにするか、カンマで区切ることができます。

3. Fail2Ban サーバー (Ubuntu) で、iptables
を再実行します。 以下のコマンドを実行して、ファイアウォール ルールを表示します。
sudo iptables -S
134.122.20.103 からの SSH ログイン試行を拒否する新しいルールがあることに注意してください。 IPアドレス。
また、Fail2Ban サーバーに sendmail が設定されている場合は、禁止が成功すると、ログ ファイルが添付されたメールが Fail2Ban から届きます。メール通知は、Fail2Ban がブルート フォース攻撃を正常に阻止し、潜在的な損害からサーバーを救ったことを示しています。

結論
このチュートリアルを通じて、Ubuntu サーバーで Fail2Ban を構成する方法を学習しました。この時点で、ブルート フォース攻撃から SSH サーバーを保護するための十分な知識を備えている必要があります。
さて、この新たに発見された知識をワンランク上のものにしてみませんか?おそらく、Docker ホストで Fail2Ban を使用してすべてのポートで IP をブロックすることから始めますか?