回答:
ここだという件名に良いポストライナーWichmannによっては。
それを行うための論文の方法の長所と短所を説明しています:
fail2banを使用します。これは、構成可能な時間内に何度か試行に失敗すると、IPをロックアウトします。
これとパスワード強度テスト(john(John the Ripper)を使用)を組み合わせて、ブルートフォース攻撃が成功しないことを確認します。
TARPIT
、(xtables-addonsから)気分が悪い場合は、ターゲットにtcpトラフィックを送信するiptablesチェーンと組み合わせることができます。
あなたができる小さなことは、DenyHostsのようなものを使用することです:
http://denyhosts.sourceforge.net/
組み込みのhosts.allow / hosts.denyを使用して、SSH悪用者をブロックします。
これらの攻撃を回避する最も簡単な方法の1つは、sshdがリッスンするポートを変更することです
Chrisが指摘するように、パスワードの代わりに暗号化キーを使用します。
それに追加:
パブリックssh接続にアクセスする必要がある人または場所(フローティングパブリックIPを使用)は何人ですか?
維持するパブリックsshホストの数と、一般的な接続条件を絞り込むことができるかどうかによっては、少数の外部ホストへのアクセスを制限する、よりシンプルで保守可能な構成になる場合があります。
これがあなたのために働くなら、それはあなたの管理オーバーヘッドを本当に単純化できます。
他の良い提案に加えて、本当に簡単なことの1つは、着信接続のレート制限です。IPごとに1分あたり3接続に制限:
iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
sshd_configの「AllowUsers」オプションを使用して、少数のユーザーのみがログインできるようにします。他のユーザーは、ユーザー名とパスワードが正しい場合でも拒否されます。
ユーザーを特定のホストからのログインに制限することもできます。
例えば、
AllowUsers user1 user2@host.example.com
これにより、検索スペースが削減され、誤って放置または有効化されたままになっている古いユーザーが回避されます(もちろん、これらはいずれにしても無効にする必要がありますが、これはSSHベースのエントリでの使用を停止する簡単な方法です)。
これはブルートフォース攻撃を完全に止めるわけではありませんが、リスクを減らすのに役立ちます。
PFでそのようなものを使用します。
テーブル<SSH-ブルート>持続
ラベルssh_bruteのから迅速にログにブロックを
$ ext_ifプロトのtcpへ($ ext_if)ポートのsshモジュレート状態\上でのパス
(最大-SRC-CONN-率3/10は、世界的なフラッシュオーバーロード)
コンテキストは重要ですが、次のようなことをお勧めします。
さらに sherbangの速度制限の提案、遅延の長さが重要です。3回のログイン試行のグループ間の遅延を2分から20分に増やすことにより、ログインを3回以上試行した異なるIPアドレスの数が減少し、1台のマシンで2週間の期間を44回から3回に減らしました。これらの3つのアドレスのいずれも、11時間以上試行し続けませんでした。
非常に逸話ですが、auth.logの方がずっと読みやすくなりました...