ssh に対する brute force attack に対抗するためのツール導入
自宅からでもサーバーにログインできるようにとsshをどこからでも受け付けるようにしていると,毎日かなりのattackがくる.
May 21 02:22:26 hoge sshd[31913]: Failed password for illegal user ftp from 82.77.57.5 port 33759 ssh2 May 21 02:22:29 hoge sshd[31915]: Failed password for illegal user test from 82.77.57.5 port 34445 ssh2 May 21 02:22:32 hoge sshd[31917]: Failed password for illegal user webmaster from 82.77.57.5 port 34861 ssh2 May 21 02:22:35 hoge sshd[31919]: Failed password for illegal user postmaster from 82.77.57.5 port 35475 ssh2 May 21 02:22:38 hoge sshd[31921]: Failed password for illegal user postfix from 82.77.57.5 port 35939 ssh2 May 21 02:22:41 hoge sshd[31923]: Failed password for illegal user postgres from 82.77.57.5 port 36521 ssh2
こんなログが残っているわけだ.
一時期は手で attacker の IP address を /etc/hosts.allow に追加して拒否していたのだが,面倒になって最近やっていなかった.今日,/etc/hosts.allow への追加を自動でやってくれるスクリプトが セキュリティホールmemoで紹介されていたので,maxloginsを導入.導入は簡単.
(1) http://www.teamits.com/resources/maxlogins.txt を /usr/local/bin/maxlogins.pl として保存
(2) その後半にインストール方法が書かれているので従う.まず,/etc/syslog.conf に以下を追加.
auth.info;authpriv.info |/usr/local/bin/maxlogins.pl
(3) 次に以下を実行.
chown root:wheel /usr/local/bin/maxlogins.pl chmod 750 /usr/local/bin/maxlogins.pl killall -HUP syslogd
(4) スクリプトの先頭に設定ヶ所があるので,必要の応じて変更する.
(5) テストをする
(5.1) /var/log/auth.log に attack に相当する log を書き込む
logger -p auth.info "sshd[12345]: Failed password for root from 10.0.0.1 port 55555 test1" logger -p auth.info "sshd[12345]: Failed password for root from 10.0.0.1 port 55555 test2" logger -p auth.info "sshd[12345]: Failed password for root from 10.0.0.1 port 55555 test3" logger -p auth.info "sshd[12345]: Failed password for root from 10.0.0.1 port 55555 test4"
(5.2) これで auth.log に
May 24 17:14:45 hoge root: maxlogins - 10.0.0.1 blocked
というログが残る.また,/etc/hosts.allow の先頭に
sshd: 10.0.0.1 :Deny
という行が追加される.
(6) そのままだと,もし仮に自分自身がパスワードを何回か間違えたときにも ssh でログインできなくなってしまうので(また /etc/hosts.allow も肥大化するので?),一定期間ごとに元の /etc/hosts.allow に戻すように設定.ただ,今後 /etc/hosts.allow を編集したいときには元の /etc/hosts.allow のバックアップを編集しないといけないので注意が必要.