根本的には、パスワード認証やめれ、とか、ポート変えろ、とかあるんだろうけど、他ユーザへの告知がめんどくさいとかいろいろあるので、がんばってみた。
はじめは、このへんのページを見ながら、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 (avoidsprefixes)
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)回失敗すると、とかを設定できる。
まあ、デフォルトでとりあえず動かしてみます。
今日は、何回かうまくはじいてるみたい。よかよか。