postfix-sasl向けにfail2banを導入していたのですが、failedは検知してくれてるのに全然Banできてなかったので原因を調べました。私の環境ではfirewalldとipsetを使ってBanしています。
/etc/fail2ban/jail.local はこんな感じ。
[DEFAULT]
bantime = -1
findtime = 600
maxretry = 5
backend = systemd
banaction = firewallcmd-ipset
[sshd]
enabled = true
[postfix-sasl]
enabled = true
logpath = /var/log/mail/maillog
[sshd-ddos]
enabled = true
/var/log/fail2ban.logには特に情報がありませんでした。
DEFAULTのbanactionにfirewallcmd-ipsetを設定しているので、firewallcmd-ipsetの動作を見直せば動くかなぁ。
/etc/fail2ban/action.d/firewallcmd-ipset.confはこんな感じ。
[Definition]
actionstart = ipset create fail2ban-<name> hash:ip timeout <bantime>
firewall-cmd --direct --add-rule ipv4 filter <chain> 0 -p <protocol> -m multiport --dports <port> -m set --match-set fail2ban-<name> src -j <blocktype>
actionstop = firewall-cmd --direct --remove-rule ipv4 filter <chain> 0 -p <protocol> -m multiport --dports <port> -m set --match-set fail2ban-<name> src -j <blocktype>
ipset flush fail2ban-<name>
ipset destroy fail2ban-<name>
actionban = ipset add fail2ban-<name> <ip> timeout <bantime> -exist
actionunban = ipset del fail2ban-<name> <ip> -exist
(2019/10/30追記)ドキュメント読む限り、reloadがないのが原因ではなかったのですが、じゃあなんで動かなかったのかがわからない…。
(参考:Documentation - HowTo - Reload firewalld | firewalld)bantimeをデフォルト値にしても動作しませんでした。firewall-cmd —reload
がないですね。そりゃ動かんわ。
/etc/fail2ban/action.d/firewallcmd-ipset.localで設定を上書きします。bantimeいらないなぁとか色々考えた結果以下で運用することにしました。
[Definition]
actionstart = ipset create fail2ban-<name> hash:ip
firewall-cmd --permanent --direct --add-rule ipv4 filter <chain> 0 -m set --match-set fail2ban-<name> src -j <blocktype>
firewall-cmd --reload
actionstop = firewall-cmd --permanent --direct --remove-rule ipv4 filter <chain> 0 -m set --match-set fail2ban-<name> src -j <blocktype>
firewall-cmd --reload
ipset flush fail2ban-<name>
ipset destroy fail2ban-<name>
actionban = ipset add fail2ban-<name> <ip> -exist
[Init]
blocktype = DROP
無事Banされるようになりました。
Status for the jail: postfix-sasl
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- Journal matches: _SYSTEMD_UNIT=postfix.service
`- Actions
|- Currently banned: 9
|- Total banned: 9
`- Banned IP list: 大体中国