DenyHosts の働きで SSHでログインできなくなってしまった

不正侵入防止のために DenyHosts を設置している。


DenyHosts は、セキュリティログを監視して (筆者の環境 CentOS 5.2では/var/log/secure) 不正ログインを試みた痕跡があった場合に、/etc/hosts.deny (TCP wrapper によるアクセス規制リスト) に規制する IP を自動で追加してくれる。


設定ファイル (/etc/denyhosts/denyhosts.cfg) はデフォルトのもの (/usr/share/doc/denyhosts-2.6/denyhosts.cfg-dist相当) で必要十分に機能するようになっているが、筆者はさらに以下などのようにして少しばかり厳しくしている。

PURGE_DENY =                 ←2度とログインを受け付けない…
BLOCK_SERVICE = ALL          ←全てのサービスで…
DENY_THRESHOLD_INVALID = 1   ←1度でも…
DENY_THRESHOLD_VALID = 1     ←1度でも…
DENY_THRESHOLD_ROOT = 1      ←1度でも…しくじったら。

正しい意味は、本サイト http://denyhosts.sourceforge.net/faq.html 等々でご確認くださいね(^^;)


それがきちんと機能した…


FTP を スーパーデーモン (xinetd) 経由の起動に変更したので、念のため nmap などを使ってセキュリティ監査をしていたら、DenyHosts から報告メールが届いた。見覚えのあるIP。なんと自IPが蹴られるようになってるじゃないか…。(DenyHosts はきちんと働いてくれている。アンポンタン筆者の予見力がきちんと働いていない。)


筆者の設定では、1度でも不正アクセスを試みた IP からは hosts.deny を参照する全てのサービスへのログインができないようにしているので、FTP で ログインして /etc/hosts.deny を一旦削除するなどの方法もとれない。コンパネがあれば、それ経由で作業するなどしかないかと思うが、筆者はたまたまログイン中のコンソールがあったのでそこから作業した。


/etc/hosts.deny から自IPの行を削除。
ログイン → OK♪
ところが、しばらくすると再び DenyHosts からメールが来る。
(ホラー映画みたいだ・・)
/etc/hosts.deny を確認すると "きちんと" 再登録されている。
(真面目だ・・)


再び、「なんで〜??」


もしや nmap の使い方を間違えて再三ポートスキャンでもさせちゃってるのかと当初見当外れな調べからはじめたが、一息ついて DenyHosts の動き方を考え始めてやっとこさ理解。


DenyHosts は、冒頭に書いたように、定期的にセキュリティログを監視して、その結果不正アクセスを試みたIPを hosts.deny に追記している。そのため履歴が残っている限り登録し続けるようだ。
(あなたが正しい、私が正しくない)


で、「どうすれば…?」


当該ログから自IPでの不正アクセスの痕跡(?)と判断される行を探して削除するとか、
DenyHosts のワークファイル (/usr/share/denyhosts/data 以下) を触るなどしても可能なのかも(?)しれませんが、
筆者はなるべく簡単確実そうな (←これ重要)、 以下のアプローチを試しました。


1. /etc/denyhosts/denyhosts.cfg の以下を変更。

 > #RESET_ON_SUCCESS = yes
 < RESET_ON_SUCCESS = yes

2. /etc/hosts.deny から 自IP を削除。

3. DenyHosts を再起動

$ service denyhosts restart

4. なんらかのサービス (SSH, FTPなど) で "即" ログイン

↑ "即" がキモです。

DenyHosts をデーモンとしてデフォルト設定で起動している場合には、

DAEMON_SLEEP = 30s

となっているかと思いますので、その30秒のインターバルの間に正しいログインをすればそれまでの悪行(?)、もとい愚行をチャラにしてくれます。