- アクセスログの分析に基づいた動的IPブロッキングシステムの導入。
- システムアップデート中に設定が失われるのを防ぐため、.local設定ファイルを使用します。
- SSH、Webサーバー、データベース、FTPなどの重要サービスに対するマルチチャネル保護機能。
- fail2ban-clientコマンドラインツールを使用した、リアルタイムでのアカウント停止および停止解除の管理。

Linuxサーバーをネットワークに公開することは、ボットを引き寄せる磁石を仕掛けるようなものです。セキュリティ対策を何も設定していない場合、ログには既に何千件ものログイン失敗の記録が残っているでしょう。自動化されたマシンが、ブルートフォース攻撃によってマシンを乗っ取ろうと、ユーザー名とパスワードの組み合わせを絶えず試行しているからです。
ここで登場するのが、疲れ知らずの番犬のようなツール、Fail2banです。厳密にはファイアウォールではありませんが、システムログを分析し、侵入を試みる者を検知すると、iptablesやnftablesなどのツールを使ってIPアドレスをブロックし、侵入を阻止します。それでは、Fail2banの設定方法を見ていきましょう。
Fail2banとは一体何で、どのように機能するのですか?
簡単に言うと、Fail2banはサービスのログファイルを継続的に監視するデーモンです。定義済みのルール(フィルタ)に一致する疑わしいパターンを検出すると、失敗回数のカウントを開始します。IPアドレスが一定時間内に許可された試行回数の上限に達すると、プログラムはアクションを実行します。通常、このアクションには、そのIPアドレスをファイアウォールのブラックリストに追加する処理が含まれます。
これらの設定は「jail」と呼ばれる単位にまとめられます。jailとは基本的に、特定のサービス(SSH、Apache、MySQLなど)に適用される一連のルールです。このようにして、リモートアクセスには非常に厳格なポリシーを、Webサーバーにはより寛容なポリシーを適用できるため、5分ごとにログを手動で確認することなく、侵入者を自動的にブロックできます。

お使いのLinuxディストリビューションに応じたインストール方法
使用しているシステムによってインストールコマンドは若干異なりますが、一般的にはほとんどすべての公式リポジトリで入手可能です。
- UbuntuとDebianの場合: とても簡単だよ、走るだけ
sudo apt update続いてsudo apt install fail2ban. - Rocky LinuxまたはAlmaLinuxの場合: これらはエンタープライズディストリビューションであるため、まずEPELリポジトリを有効にする必要があります。
sudo dnf install epel-releaseそしてパッケージをインストールするにはsudo dnf install fail2ban fail2ban-firewalld. - Alpine Linuxでは: APKマネージャーを使用する
sudo apk add fail2banまた、OpenRCを使用するため、以下の手順で有効にする必要があります。sudo rc-update add fail2ban defaultそして、sudo rc-service fail2ban start.

マスター設定:.localファイルの秘密
よくある間違いは、ファイルを直接編集することです。 jail.confやめてください!そのファイルはシステムアップデート時に上書きされる可能性があります。鉄則は、コピーを作成することです。 jail.localこの2番目のファイルに追加したパラメータは、元のファイルよりも優先され、変更内容は上書きされます。 アップデートから安全.
まず、以下の方法で元のファイルを複製できます。 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local そして、nanoやvimなどのお好みのエディタで開きます。 [デフォルト] ここでは、システムの全体的な動作を定義します。
- 禁止時間: 悪意のあるIPアドレスが凍結される期間。秒単位、または「m」を使用して分単位で指定できます(例:10m)。
- 検出時間: Fail2banがエラーをチェックする時間間隔。例えば、1時間に5回エラーが発生しても、検出時間が10分であれば、BANされることはありません。
- 最大再試行回数: システムがエラーメッセージを表示するまでに許容される失敗回数 もう十分だ、IPアドレスをブロックする.
- ignoreip: 自分自身を禁止しないようにするために不可欠です。ここにあなたの パブリックIPアドレス または、VPNの通信範囲。

特定のサービスを段階的に保護する
一般設定が完了したら、最も関心のあるサービスに対してjailを有効化します。保護を機能させるには、設定する必要があります。 enabled = true それぞれのセクション内で jail.local.
SSHアクセス(最も重要なポイント)
ポート22が最優先ターゲットです。堅牢な構成では、 maxretry = 3 と bantime = 3600 (1時間)。Fail2banがファイルを読み取ります。 /var/log/auth.log (Debian/Ubuntuの場合)または / var / log / secure (CentOS/RHEL 上で)認証失敗を検出し、攻撃者へのアクセスを遮断します。
ウェブサーバー(ApacheとNginx)
ウェブサイトやオンラインストアをお持ちの場合、ボットは次のような機密性の高いルートにアクセスしようとします。 /wp-admin o /login.phpカスタムフィルターは /etc/fail2ban/filter.d/ これらのパターンを検出するため。例えば、 WordPressを保護する403 エラーまたは失敗した試行は監視されています wp-login.phpApacheまたはNginxのjailで設定された制限を超えた場合は、そのIPアドレスをブロックします。
データベースとFTP
MySQL の場合、エラー ログで次のフレーズを監視できます。 ユーザーによるアクセスが拒否されましたFTP (ProFTPD など) の場合、 logpath ログファイルの実際のパスを一致させてください。Fail2banがログファイルを見つけられない場合、保護機能は動作しません。
fail2ban-clientによる高度な管理
簡単な変更を行うために、必ずしもファイルを編集してサービスを再起動する必要はありません。コマンド fail2ban-client これにより、コンソールからシステムをリアルタイムで管理できます。
どのjailがアクティブで、IPアドレスがいくつブロックされているかを確認するには、 sudo fail2ban-client statusSSHなどのサービスについてさらに詳しく調べたい場合は、以下を実行してください。 sudo fail2ban-client status sshdさらに、誤って 同僚をブロックしました または、以下のコマンドを使用してIPアドレスを自分で素早く解放することもできます。 sudo fail2ban-client set sshd unbanip IP_A_DESBLOQUEAR.
メンテナンスとトラブルシューティング
Fail2banが正しくブロックしていないことに気づいた場合は、まずツールのログファイルを確認してください。 /var/log/fail2ban.log。 使用する tail -f 誰が、なぜBANされているのかをリアルタイムで確認できます。
Fail2banはロック状態をSQLiteデータベースに保存することを覚えておいてください。 /var/lib/fail2ban/fail2ban.sqlite3したがって、サーバーを再起動すると、ブロックされていたIPアドレスのブロックは解除されます。 ブロックされたままになります ペナルティ期間が終了するまで。設定ファイルに変更を加えた場合は、必ず以下のコマンドで変更を適用してください。 sudo systemctl restart fail2ban.
このツールを導入することで、サーバーは容易な攻撃対象から自動化された要塞へと変貌します。ネットワーク層で悪意のあるトラフィックを破棄することでCPU負荷を軽減し、ボットによるブルートフォース攻撃の侵入を防いでくれるため、安心して眠ることができます。.localファイルの活用、特定のjailの管理、そして継続的なログ監視を組み合わせることで、あらゆるLinuxシステム管理者にとって不可欠な多層防御システムを実現できます。