blocksshdがportsから消えてしまったので、代わりのツールということで、sshguardというのを入れてみた。
ツールの仕組みはどちらも同じで、auth.logから不正アクセスを検出し、ある時間内のアクセス数がしきい値を超えたらファイアーウォールで一定時間アクセスを防ぐというもの。
違いは、blocksshdはデーモンで動いてポーリングで処理するのに対して、sshguardはsyslogでパイプ経由で直接(リアルタイムに)処理される所。
ファイアーウォールとしてpacket filter (PF) を使っているので、sshguard-pfをインストール。
まずは、/etc/pf.conf にsshguardから制御するテーブルを追加。
table <sshguard> persist
同じく、/etc/pf.conf にフィルタールールを追加。
block in quick on $if4 proto tcp from <sshguard> to any port 22 label "ssh bruteforce" block in quick on $if6_ext proto tcp from <sshguard> to any port 22 label "ssh bruteforce"
つぎに、/etc/syslog.confに以下の行を追加。
auth.info;authpriv.info |/usr/local/sbin/sshguard
最後に、pf.confを読みなおして、syslogdを再起動して完了。
syslogd再起動後、最初にログが発生した時点で、auth.logに以下のメッセージが表示されて、一応動いていることを確認。
Mar 5 20:09:23 toby sshguard[52924]: Started successfully [(a,p,s)=(40, 420, 1200)], now ready to scan.
終わり。