2007年8月16日木曜日

sshguard

sshguard をいれてみた。まぁ、パスワード認証 off にしてるから
いれなくてもいいっちゃいいんだけど、お試し。アクセスあるだけでも嫌だしねっ。


o 導入
対応しているファイアウォール類は以下。素晴らしい。ipfだけexperimental.
* PF (OpenBSD, FreeBSD, NetBSD, DragonFly BSD)
* netfilter/iptables (Linux)
* IPFIREWALL/ipfw (FreeBSD, Mac OS X)
* IPFILTER (Experimental) (FreeBSD, NetBSD, Solaris)
* tcpd's hosts.allow (boxes without a network-layer firewall)

FreeBSD で pf を使っているので以下のコマンドでいれる。
% sudo portinstall security/sshguard-pf

man がインストールされなかった。。けど気にしない。


o pf 設定
pfの設定ファイルに下記追加

table のところに
table persist

フィルタリングルールのところに
block in quick on $ext_if from to any port 22 label "ssh bruteforce"
($ext_if を設定してない場合は適宜 interface 名を)

pfctl で読み込み直す。
% sudo pfctl -Fa -f [pfの設定ファイル]


o 動作確認
テストしてみる。auth.log をパイプで sshguard に流し込む。
# tail -n0 -F /var/log/auth.log | /usr/local/sbin/sshguard

ちなみに以下のログフォーマットに対応している。
* syslog entries
* syslog-ng entries
* metalog entries
* multilog entries
* raw log entries

てきとーなホストから何度もsshでつないで認証に失敗してみる。
するとそのホストからはつながらなくなっているはず。

# pfctl -Tshow -tsshguard
で追加されたアドレスを確認。

o syslog.conf 設定
ログインのたびにtail してもいいけども
root で実行しなきゃなんね
それかsshguard をsetuid root しなきゃなんね
ので、syslog.conf で設定して流し込む。下記を追加。

auth.info;authpriv.info |exec /usr/local/sbin/sshguard

他に auth.info;authpriv.info なエントリがある場合
(通常、auth.info;authpriv.info /var/log/auth.log が存在)
はそれより上に書く。

とりあえずこれだけでOK

するとまぁこんなかんじでブロックしてくれる、と。

sshguard[10351]: Blocking 221.8.79.168: 4 failures over 21 seconds.
sshguard[10351]: Releasing 221.8.79.168 after 454 seconds.

sshguard[20597]: Blocking 218.104.51.58: 4 failures over 5 seconds.
sshguard[20597]: Releasing 218.104.51.58 after 465 seconds.

デフォルトは4回で弾く。
ブロックしたアドレスのリリースまでの秒、アタックと認識する間隔も設定可能。
whitelist の機能もあるのでそれらを活用するとよりよいsshライフ(?) が送れることでしょう。


0 件のコメント:

コメントを投稿