サーバーをインタネットに公開するとsshの扉を叩く人がかなりいます。それも手持ちの鍵(idとパスワード)を順番に片っ端から試していく奴が結構沢山。
そこで、Maxloginsを使ってみる。このツールはsyslogでsshアクセス失敗回数を監視し、一定の基準を超えたアクセス禁止のIPアドレスリストを吐き出す。そのリストをhosts.allowに取り込んでsshのアクセスを禁止する仕組み。
ツールの実体はここにある。 テキストファイルだけど、”maxlogins.pl”とかの名前で/usr/local/bin に保存すし、次のようにしてsyslogから実行できるようにしておく。
# chown root:wheel /usr/local/bin/maxlogins.pl
# chmod 750 /usr/local/bin/maxlogins.pl
/etc/syslog.conf に以下を挿入する。
auth.info;authpriv.info /var/log/auth.log # ←この行の次に
auth.info;authpriv.info |exec /usr/local/bin/maxlogins.pl # ←この行を追加
このmaxlogins.pl にはオプションを追加指定できる。
-e: アクセス禁止の解除時間の指定。デフォルトは12時間。
-e=1d, -e=24h, -e=1440m, -e=86400s という感じで指定する。この場合いづれも1日の意味。
-a: IPアドレスがブロックされるまでの最大試行回数。 デフォルトは3回。
-a=5 という風に指定する。
-l: ログレベルの指定。 ログはデフォルトで /var/log/auth.logに記録される。
-l=1: informational (e.g., new blocks)
-l=2: above, plus IP expirations
-l=9: verbose logging
/etc/hosts.allow をいじって「アクセス禁止のIPアドレスリスト」を読み込むようにする。
#ALL : ALL : allow
sshd : 127.0.0.1 : allow
sshd : /var/log/maxlogins : deny
sshd : ALL : allow
ちなみに、これをやったらpopとかimapとかの設定も忘れずに。
ftpd : localhost : allow
ftpd : ALL : allow
ipop3d : ALL : allow
imapd : localhost : allow
imapd : ALL : deny
最後に、 syslog を再起動。
# kill -HUP (syslogのpid)
ブロックされたIPアドレスは /var/log/maxlogins に記録される。
参考リンク: 1
「FreeBSD (sshd & hosts.allow)」への1件の返信
[…] 時間以内のアクセス失敗回数が設定限度を越えるとアクセスを拒否するという方法について以前に書いたことがありますが、これのftpd版が欲しいなぁと思っていたらいい方法がありまし […]