fail2banがiptablesに反映されないので、設定を変更する

自分用のメールサーバを某VPSで運用していますが、サブミッションポートを叩きにくる輩が多いので、fail2banを導入しました。ところが、fail2banで捕捉してbanしたにも係わらず、maillogを見ると 同じIPから相変わらず悪戯してくるので、悩んでいました。

サブミッションポート(587番)でエラーを3回出したらbanする設定にしていたのですが、本当にiptablesにそのIPをdropするようにしているか 確認してみます。

[root@hogehoge fail2ban]# iptables -nv –list f2b-postfix-sasl
Chain f2b-postfix-sasl (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all — * * 185.156.173.124 0.0.0.0/0
0 0 DROP all — * * 181.214.206.189 0.0.0.0/0
2774 2821K RETURN all — * * 0.0.0.0/0 0.0.0.0/0

のようにチェインが出来ています。でもそのIPをDROPしていません。

それで、このチェインが /etc/sysconfig/iptables での設定とどう関係しているか見てみたところ、

[root@hogehoge tmp]# iptables -nv -L > ipt.txt
[root@hogehoge tmp]# head -5 ipt.txt
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
12780 10M f2b-postfix-sasl tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25
11509 10M f2b-dovecot tcp — * * 0.0.0.0/0 0.0.0.0/0 multiport dports 25,465,587,110,995,143,993
34897 20M ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

ありゃりゃ、f2b-postfix-sasl のチェインへ smtp(25番)しか渡していない!
/etc/fail2ban/jail.conf内の設定を見ると、

action = iptables[name=postfix-sasl, port=smtp, protocol=tcp]
sendmail-whois[name=postfix-sasl, dest=root, sender=fail2ban]

とマルチポートになっていませんでした。慌てて

action = iptables-multiport[name=postfix-sasl, port=”smtp,submission”, protocol=tcp]
以下は同じ

に変更したところ、

[root@hogehoge tmp]# iptables -nv -L > ipt.txt
[root@hogehoge tmp]# head -5 ipt.txt
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
4 240 f2b-postfix-sasl tcp — * * 0.0.0.0/0 0.0.0.0/0 multiport dports 25,587
3 180 f2b-dovecot tcp — * * 0.0.0.0/0 0.0.0.0/0 multiport dports 25,465,587,110,995,143,993
510 56739 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

となり、同一IPから3回悪戯されるとbanされるようになりました。
ほぼ解決!

ただ、入力パケットの destination port を表示するシェルスクリプトで見てみると、サブミッションポートを悪戯しているパケットのdestinationが 25番 になってしまっている(マルチポートの設定をする前は587番だったのに)のが気になります。