蝸牛の歩み

蝸牛の如く,ゆっくりでも着実に前へ・・・

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 のバックアップを編集しないといけないので注意が必要.