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されます。
ホワイトリストに設定すれば大丈夫ですが。