Fail2Ban : 侵入防止システム2024/09/09 |
侵入防止システム (Intrusion Prevention System) Fail2Ban のインストールと設定です。 |
|
[1] | Fail2Ban をインストールします。 |
root@dlp:~ #
pkg install -y py311-fail2ban whois # パケットフィルターを有効にする root@dlp:~ # sysrc pf_enable="YES" root@dlp:~ # sysrc pflogd_enable="YES" root@dlp:~ # sysrc pf_rules="/etc/pf.conf"
root@dlp:~ #
vi /etc/pf.conf # 新規作成
set skip on lo
scrub in anchor "f2b/*" service pf start
|
[2] | デフォルトの設定は [/usr/local/etc/fail2ban/jail.conf] で定義されています。 デフォルト値はパッケージのアップデートで変更となる可能性があるため、設定を変更したい場合は [jail.local] ファイルを作成して変更します。 |
root@dlp:~ #
vi /usr/local/etc/fail2ban/jail.conf # 87行目 : 自身のローカル IP は無視する #ignoreself = true # 92行目 : 無視するネットワークを追加可能 #ignoreip = 127.0.0.1/8 ::1 # 103行目 : 対象ホストを禁止する時間 # - 単位は秒 # - 1m ⇒ 1 分 # - 1h ⇒ 1 時間 # - 1d ⇒ 1 日 # - 1mo ⇒ 1 か月 # - 1y ⇒ 1 年 bantime = 10m # 107行目 : 設定時間内にしきい値を超えると対象ホストを禁止する findtime = 10m # 110行目 : 失敗回数が設定値を超えると対象ホストを禁止する maxretry = 5 # 178行目 : メール通知する場合の宛先アドレス destemail = root@localhost # 181行目 : メール通知する場合の送信元アドレス sender = root@<fq-hostname> # 263行目 : デフォルトのアクション # - %(action_)s ⇒ 禁止のみ # - %(action_mw)s ⇒ 禁止とメール通知 (Whois 情報含む) # - %(action_mwl)s ⇒ 禁止とメール通知 (Whois 情報とログ含む) action = %(action_)s
root@dlp:~ #
vi /usr/local/etc/fail2ban/jail.local
# 新規作成
# デフォルト値を上書きしたい場合は設定可
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
banaction = pf[actiontype=<multiport>]
banaction_allports = pf[actiontype=<allports>]
bantime = 1d
findtime = 5m
maxretry = 5
destemail = root@localhost
sender = root@dlp.srv.world
service fail2ban enable fail2ban enabled in /etc/rc.conf root@dlp:~ # service fail2ban start Server ready |
[3] | 特定のサービスを監視する場合は設定を追加します。(デフォルトは未設定) 例として、SSH サービスを監視対象として設定します。 |
root@dlp:~ # fail2ban-client status Status |- Number of jail: 0 `- Jail list:
root@dlp:~ #
vi /usr/local/etc/fail2ban/jail.d/sshd.conf # 新規作成 [sshd] enabled = true # サービス毎にデフォルト値を上書き可 bantime = 600 findtime = 3m maxretry = 5 action = %(action_mw)s
root@dlp:~ #
service fail2ban reload OK # サービスの状態を表示 root@dlp:~ # fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list: # しきい値を超えたホストが禁止された状態 root@dlp:~ # fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 5 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 10.0.0.203 # 実際の禁止アクションは pf で制御 root@dlp:~ # pfctl -a f2b/sshd -s rules block drop quick proto tcp from <f2b-sshd> to any port = ssh root@dlp:~ # pfctl -a f2b/sshd -t f2b-sshd -T show 10.0.0.203 # メール通知を有効にしている場合は以下のようなメールが送信される root@dlp:~ # s-nail you have mail s-nail version v14.9.24. Type `?' for help /var/mail/root: 3 messages 3 unread U 2 Fail2Ban 2024-09-09 10:45 21/529 [Fail2Ban] sshd: started on dlp.srv.world U 3 Fail2Ban 2024-09-09 10:47 40/1045 [Fail2Ban] sshd: banned 10.0.0.203 from dlp.srv.world & 3 [-- Message 3 -- 40 lines, 1045 bytes --]: Subject: [Fail2Ban] sshd: banned 10.0.0.203 from dlp.srv.world Date: Mon, 09 Sep 2024 10:47:59 +0900 From: Fail2Ban <root@dlp.srv.world> To: root@localhost Message-Id: <20240909014759.AAB9A200B3@dlp.srv.world> Hi, The IP 10.0.0.203 has just been banned by Fail2Ban after 5 attempts against sshd. Here is more information about 10.0.0.203 : ..... ..... |
[4] | 禁止ホストを手動で追加/削除したい場合は以下のように実行します。 |
root@dlp:~ # fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 5 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 10.0.0.203 # [10.0.0.203] の禁止を解除する root@dlp:~ # fail2ban-client set sshd unbanip 10.0.0.203 1 fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 5 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 0 |- Total banned: 1 `- Banned IP list: # [10.0.0.192/28] の禁止を追加する root@dlp:~ # fail2ban-client set sshd banip 10.0.0.192/28 1 fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 5 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 1 |- Total banned: 2 `- Banned IP list: 10.0.0.192/28 # 禁止ホストを全て解除する場合は以下 root@dlp:~ # fail2ban-client unban --all |
[5] | [jail.conf] には SSH 以外のサービスも多数の事前定義があるため、定義名を指定することで監視対象に設定可能です。 |
root@dlp:~ # grep '^\[' /usr/local/etc/fail2ban/jail.conf | tail -n +3 [sshd] [dropbear] [selinux-ssh] [apache-auth] [apache-badbots] [apache-noscript] [apache-overflows] [apache-nohome] [apache-botsearch] [apache-fakegooglebot] [apache-modsecurity] ..... ..... # 例として Apache2 の Basic 認証を設定 root@dlp:~ # vi /usr/local/etc/fail2ban/jail.d/apache-auth.conf # 新規作成 [apache-auth] enabled = true bantime = 600 findtime = 3m maxretry = 5 action = %(action_mw)s # 例として Vsftpd を設定 root@dlp:~ # vi /usr/local/etc/fail2ban/jail.d/vsftpd.conf # 新規作成 [vsftpd] enabled = true action = %(action_mw)s # 例として Postfix SASL を設定 root@dlp:~ # vi /usr/local/etc/fail2ban/jail.d/postfix-sasl.conf # 新規作成 [postfix-sasl] enabled = true action = %(action_mw)s
root@dlp:~ #
root@dlp:~ # service fail2ban reload
fail2ban-client status Status |- Number of jail: 4 `- Jail list: apache-auth, postfix-sasl, sshd, vsftpd # 適当に認証失敗して動作確認 root@dlp:~ # fail2ban-client status apache-auth Status for the jail: apache-auth |- Filter | |- Currently failed: 0 | |- Total failed: 10 | `- File list: /var/log/httpd/error_log `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 10.0.0.5root@dlp:~ # pfctl -a f2b/apache-auth -t f2b-apache-auth -T show 10.0.0.5root@dlp:~ # fail2ban-client status vsftpd Status for the jail: vsftpd |- Filter | |- Currently failed: 0 | |- Total failed: 5 | `- File list: /var/log/vsftpd.log `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 10.0.0.203root@dlp:~ # pfctl -a f2b/vsftpd -t f2b-vsftpd -T show 10.0.0.203 |