SSHの辞書攻撃対策
- 公開日: 2008/10/25(土) 21:53[JST]
今日外からSSHトンネルが使えるかどうかを試すため、22番ポートを開けてみたら、さっそく /var/log/auth.log にいろんなユーザ名でアクセスを試みた形跡がたくさん。基本的に鍵方式のみでパスワードでのログインは認めていないからどーってことないとは思うのだが、ログが無駄に増えるのはちと困る。
ということで、調べて見たところ、maxloginsというperlスクリプトを使うのがいいらしいということが分かった。これは、繰り替えしsshにアクセスしようとするIPをブラックリストとして /var/log/maxlogins に書き込むというスクリプトで、 /etc/hosts.allow で /var/log/maxlogins に記載のIPを拒否させることによって、SSHへのアタックを防止する、というもののようだ。
てことで導入してみる。ドキュメント通りに、 /usr/local/bin にコピーしたmaxlogins.plに対して、
# 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
を追加。最後に、 /etc/hosts.allow の ALL : ALL : allow という行の前に、
sshd : /var/log/maxlogins : deny
を追加する。なお、ログを見ていると、 Did not receive identification string from xxx.xxx.xxx.xxx というメッセージが辞書攻撃の前に出力されている。ぐぐってみたところ、「学生と職員の狭間に」という日記サイトを発見。そこのサイトによれば、このメッセージはポートスキャンの痕跡とのこと。そこで、このメッセージに書いてあるIPを問答無用で拒否すべく、同サイトにあるmaxloginsのパッチを適用した。