Fail2Banは、さまざまなプロセスのログファイルをスキャンし、パスワードの失敗が多すぎるIPアドレスを禁止するログ解析ユーティリティです。ログインの試行が検出されると、Fail2Banはiptablesに新しいルールを追加して、攻撃者のIPアドレスを一時的または永続的にブロックします。同じことをメールで通知することもできます。
これは主にSSHを介した侵入の検出に重点を置いていますが、ログファイルを使用する任意のサービスで機能するように構成できます。
-
sudo権限を持つroot以外のユーザーがいるFedora33またはCentOS8ベースのサーバー。
-
Nanoエディターをインストールします。これを使用します。
$ sudo dnf install nano -y
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サービスは、構成ファイルを / etc / fail2ban
に保持します ディレクトリ。 jail.conf
ファイルに出くわします 初期化。このファイルは通常、パッケージのアップグレード中に上書きされるため、編集しないでください。
代わりに、すべての構成は、 jail.local
と呼ばれる新しいファイルで行う必要があります。 。これら2つのファイルの設定は、/etc/fail2ban/jail.d/
のファイルを介してさらに上書きできます。 ディレクトリ。
構成は次の順序で適用されます:
-
/etc/fail2ban/jail.conf
-
etc / fail2ban / jail.d/*。conf
、アルファベット順 -
/etc/fail2ban/jail.local
-
/etc/fail2ban/jail.d/*.local
、アルファベット順
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
が設定されます すべてのサービスで、バックエンドを systemd
に変更します `sshd
を有効にします 刑務所。
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がFail2banによってブロックされないようにホワイトリストに登録/無視できます。
[DEFAULT]
ignoreip = 127.0.0.1/8 123.45.67.89
特定の刑務所のIPのみをホワイトリストに登録する場合は、 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
メールを受信するには、 \ etc \ fail2ban \ jail.local
に次のコードを追加します [DEFAULT]
の下のファイル セクション。
destemail = [email protected]
sendername = Fail2Ban
mta = sendmail
action = %(action_mw)s
destemail
sendername
でメールを受信するIDである宛先電子メールIDを指します 送信者の名前を参照しているため、Fail2Banを使用しています。 mta
sendmail
である使用されているメール転送エージェントを指します ここ。 Postfix
を使用している場合 、次に値 mail
を使用します mta
の場合 変数。
アクションコード> 侵入が検出されたときに実行されるデフォルトのアクションを指します。デフォルト値は
%(action_)s
です。 これはユーザーを禁止するだけです。 %(action_mw)s
禁止し、Whoisレポートを含む電子メールを送信します。 %(action_mwl)s
関連するログファイルからの情報とともに、Whoisレポートを禁止して電子メールで送信します。これは、刑務所固有の基準で変更することもできます。
すでに知っているように、 [DEFAULT]
セクションはすべての刑務所に適用されます、それはいくつかの特定の刑務所とそれらの設定を調べる時です。
SSHD刑務所
すでに[sshd]
を定義しています jail.local
の前半 ファイル。次のコードでもう少しカスタマイズできます。
[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があります。たとえば、サイトのパスワードで保護された部分が繰り返し攻撃される場合は、セクション [nginx-http-auth]
を使用できます。 jail.local
で そのためのファイル。
[nginx-http-auth]
enabled = true
[nginx-botsearch]
というセクションを追加することもできます 存在しないフォルダまたは場所へのリクエストを停止します。
[nginx-badbots]
enabled = true
他にもNginxジェイルがありますが、Fail2Banで事前構成されていません。それらは手動で作成する必要があり、それらのほとんどは、Fail2Banに付属しているApacheのものに基づくことができます。
Fail2BanフィルターとFailregexs
Fail2Ban構成には、フィルターと呼ばれる別の設定があります。フィルタは、ログファイルの行が認証の失敗を示しているかどうかを判断します。
構成ファイルのフィルター値は、 /etc/fail2ban/filter.d
にあるファイルへの参照です。 .conf
のあるディレクトリ 拡張機能が削除されました。
ディレクトリを確認すると、使用可能なフィルターの種類を確認できます。
$ ls /etc/fail2ban/filter.d
Nginxの2つのログファイルが表示されます。 nginx-badbots.conf
およびnginx-http-auth.conf
。
これらの構成ファイルは、正規表現(regex)を使用してログファイルを解析します。これらはFailregexと呼ばれます。独自の正規表現を作成することにより、新しいフィルターをカスタマイズまたは作成できます。これらの正規表現はこのチュートリアルの範囲外であるため、詳細には説明しません。
Fail2Banログとファイアウォールを監視する
systemctl
を使用して、Fail2Banのステータスを確認できます。 前に述べたように。
$ sudo systemctl status fail2ban
もう少し詳細を取得するには、 journalctl
を使用できます。 コマンド。
$ sudo journalctl -b -u fail2ban
fail2ban-client
を使用することもできます fail2ban-server
のステータスを照会するには または個別の刑務所。
$ 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のインストールと構成に関するチュートリアルは終了です。ご不明な点がございましたら、下のコメント欄に投稿してください。