こつこつと

2008/08/29

sshguard

SSHでの総当たり攻撃がウザすぎるので、対策をしてみた。

根本的には、パスワード認証やめれ、とか、ポート変えろ、とかあるんだろうけど、他ユーザへの告知がめんどくさいとかいろいろあるので、がんばってみた。

はじめは、このへんのページを見ながら、iptablesのip_recentをつかって対処をしてみたんだけど、n秒間にm回以上、”アクセス”があったらというのが、どうもこわいなぁ、と。
FileZillaとか設定次第では、平気でSSHコネクション複数張ろうとしたりするので、この制限にさくっとひっかかりそうなので、やめた。

んで、探してみた。
Gentooなので、portageになにかないかと探してみたら、sshguardというのが出てきた。
SSHへのログイン失敗をログからカウントして、勝手に、iptablesへルールを追加してくれる。
(ペナルティ時間がおわったら、ルールの削除も。)
#iptables以外にも、PFやipfwとかにも対応してるみたい。

とりあえず、インストール。

# emerge sshguard

んで、設定。
環境次第のようだが、ウチは、openssh, syslog-ng, iptablesの組み合わせなので、
/usr/share/doc以下のドキュメントにどんぴしゃの設定がある。

まずは、iptablesにsshguard用のチェインを追加。

# iptables -N sshguard
# iptables -A INPUT -p tcp --dport 22 -j sshguard


次に、ログを検知させるために、syslog-ngの設定(/etc/syslog-ng/syslog-ng.conf)追加。

# pass only entries with auth+authpriv facilities that contain sshd
filter sshlogs { facility(auth, authpriv) and match("sshd"); };
# pass to this process with this template (avoids prefixes)
destination sshguardproc {
program("/usr/local/sbin/sshguard"
template("$DATE $FULLHOST $MESSAGE\n"));
};
log { source(src); filter(sshlogs); destination(sshguardproc); }

んで、killall -HUP syslog-ngで設定リロード。

これで、あとは、網にかかるのを待つだけ、
オプションでn(-p)秒間にm(-a)回失敗すると、とかを設定できる。
まあ、デフォルトでとりあえず動かしてみます。

今日は、何回かうまくはじいてるみたい。よかよか。