Fedora に Fail2Ban を導入してみた。
今までは FirewallD や各 ACL にてアクセス制限を加えていたのだが、今回は Fail2Ban を導入してみた。
インストール
$ sudo dnf install fail2ban
これだけで、「fail2ban-firewalld」や「fail2ban-selinux」、「fail2ban-sendmail」、「fail2ban-server」がインストールされた。
設定
Fedora での設定は公式資料として「https://fedoraproject.org/wiki/Fail2ban_with_FirewallD」にある。
ここで設定する項目なのだがバックエンドとして SystemD 関連の設定が、デフォルトで組み込まれていた。 また、その他の設定も Fedora 用にカスタマイズされている印象を受けた。
パラメータの値などは「https://manpages.org/jailconf」を参照するとして、公式資料の通りに設定する項目は少ない。 そこで、次の様に設定した。
「/etc/fail2ban/jail.d/local.conf」
[DEFAULT]
bantime = 1h
findtime = 1d
maxretry = 3
sender = fail2ban@example.com
destemail = root@example.com
#action = %(action_mwl)s
action = firewallcmd-rich-rules %(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", chain="%(chain)s"]
ignoreip = 127.0.0.1/8 192.168.0.0/16 ::1
[sshd]
enabled = true
backend = systemd
[postfix]
enabled = true
backend = systemd
[dovecot]
enabled = true
backend = systemd
[apache-auth]
enabled = true
logpath = %(apache_error_log)s
基本的には監視対象のユニットに、「enabled = true」を指定するだけで済んだ。
※ [postfix] を指定しているのは、「/etc/fail2ban/filter.d/postfix.conf」に認証エラーなどのフィルターが指定されていたためである。[postfix-auth] や [postfix-sasl] は必要無い。
注意すべき設定
実はサーバーマシンですら GUI 環境にしてあったので、FirewallD のデフォルトゾーンを「FedoraWorkstation」で運用していた。
もしも、ゾーンが「public」で無い場合は変更する箇所がある。
# firewall-cmd --get-active-zones
FedoraWorkstation (default)
interfaces: wlp2s0 enp3s0 enp1s0
drop
sources: ipset:DROPLIST ipset:ru.zone.ipv4 ipset:ru.zone.ipv6 ipset:cn.zone.ipv4 ipset:cn.zone.ipv6 ipset:hk.zone.ipv4 ipset:hk.zone.ipv6 ipset:kr.zone.ipv4 ipset:kr.zone.ipv6 ipset:nl.zone.ipv4 ipset:nl.zone.ipv6 ipset:Tor
「/etc/fail2ban/action.d/firewallcmd-common.conf」にゾーンを指定している箇所が存在するので、デフォルトのゾーンに変更した。
# Option: zone
# Notes use command firewall-cmd --get-active-zones to see a list of all active zones. See firewalld man pages for more information on zones
# Values: STRING Default: public
#zone = public
zone = FedoraWorkstation
MariaDB に関する設定は、存在しない
確認した限りでは MariaDB に関する設定は存在しなかった。(MySQL)は存在する。
「journalctl」や SystemD を利用している関係上、ユニット名は「mariadb」になるハズである。
そこで、もしも MariaDB を対象とする場合は、MySQL の設定を全て複製し、MariaDB 用にカスタマイズする必要があると思われる。 ネットでも Fail2Ban の MariaDB 対応を検索してみたが、英語のサイトを含めてマトモなモノは見つからなかった。
そもそも MariaDB をインターネットに接続する必要性も感じないが、その場合は少し苦労すると思われる。
自動起動の設定と起動
# systemctl enable fail2ban
# systemctl start fail2ban
起動すれば、対象サービス毎の開始通知メールが、受信できた。
起動後の確認
SELinux や SystemD、journalctl にも対応していたので、導入がスムーズに行えた。
少なくとも Fedora 版の fail2ban はカスタマイズに問題が無い様に思われた。