Linode で Ubuntu インスタンスを入手しました。SSH をセキュリティ保護するために、 をインストールしましたfail2ban
( を使用apt-get
)。しかし、問題が発生しました。fail2ban
正しいパスワードを入力しているにもかかわらず、IP が禁止され続けました (ありがたいことに、限られた期間ですが)。そのため、 を削除してfail2ban
、denyhosts
代わりに をインストールしました。同じ問題ですが、より深刻です。SSH でログインするたびに、IP が禁止されるようです。 から を削除し/etc/hosts.deny
、再起動しdenyhosts
て再度ログインすると、IP が再び禁止されます。
考えられる唯一の説明は、私が root として SSH でログインしているということです (はい、はい、わかっています)。おそらく、ログインに成功したとしても、root として SSH でログインしたユーザーをブロックする設定がどこかにあるのでしょうか? これは奇妙に思えます。何かアイデアはありますか? (IP をホワイトリストに登録するのは一時的な解決策です。1 つの IP からしかログインできないようにしたくありません。)
答え1
これらのアプリの中には、失敗したキー ログインをブルート フォース攻撃としてカウントするものがあるという話を聞いたことがあると思います。キーが入った状態で ssh-agent を実行していますか? そのセットで接続すると、パスワードに戻る前にすべてのキーが順番に提供されるので、それが原因かもしれません。sshd のログ レベルを高く設定し、fail2ban/denyhost ログを確認してください。
編集:ここ私にこの件についてヒントを与えてくれた最初の情報源であり、その解決方法も教えてくれました。
答え2
以下のリンクを確認してください。
- http://denyhosts.sourceforge.net/faq.html#3_9
- http://denyhosts.sourceforge.net/faq.html#3_19
- http://denyhosts.sourceforge.net/faq.html#allowed
fail2banとdenyhostsのアイデア全体を廃止したい場合は、以下のNathan Powellの言うように、ポート22をもっとわかりにくいものに変更してください。
さらにいくつかのアイデア:
iptables: 次の例では、10 分以内にポート 22 で 2 回を超える接続試行を行う着信接続がドロップされます。
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
キーベースのログイン
ポートノッカー(knockd)
答え3
sshd が VERBOSE ログ レベル (またはそれ以上) に設定されている場合、ユーザーが正常にログインするたびに、システム ログに「...Failed none...」というフレーズが記録されます。デフォルトでは、fail2ban はこれを失敗としてカウントするように設定されています。sshd のログ レベルを INFO に戻すことで、この問題を解決しました。
詳細については、この質問に対する私の回答をご覧ください。fail2banは、一連の*成功した*ログイン後に私を禁止します
答え4
fail2ban に戻ることに抵抗がない場合は、ignoreip
のディレクティブをいつでも使用できますjail.conf
。例:
ignoreip = 127.0.0.1 192.168.1.0/32
こうすれば、ずさんな入力でブロックされることがなくなります ;-) また、IP を偽装してブロックされることもなくなります (ただし、TCP トラフィックの場合はそれほど大きな問題にはなりません)。