web-dev-qa-db-ja.com

無効なユーザー名のSSHログイン試行をブロックするFail2BanまたはDenyHosts

ユーザーが無効なユーザー名としてログインしようとしたときにIPアドレスを自動的にブロックする方法はありますか?私は既に持っています:

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime = 31536000

/etc/fail2ban/jail.conf

4
slayton1213

Fail2banを支援することはできませんが、まさにこの目的のためにdenyhostsを使用しています。非常に多くのパラメーターを調整でき、他の不良ホストを送受信できる分散データベースもあります。

詳細なハウツーは次のとおりです。

denyhostsパッケージをインストール(Sudo apt-get install denyhosts

/etc/denyhosts.confのデフォルト設定を見てください。DENY_TRESHOLD_INVALIDDENY_TRESHOLD_VALID、およびDENY_TRESHOLD_ROOTオプションに興味があるかもしれません。

同期サーバーについては、デフォルトで無効になっているため、SYNC_SERVERオプションのコメントを外して有効にする必要があります。

また、PURGE_DENYオプションを1wに設定することも悪くありません。自分でブロックアウトする場合は、1週間後にエントリが削除され、再度ログインできるようになります。

4
oerdnj

これは fail2banでは意図的にサポートされていません

つまり、無効なユーザーは2回試行され、有効なユーザーの無効なパスワードは5回試行されます。 fail2banではどのようにできますか?

これに反対する説得力のある主張は、攻撃者がユーザー名が有効かどうかを知ることができるため、ブルートフォース攻撃の検索スペースが劇的に減少するということです。

同じことをしようとしているときにあなたの質問を見つけましたが、今では気が変わりました。秘密の利益とは別に、攻撃者を早期に遮断して時間を節約するのはなぜですか?

5
supervacuo

Fail2Banなどを使用するのではなく、すべてのルートログインをSSHで完全に拒否しないのはなぜですか?そうすることで、rootログインの使用を拒否することで、block全員の問題を取り除くことができます。なぜなら、rootパスワードを推測してもログインを拒否するからです。試行回数に関係なく。

/etc/ssh/sshd_configで、PermitRootLoginを含む行を見つけます。任意のテキストエディターで編集しますが、必ずSudo/gksudo(GUIテキストエディターを使用している場合のみgksudo)を使用してください。私が言及したその行をPermitRootLogin noと言ってから保存し、Sudo service ssh restartを実行します。

(この回答は、誤って記述された最初の質問のために書かれました。この回答は、回答する能力を超えているため、修正された質問と一致するように変更されません。

4
Thomas Ward

まず、filter.d/sshd-invaliduser.confで無効なユーザーのフィルターを定義します。

[INCLUDES]
before = common.conf

[Definition]
_daemon = sshd

failregex = ^%(__prefix_line)s[iI](?:llegal|nvalid) user .*? from <Host>(?: port \d+)?\s*$
ignoreregex = 

[Init]
journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd

次に、jail.localで有効にします。

[sshd-invaliduser]
enabled = true
maxretry = 1
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

これは、Debian 9のfail2ban 0.9.6-2で機能します。

3
cweiske