前回の記事でfail2banをインストールすることによってSSH攻撃の対策ができました。 しかし、ログインのログ(/var/log/secure)を見るとこのようなログが残っていました。
Feb 21 09:28:28 foofoo.com sshd[20592]: Address xxx.xxx.xxx.xxx maps to hogehoge.net, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
Mar 5 19:29:11 foofoo.com sshd[3938]: reverse mapping checking getaddrinfo for hogehoge.net [xxx.xxx.xxx.xxx] failed - POSSIBLE BREAK-IN ATTEMPT!
Mar 1 17:06:51 foofoo.com sshd[31505]: Received disconnect from xxx.xxx.xxx.xxx: 11: Bye Bye
基本的にfail2banはログを見てIPアドレスを弾く(BAN)ようにするのですが、上記のパターンではIPアドレスをBANできないようです。 これが、数回程度なら大した問題ではないのですが、logwatchやNagios,Zabbixなどの監視ツールで調べてみた場合、特定のIPアドレスから何百回も攻撃されていることが判明したりすると、何かしらの対策した方が良いでしょう。 そこで今回は上記のログの場合でもBANするように設定ファイルを変更します。
フィルタ設定ファイルを編集する
SSHのフィルタは/etc/fail2ban/filter.d/sshd.confで設定できます。
# /etc/fail2ban/filter.d/sshd.conf
failregex = ...
^%(__prefix_line)sAddress <HOST> .* POSSIBLE BREAK-IN ATTEMPT!*\s*$ # 追加
^%(__prefix_line)sreverse mapping checking getaddrinfo .* \[<HOST>\] failed - POSSIBLE BREAK-IN ATTEMPT!\s*$ # 追加
^%(__prefix_line)s.+Received disconnect from <HOST>: 11: Bye Bye *$ # 追加
上記のようにパターンを追加します。
fail2banを再起動することで設定が反映されます。
$ sudo service fail2ban restart
最後に
今回はfail2banのフィルタを設定して、SSH攻撃の防止をより強化しました。 これでひと通りは大丈夫かと思いますが、それでも攻撃が多い場合は、以下の施策を行うのが良いかと思います。
- bantimeを伸ばす
- 1日(=86,400秒)や2日(=172,800秒)に伸ばす
- maxretryを減らす
- 3回までなど
- あまり減らしすぎると自分自身のIPアドレスがBANされる可能性があるので、ignoreipに追加してBAN対象から外す必要がある
- SSH接続のポートを変更する