Fail2Banは、さまざまなプロセスのログファイルをスキャンし、パスワードの失敗が多すぎるIPアドレスを禁止するログ解析ユーティリティです。ログインの試行が見つかると、Fail2Banはiptablesに新しいルールを追加して、攻撃者のIPアドレスを一時的または永続的にブロックします。また、同じことをメールで通知することもできます。
これは主にSSHを介した侵入の検出に重点を置いていますが、ログファイルを使用する任意のサービスで機能するように構成できます。
前提条件
- sudo権限を持つroot以外のユーザーがいるFedora33またはCentOS8ベースのサーバー。
- Nanoエディターをインストールします。これを使用します。
$ sudo dnf install nano -y
Fail2Banをインストールします
CentOS 8にFail2Banをインストールするには、最初にEPELYumリポジトリをインストールする必要があります。
$ sudo dnf install epel-release
Fedora33はFail2Banに同梱されています。
次のコマンドを実行して、Fedora33とCentOS8の両方にFail2Banをインストールします。
$ sudo dnf install fail2ban
インストールしたら、サービスを有効にする必要があります。
$ sudo systemctl enable fail2ban
次に、fail2banサービスを開始します。
$ sudo systemctl start fail2ban
これで、サービスのステータスをチェックして、サービスが正しく機能しているかどうかを確認できます。
$ sudo systemctl status fail2ban
? fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-11-02 21:15:59 UTC; 5s ago
Docs: man:fail2ban(1)
Process: 19031 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
Main PID: 19032 (f2b/server)
Tasks: 3 (limit: 1125)
Memory: 11.0M
CPU: 96ms
CGroup: /system.slice/fail2ban.service
??19032 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start
Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Starting Fail2Ban Service...
Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Started Fail2Ban Service.
Nov 02 21:15:59 howtoforge-tutorial fail2ban-server[19032]: Server ready
Fail2Banを構成する
Fail2Banサービスは、構成ファイルを/etc/fail2ban
ディレクトリに保持します。 jail.conf
中にjail.conf
ファイルがあります。このファイルは通常、パッケージのアップグレード中に上書きされるため、編集しないでください。
代わりに、すべての構成は、 jail.local
と呼ばれる新しいファイルで行う必要があります。これら2つのファイルの設定は、 /etc/fail2ban/jail.d/
ディレクトリのファイルを介してさらに上書きできます。
構成は次の順序で適用されます。
/etc/fail2ban/jail.conf
etc/fail2ban/jail.d/*.conf
, Alphabetically/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
, Alphabetically
jail.conf
は、 [DEFAULT]
セクションと、それに続く個々のサービスのセクションが含まれています。これらのセクションは、 .local
ファイルで定義することで上書きできます。
jail.localを構成する
新しいjail.local
ファイルを作成します。
$ sudo nano /etc/fail2ban/jail.local
次のコードを貼り付けます。
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override backend=auto in /etc/fail2ban/jail.conf
backend = systemd
[sshd]
enabled = true
Ctrl + Xを押してエディターを閉じ、ファイルを保存するように求められたらYを押します。これbantime
、すべてのサービスに新しいデフォルトのbantime
設定され、バックエンドがsystemd
変更され、 `sshd
bantime
が有効になります。
Fail2banを再起動して、新しい変更を実装します。
$ sudo systemctl restart fail2ban
fail2ban-client
ユーティリティを使用して、新しく適用された設定を確認できます。
$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
また、具体的には以下の方法で各刑務所の詳細な状況を知ることができます。
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
その他の設定
jail.conf
は、 /jail.local
ファイルを使用してカスタマイズできるより多くの設定を提供します。次に、いくつかの設定について説明します。
IPのホワイトリストへの登録
次のコードを使用して、IPがFail2banによってブロックされないようにホワイトリストに登録/無視できます。
[DEFAULT]
ignoreip = 127.0.0.1/8 123.45.67.89
特定のjailのIPのみをホワイトリストに登録する場合は、 fail2ban-client
をfail2ban-client
行うことができfail2ban-client
。
$ sudo fail2ban-client set JAIL addignoreip 123.45.67.89
上記のコマンドのJAIL
を、設定を編集するjailの名前に置き換えます。
禁止時間と再試行量
禁止の再試行の時間と回数を設定できる3つの設定があります。
bantime
-IPが禁止される時間の長さ(秒単位)。恒久的な禁止を設定するには、この値を負の数に設定します。デフォルト値は10分または600秒です。
findtime
禁止が設定されるまでのログイン試行間の時間の長さです。この値は常に秒数です。たとえば、Fail2banが5回のログイン試行の失敗後にIPを禁止するように設定されている場合、それらの5回の試行は、設定された10分のbantime
制限内に発生する必要があります。広告
maxretry
禁止が課される前の単一のIPアドレスからの再試行の数です。デフォルト値は3です。
これらの設定をカスタマイズするには、次の行を\etc\fail2ban\jail.local
ファイルの[DEFAULT]
セクションに貼り付けます。
bantime = 3600
findtime = 300
maxretry = 4
電子メールアラート
電子メールアラートを送信するには、最初にメール転送エージェント(MTA)をインストールする必要があります。この目的のために、 sendmail
をインストールします。
$ sudo dnf install sendmail
メールを受信するには、 [DEFAULT]
セクションの\etc\fail2ban\jail.local
ファイルに次のコードを追加します。
destemail = [email protected]
sendername = Fail2Ban
mta = sendmail
action = %(action_mw)s
destemail
は、メールの受信先IDである宛先EメールIDを指し、 sendername
は送信者の名前を指すため、 sendername
を使用しています。 mta
は、ここではsendmail
である使用されているメール転送エージェントを指します。 Postfix
を使用している場合は、 mta
変数に値mail
を使用します。
action
とは、侵入が検出されたときに実行されるデフォルトのアクションを指します。デフォルト値は%(action_)s
で、ユーザーのみを禁止します。 %(action_mw)s
は禁止し、Whoisレポートを含む電子メールを送信します。一方、 %(action_mwl)s
は禁止し、関連するログファイルからの情報とともにWhoisレポートを含む電子メールを送信します。これは、刑務所固有の基準で変更することもできます。
個々の刑務所の設定
すでに知っているように、 [DEFAULT]
セクションはすべてのJailに適用されます。次に、いくつかの特定のJailとその設定を調べます。
SSHD刑務所
以前にjail.local
ファイルで[sshd]
定義しました。次のコードでもう少しカスタマイズできます。
[sshd]
enabled = true
port = ssh
logpath = %(ssh_log)s
この場合、デフォルトのSSHポートであるポートに事前定義された変数ssh
を使用しています。別のSSHポートを使用している場合は、それを変更する必要があります。 logpath
は、監視するログファイルの場所を指します。 %(ssh_log)s
は、Fail2banの標準構成ファイル( /etc/fail2ban/paths-common.conf
)で定義された値を使用します。
Nginx刑務所
Nginxには、Fail2Banで使用できるいくつかのJailがあります。たとえば、サイトのパスワードで保護された部分が繰り返し攻撃された場合、 jail.local
ファイルのセクション[nginx-http-auth]
をjail.local
できます。広告
[nginx-http-auth]
enabled = true
[nginx-botsearch]
というセクションを追加して、存在しないフォルダーや場所へのリクエストを停止することもできます。
[nginx-badbots]
enabled = true
他のNginxジェイルもありますが、Fail2Banで事前構成されていません。それらは手動で作成する必要があり、それらのほとんどは、Fail2Banに付属しているApacheのものに基づくことができます。
Fail2BanフィルターとFailregex
Fail2Ban構成には、フィルターと呼ばれる別の設定があります。フィルタは、ログファイルの行が認証の失敗を示しているかどうかを判断します。
構成ファイル内のフィルタ値にあるファイルへの参照である/etc/fail2ban/filter.d
そのディレクトリと.conf
除去拡張。
ディレクトリを確認することで、利用可能なフィルタの種類を確認できます。
$ ls /etc/fail2ban/filter.d
Nginxの2つのログファイルが含まれています。 nginx-badbots.conf
およびnginx-http-auth.conf
。
これらの構成ファイルは、正規表現(regex)を使用してログファイルを解析します。これらはFailregexと呼ばれます。独自の正規表現を作成して、新しいフィルターをカスタマイズまたは作成できます。これらの正規表現はこのチュートリアルの範囲外であるため、ここでは詳しく説明しません。
Fail2Banログとファイアウォールを監視する
あなたは使用してfail2banの状況を確認することができsystemctl
先に述べたように。
$ sudo systemctl status fail2ban
もう少し詳細を取得するには、 journalctl
コマンドを使用できます。
$ sudo journalctl -b -u fail2ban
また、 fail2ban-client
を使用して、 fail2ban-server
または個々のjailのステータスを照会することもできます。
$ sudo fail2ban-client status
$ sudo fail2ban-client status jail_name
Fail2banのログファイルを照会することもできます。
$ sudo tail -F /var/log/fail2ban.log
iptablesに設定されている現在のルールを一覧表示できます。
$ sudo iptables -L
iptablesルールを、それらのルールを有効にするために必要なコマンドを反映した形式でリストすることもできます。
$ sudo iptables -S
結論
これで、Fedora33またはCentOS8ベースのサーバーへのFail2Banのインストールと構成に関するチュートリアルは終了です。ご不明な点がございましたら、下のコメント欄に投稿してください。