bokumin.org

RSS Sitemap Mail
ritual-clearcut

PFでSSHブルートフォース対策(FreeBSD)

Preventing SSH Brute-Force Attacks Using PF on FreeBSD

長らくfail2banを使ってSSHのブルートフォース対策をしてきていましたが、PFで制御したほうがリソース削減になるなと思い、fail2banを止めてPFのみの実装に変更しました。/etc/pf.confに以下のように記述します。

# ext_ifは外向きのネットワーク
# firewall_hostは自分自身
pass in on $ext_if inet proto tcp to $firewall_host port 22 flags S/SA keep state \
  (max-src-conn 5, max-src-conn-rate 5/30, \
  overload <ratelimit> flush global)

max-src-conn 5→同じIPから同時に5個まで接続可能
max-src-conn-rate 5/30→30秒間に5回まで新規接続可能

この設定により、30秒以内に5回以上の接続試行を自動ブロックし、同時接続数を5個に制限することができるようになります。

Fail2banは常駐プロセスで、リソースを結構食っていたので不要なら削除すべきだと判断しました。

まとめ

Fail2banが必要になるのは、ログ内容に基づく検知(パスワード失敗回数、不正ユーザー名など)、複数サービスの統合管理(SSH/HTTP/メールなど)、mod_securityとの連携など、高度な制御が必要な場合です。
SSHアクセス制御のみの単純なものでしたら、pfのレート制限と地理的ブロックぐらいで十分です。

地理的ブロックに関しては以下の記事を参考にしてもらえると幸いです。

補足として、定期的にratelimitテーブルをクリアしたい場合は、cronで以下のように設定します(1日以上前にブロックされたIPを解除)。

0 * * * * /sbin/pfctl -t ratelimit -T expire 86400

参考URL https://man.freebsd.org/cgi/man.cgi?query=pf.conf&apropos=0&sektion=0&manpath=FreeBSD+14.4-RELEASE&format=html

おわり