まめ畑

ゆるゆると書いていきます

Denyhosts導入メモ

最近、サーバのSSHサービスに対し、不正なアクセスを試みた形跡が増加してきました。ブルートフォース攻撃も若干見受けられるので、何か対策を行わないといけなと思いDenyhostsを導入しました。思ったよりも簡単に導入が出来たので、攻撃対策をしたい方は導入を考えてみてはいかがでしょうか?

ツールの説明から、DenyHostsは不正な攻撃を察知して防御するためのツールです。設定した回数不成功ログインが繰り返された場合に、そのIPアドレスを/etc/hosts.denyに記録し接続を拒否します。また、怪しい活動をしているIPアドレスを集めている専用サーバからIPアドレスをダウンロードして予防したり、こちらからアップロードすることも出来ます。不成功ログイン回数の設定、一定時間後の解除までの時間、レポートメールなどの設定が可能です。ここでは基本的な設定を説明します。
また、このツールは、Pythonが必要なので、蛇を飼っていない場合はサーバに導入しておいて下さい。

Denyhostsの導入

まず、Denyhostsの最新版ソースをhttp://denyhosts.sourceforge.net/からダウンロードして解凍します。
(今回は、Ver2.6を使用します。OSはCentOS4です。)

wget http://jaist.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.6.tar.gz
tar xzvf DenyHosts-2.6.tar.gz
cd DenyHosts-2.6


次は、さくっとインストール。

python setup.py install


インストールが完了したら設定ファイルのあるディレクトリに移動し設定をします。
ツールと設定ファイル名に-distが付いているので、それをコピーして編集します。
(設定項目の説明は後半に)

cd /usr/share/denyhosts/
cp denyhosts.cfg-dist denyhosts.cfg
cp daemon-control-dist daemon-control
vi denyhosts.cfg


設定をしたらパーミッションの変更

chown root daemon-control
chmod 700 daemon-control


サーバが起動した時にデーモンとして起動するようにinit.d内にシンボリックリンクを設定
今回はdenyhostsという名前でリンクを作成しています。

cd /etc/init.d
ln -s /usr/share/denyhosts/daemon-control denyhosts


後はサービスに登録して、起動時にスタートするように設定します

chkconfig --add daemon-control
chkconfig denyhosts on
service daemon-control start
chkconfig --list denyhosts でrun level 2-5がonになっているか確認します。

設定項目

  • PURGE_DENY

自動的に拒否対象から解除するまでの時間
ex 24h (m,h,d,w,yで指定します。)

  • PURGE_THRESHOLD(2009/5/14修正

拒否解除が有効な回数。この回数を超えてしまうと、二度と解除されません。
設定しないと、自動的に解除されなくなる。
0で解除の回数制限が無くなる。

  • BLOCK_SERVICE

ブロックをするサービス。
今回はsshdのみ指定しました。
hosts.allow/denyで指定出来るサービスを記述します。
全てならALL

  • DENY_THRESHOLD_INVALID

サーバに登録されていないユーザでのログイン失敗時の閾値

  • DENY_THRESHOLD_VALID

サーバに登録されてるユーザでのログイン失敗時の閾値

  • DENY_THRESHOLD_ROOT

rootでのログイン失敗時の閾値。
今回は1回でBANに設定しました。

  • SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS = [Yes/No]

怪しいログインを監視するか。

  • ADMIN_EMAIL

イベントメールの送信先
,で複数指定可能です

SMTPサーバの指定

メールの送信元と件名

  • SYNC_SERVER

Denyhostsユーザから送信されたりして集められた、不正アクセス元のIPアドレスリストを同期させるサーバ
コメント解除

  • SYNC_INTERVAL

同期間隔

  • SYNC_UPLOAD
  • SYNC_DOWNLOAD

同期する時に、自分のデータをUPするか、DownLoadするか。
Yes,Noで指定。

  • SYNC_DOWNLOAD_THRESHOLD

ここで指定した数以上のサーバで拒否されたアドレスをDownloadリストの中から設定する。

とこんな感じです。
ログは標準では、/var/log/denyhostsに書き出されます。


ちなみに現在使用している自宅サーバのアクセス拒否関係は、
ルータ(DMZ指定)

iptables(不正アクセスIPアドレス指定拒否、不要サービスへのアクセス制限)

各デーモンの設定(アクセス規制)

これに今回のDenyhostsを加えた形になります。
SWATCHも導入しています。
もちろん、hosts.allow/denyでも指定ありますが。

各設定値は運用環境に応じて設定して下さい。
あまり厳しくすると自分でログイン失敗した時にBANされます。
ホワイトリストに設定すれば大丈夫ですが。