任意のポートで総当たり攻撃からSSHを保護

今日、非標準ポートでSSH上回るかどうかの調査に興味がありました。 調査自体は、パスワード推測からSSHを保護するzivot_je_cudoの作成者の方法ほど興味深いものではありません。誤った接続試行の後、20秒間新しい試行をブロックします。 明らかに、遅延は、2つの反対の希望に基づいて経験的に選択されました。タイプミスが長時間発生した場合に自分自身をブロックしないようにすると同時に、ピッカーの生活を複雑にします。 数年前から使用しているブルートフォースに対抗する方法を共有したいと思います。 これには2つの利点があります。

-正しいパスワードを設定するための試行回数が増えました

-しかし、同時にそれは総当たりの力を「永久に」ブロックします。



これら2つの相反する目標をどのように達成できますか?





hashlimitと呼ばれるiptablesモジュールを使用します。これは、一定期間内のパケット数をカウントし、しばらくしてからカウンターをリセットできます。

すべては3つのルールによって行われます。

iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit 1/hour --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name SSH --hashlimit-htable-expire 60000 -j ACCEPT



iptables -A INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j DROP



iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT








2番目と3番目のルールを理解できるようにするもの。 最も興味深いのは、1時間以内に2回の接続試行を許可することです。 指定した時間内に2回の試行を超えると、-j ACCEPTを使用したルールは機能を停止し、代わりに-j DROPを使用して次のルールに入ります(同じ方法でTARPITを設定することもできます)。 その後、接続できなくなり、60,000ミリ秒のカウントダウンが始まります。その後、試行に関する情報が「悪化」します(パラメーター--hashlimit-htable-expire)。 つまり、実際には1時間まで待つ必要がありますが、たった1分です。 全体的な軍事上のトリックは、この時間を待たずに再接続を試みると、パケットが殺され、カウンターが初期状態(1分)にリセットされることです! したがって、あなたがせっかちなブルートフォーサーであり、ブロック後に愚かにもポートを叩く場合、試行ごとに禁止を更新します! つまり、永遠に自分を禁止します!

しかし、立派なユーザーは、「バスハウス」に入る前に待機することなく接続を試行します。

hashlimitモジュールはその状態を/ procに保存します-最初は空です:

#cat / proc / net / ipt_hashlimit / SSH



最初の接続試行の後、infaはそこに到達します。

#cat / proc / net / ipt_hashlimit / SSH

55 XX.XX.XX.XX:0-> 0.0.0.0:07 11533000 230400000 115000000



最初の数字は残りの秒数です。均等にティックを見ることができます:

#cat / proc / net / ipt_hashlimit / SSH

20...:0-> 0.0.0.0.0 117429000 230400000 115000000



これをした後、私は本当に確認したかった。 そしてそれは必要です! 獣はキャッチャーに走ります! 一部の中国人はすぐに私を総当たり攻撃し始めました。 最初の4回の試行は合格し、その後1時間(!)彼は閉じたドアで愚かに空洞になりました。 この1時間の間、彼は4つのパスワードしか検証できませんでした! さらに、明らかに、疲れた。



したがって、2つの問題が解決されます。

-ユーザーが突然封印した場合、新しい試行を長く待つ必要はありません

-ブルートフォース自体が「永遠の」禁止に追い込まれます。



突然何度かパスワードを入力できなかった場合はどうしますか? 大騒ぎしないでください-静かに1分間待ってから、さらに数回試してください。

再び成功できなかった場合は、スリープ状態にすることをお勧めします。この状態では、コンソールに登らない方が良いでしょう:))



成功。



PSそして、はい、私はほとんど忘れていました-私は非標準ポートでSSHを持っています:)



UPD: hashlimitの構成について少し

UPD2:最近のより一般的なモジュールであるonetwoで同じことを達成する方法。

UPD3:言うまでもなく 、SSHを介したパスワード推測に対する保護に適しているだけでなく、接続頻度が高すぎると他のさまざまなサービスにも使用できます。

UPD4: SSHD自体を使用した接続の制限。



All Articles