ブルートフォース対策として「denyhosts」を設定しておこう。
(※SSHに関しては、公開鍵認証の設定をちゃんとやっとけば大丈夫だけど、他のサービスも追加していく予定なのでここで設定しておくよ!)
ブルートフォースっていうのは、機械的に暗号を解読して、パスワードを取得する攻撃手段のことで、辞書ツールとか、 あらゆる文字の組み合わせとかで何度も何度も何時間でも、いろんなコトを試してくるキモイ攻撃方法だよ!
認証回数の制限をしておかないと、解読されるのは時間の問題なので、
denyhostsっていうのを使って怪しいアクセスを遮断してしまおう。
denyhostsっていうのはデーモンとして常駐して、アクセスログを監視するよ。
そんで、設定した回数以上のアクセス失敗があったら/etc/hosts.denyにそのIPアドレスを書きこんでしまう。
hosts.denyってのは、ここに登録されたホストからのアクセスは拒否しちゃうよ!の設定ファイルで、
hosts.allowってのもあるんだけど、これはここに登録されたIPアドレスのアクセスは許可しちゃうよ!!の設定ファイルだよ。
簡単に言うと「denyhosts」は設定した条件が一致すると「hosts.deny」に怪しいヤツをガツガツ書き込んでいくということです。
hosts.denyとhosts.allowの2つのファイルは「TCPWrapper」というアクセス制御を行うための基本的なプログラムの制御ファイルだよ。
TCPWrapperはデフォルトでインストールされているんで、denyhostsをインストールしよう。
それじゃーインストールするよ。
aptitude update aptitude safe-upgrade aptitude install denyhosts |
設定ファイルをとりあえずバックアップ
cp denyhosts.conf denyhosts.confBAK |
/etc/denyhosts.conf の設定例(だいたいはデフォルトのままなので、主に設定したとこを掲載)
ここでの設定は下記のように設定するよ
監視対象:sshd
①存在しないユーザーで5回ログインに失敗した場合。
②存在するユーザーで5回ログインに失敗した場合。
③ルートで1回ログインに失敗した場合。IPアドレスをhosts.denyに1日登録し、接続を拒否する。
そんで、root宛にアクセス拒否対象にしたよメールを送信する。
※メールサーバのインストールでメールサーバを構築してるので、何かあった場合はメールが送られるようにしておく。 IMAPサーバにしているので、外出先でも確認可能だよ!
それじゃ設定始めるよ。
#denyhostsが攻撃者と思われるIPを/etc/hosts.deny に登録しておく時間を設定 #(この設定時間を過ぎると、拒否するホストから削除され、空白の場合は、ずっと登録したままにになる。–purge オプションを付けてスクリプトを起動しないと実行しない。)。 PURGE_DENY = 1d #/etc/hosts.denyから削除する回数を定義する。この回数を超えると、 #/etc/hosts.deny に登録されたままになる。default 0 (disable) PURGE_THRESHOLD = 5 #/etc/hosts.denyに追加するときのサービス名。 BLOCK_SERVICE = sshd #ログインに失敗したホストをブロックする。存在しないユーザに適用。(5回) DENY_THRESHOLD_INVALID = 5 #ログインに失敗したホストをブロックする。存在するユーザに適用。root 以外。(5回) DENY_THRESHOLD_VALID = 5 #rootログインに失敗したホストをブロックする。(1回) DENY_THRESHOLD_ROOT = 1 #ログインに失敗したホストをブロックする。WORK_DIR/restricted-usernames ファイルに書かれている username のみ。(1回) DENY_THRESHOLD_RESTRICTED = 1 #WORK_DIR のパス。 WORK_DIR = /var/lib/denyhosts #YES に設定している場合、許可されたホストからの疑わしいログインを怪しいログインとしてレポートする。 NOに設定している場合、レポートしない。許可されたホストでない怪しいログインは、全てレポートする。 SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES #YES なら、IP アドレスからホスト名をルックアップする。 HOSTNAME_LOOKUP=YES #LOCK_FILE を指定する。 LOCK_FILE = /var/run/denyhosts.pid #新しい拒否するホストと疑わしいログインについてメールする。 ADMIN_EMAIL = root@localhost #SMTP サーバのアドレス。 SMTP_HOST = localhost #SMTP サーバのポート。 SMTP_PORT = 25 #メールの From: アドレス。 SMTP_FROM = DenyHosts #メールの件名。 #SMTP_DATE_FORMAT = %a, %d %b %Y %H:%M:%S %z #メールの Date: の書式。 SMTP_SUBJECT = DenyHosts Report #デーモンが開始するまでのタイムラグ DAEMON_SLEEP = 30s #syslog へデータを送るかどうか。 #SYSLOG_REPORT=NO #ALLOWED_HOSTS_HOSTNAME_LOOKUP=NO |
設定が終わったら
/etc/init.d/denyhosts restart |
でデーモンの再起動 ログは/var/log/denyhostsに書かれる。
テストとか、間違えてhosts.denyに登録されてしまった場合は、次の手順で解除する。
denyhostsは各ファイルを監視しているので、PURGE_DENY=1dが経過しない限り /etc/hosts.denyから対象の行をいくら消しても復活してくる。。
/etc/hosts.denyから削除しただけではダメということだよ!
さて、これじゃ困るんで、どうするかというと
1:denyhostsのデーモンをSTOPさせる。
2:登録されてるファイルから対象のIPアドレスの行を削除する
/etc/hosts.deny
/var/lib/denyhosts/hosts
/var/lib/denyhosts/hosts-restricted
/var/lib/denyhosts/hosts-root
/var/lib/denyhosts/hosts-valid
/var/lib/denyhosts/users-valid
これ、手でやるのめんどくさいんでShellにするよ
【denyhostsロック解除シェル】
vi denyhosts_UnLock.sh |
#!/bin/bash #--------------------------- #denyhosts Unlock # # perm1:IP-Address # #--------------------------- # echo '***************************************************' echo '** denyhosts Unlock **' echo '***************************************************' #入力パラメータチェック1 if [ -z "$1"] then echo "引数にIPアドレスを指定して!" echo "ex) " $0 " IPアドレス" exit fi #入力パラータがIPアドレスであること if [ -z "`echo $1 |sed -e "/^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$/g"`" ] then #IPなので処理するよ!! for i in /etc/hosts.deny /var/lib/denyhosts/* do echo "--------------------------------------------------" echo "SelectFile-----:"$i echo "deleteLine------------:"$1 sed -i -e "/$1/d" $i echo "--------------------------------------------------" cat $i done else echo "IPアドレスじゃねーし!!" fi |
実行方法:sudo ./denyhosts_UnLock.sh IPアドレス
3:denyhostsのデーモンをSTARTさせる。
これで、大丈夫。。
TCPWrappersのtcpdchkを使って「hosts.deny」「hosts.allow」を確認する
tcpdchk -v Using network configuration file: /etc/inetd.conf >>>> Rule /etc/hosts.deny line 24: daemons: sshd clients: xxx.4xx.xx2.x1x access: denied |
access: denied←アクセス拒否