うちのサーバーに対するSSHのブルートフォース攻撃がうざいので、攻撃元IPアドレスを自動遮断するプログラム「DenyHosts」をインストールしてみました。
もちろんうちのサーバーは秘密鍵認証しか通らないので、パスワード総当りとかやられても入れないのには変わらないんだけど、ログに残るのがすごくうっとうしいので......
FreeBSDではportsから簡単にインストールできます。
$ su
# /usr/ports/security/denyhosts
# make install
もともとPythonのスクリプトなので、Pythonが入っていない場合は自動的にインストールされます。
設定は、
/usr/local/etc/denyhosts.cfg
に自動的にインストールされますが、/usr/local/etc/rc.d/denyhostsで設定されている名前は「denyhosts.conf」なので、初期状態では立ち上がりません。
単にうちのサーバーのportsが古いのかも。
これをリネームします。
# cd /usr/local/etc/
# mv denyhosts.cfg denyhosts.conf
/usr/local/etc/denyhosts.confの初期の設定では、「/etc/hosts.deniedssh」に攻撃者の拒否リストが書き込まれるようになっています。
ファイルが存在しない場合は、
touch /etc/hosts.deniedssh
でファイルを作成しておきます。作らなくても大丈夫かもしれませんが、念のため。
また、/usr/local/etc/denyhosts.confの
#BLOCK_SERVICE = sshd
となっているところを、コメントをはずします。
BLOCK_SERVICE = sshd
これをやらないと起動しません。
加えて、このファイルをhosts.allowで読み込むよう設定する必要があります。
インストール後、/etc/hosts.allowに
sshd : /etc/hosts.deniedssh : deny
と書き加えます。
ちなみに/etc/hosts.allowはfirst match winつまり先に合致した条件が優先になるので、
ALL : ALL : allow
等より前に書き込まないと有効になりません。
うちの設定は主にこんな感じになっています。
ALL : localhost 127.0.0.1 : allow
sshd : /etc/hosts.deniedssh : deny
ALL : PARANOID : RFC931 20 : deny
ALL : ALL : allow
あとはportsのいつもどおり、/etc/rc.confに
denyhosts_enable="YES"
と書き加え、
# /usr/local/etc/rc.d/denyhosts start
を実行します。
しばらく放っておいて、/var/log/denyhostsを見ると、
2007-01-31 22:19:47,378 - denyhosts : INFO new denied hosts: ['***.***.***.***']
のように出力されており、/etc/hosts.deniedsshファイルに
sshd: ***.***.***.*** : deny
のように追加されました。よしよし。
コメントする