LAMPサーバーをセットアップしていますが、SSH / FTP / etcを防ぐ必要があります。成功からのブルートフォースログオン試行。denyhostsとfail2banの両方について多くの推奨事項を見てきましたが、2つの比較はほとんどありません。また、IPTablesルールで同じ機能を満たすことができることも読みました。
なぜこれらの方法の1つを別の方法よりも選択するのですか?serverfaultの人々はこの問題をどのように処理しますか?
LAMPサーバーをセットアップしていますが、SSH / FTP / etcを防ぐ必要があります。成功からのブルートフォースログオン試行。denyhostsとfail2banの両方について多くの推奨事項を見てきましたが、2つの比較はほとんどありません。また、IPTablesルールで同じ機能を満たすことができることも読みました。
なぜこれらの方法の1つを別の方法よりも選択するのですか?serverfaultの人々はこの問題をどのように処理しますか?
回答:
IIRC、DenyHostsはSSHサービスのみを監視します。他のサービスも保護する必要がある場合は、間違いなくFail2banの方が適しています。構成を微調整する場合は、ほぼすべてのサービスを監視するように構成できますが、Fail2banの新しいバージョンには多くの一般的なサーバーデーモンに適したルールセットが含まれているため、その必要はありません。単純なiptablesレート制限を超えてfail2banを使用することには、サーバーを攻撃する速度を単純に低下させるのではなく、特定の時間、攻撃者を完全にブロックするという利点があります。多くの実稼働サーバーでfail2banを使用してすばらしい結果を出しましたが、使用を開始して以来、これらのサーバーのいずれかがブルートフォース攻撃によって侵害されたことはありません。
そもそも彼らがあなたのマシンに到達しないようにしてください!ホストに到達する前に、またはSSHレベルでさえ、ブルートフォース攻撃を阻止する方法はたくさんあります。
そうは言っても、fail2banのようなものでオペレーティングシステムを保護することは素晴らしいアイデアです。Fail2banはDenyHostsとは少し異なりますが、同じスペースでプレイします。Fail2banはiptablesを使用します。
http://en.wikipedia.org/wiki/Fail2ban
Fail2banはDenyHostsに似ていますが、SSHに焦点を当てているDenyHostsとは異なり、fail2banは、ログイン試行をログファイルに書き込むサービスを監視するように構成できます。 、fail2banはNetfilter / iptablesおよびTCP Wrappers /etc/hosts.denyを使用できます。
総当たりログインを防止するために考慮すべき重要なセキュリティ技術がいくつかあります。
SSH:
応用:
iptablesルールを使用して、同じIPアドレスからの新しい接続をレート制限します(主にSSHですが、FTPでも正常に機能します)。「fail2ban」などのツールと比較した場合の利点は、iptablesルートが完全にカーネルモードで発生し、ログファイルのテール/解析にユーザーモードツールに依存しないことです。
できるなら、問題のプロトコルにアクセスできる送信元アドレスを制限することも、明らかに役立ちます。
SSHでは、証明書認証を使用し、パスワードを受け入れないようにする必要があります。
SSHを保護するもう1つの方法(これを10年以上使用しています)は、iptablesの最近のライブラリをネイティブに使用することです(ディストリビューションによって異なります)。
基本的に、iptablesに組み込まれているポートノッキングとして使用できます。これにより、頭痛が大幅に軽減されます。tcp connectできる限り(telnetは1つの方法です。sshクライアントも使用して、ポートを指定しました。指定されたポート番号へのtcp接続を行うもの。Puttyを見ています!)クライアントがssh接続を開始すると、これを使用できます。
以下は、ホストからポート4103でサーバーにtelnetで接続するときに、iptablesがホストにポート22を開く例です。telnetを使用してポート4102または4104に接続し、sedオープニングを閉じます。4102と4104の両方の理由は、単純なtcpスキャンが22を開かないようにするためです。ポート4103へのtcp connect(telnet)のみが許可されます。
楽しい!
ああ、私はFail2Banを好みます。より柔軟性があり、tcpwrapperではなくiptablesで禁止が発生するのが好きです。
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --rcheck --name SSH -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4102 -m recent --name SSH --remove -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4103 -m recent --name SSH --set -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4104 -m recent --name SSH --remove -j DROP
Fail2banとDenyhostsのもう1つの違いは、Denyhostsが他のDenyhostsユーザーとブロックリストを共有できることです。Fail2banでは、サーバーが以前に見たIPのみをブロックできます-Denyhostsでは、他の誰かがそれを見た場合、ブルートフォースがサーバーに到達することさえできず、ブロックリストが攻撃者の前にサーバーにダウンロードされますお使いのコンピューターに到達します。
さらに別の違いは、Fail2banはiptablesを使用し、Denyhostsはtcpwrappersを使用することです。他の人は以前にこの違いに言及しましたが、言及する価値のある副次的な注意事項がいくつかあります。
iptablesでは、効率的にブロックできるIPアドレスの数に制限があります。これがおそらく、Fail2banにブロックリストを共有するメカニズムがない理由の1つです。
もう1つの効果は、iptablesがnftablesに置き換えられた場合、Fail2banがおそらく動作しなくなるか、書き換える必要があることです。Denyhostsはおそらく動作し続けます。
したがって、どちらにも長所と短所があります。私は両方好き; 私自身はDenyhostsを使用しています。通常、SSHのみを保護したいので、ブロックリストを共有するのが好きだからです。
denyhostsはssh用です。fail2banはより包括的です(HTTP、FTPなど)。どちらも舞台裏でiptablesを使用します。
退屈なiptablesやfail2banの設定をいじるのではなく、オープンコミュニティにすべての作業をしてもらい、代わりにCSF / LFDを使用してみませんか?他のすべてのオプションよりもこの方法を強くお勧めします。サーバーでできることについては、http://configserver.com/cp/csf.htmlを参照してください。CSFはコントロールパネルを必要とせず、単純なUI自体を提供します。これはシェルで行いたくない人向けです。また、非常に安定した信頼性の高い非常駐perlスクリプトです。
fail2banには、成功したsshログインを認識し、失敗のカウントをリセットするメカニズムがないようです。
sshdの標準フィルター(少なくとも私のdebianインストールでは)は、サーバーが拒否するクライアントが提示する各sshキーの失敗カウントを記録します。一部のユーザーは、ログインごとに多くのキーを提示し、いくつかのキーを通過するとログインが成功したにもかかわらず、定期的にロックアウトされます。
上記の結果として、私は現在fail2banから離れることを考えています。少なくともこの点では、denyhostsの方が優れています。しかし、明らかにそれはもはや良い選択肢ではなく、debianの最新バージョンではサポートされていません(https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for- debian /)
ここには良い解決策がありません。
実際、denyHostはsshdサービス以外の多くのサービスを防ぐことができると思います。構成ファイル- /etc/denyhosts.conf
には、次のコード行が記載されています。
# BLOCK_SERVICE: the service name that should be blocked in HOSTS_DENY
#
# man 5 hosts_access for details
#
# eg. sshd: 127.0.0.1 # will block sshd logins from 127.0.0.1
#
# To block all services for the offending host:
BLOCK_SERVICE = ALL
# To block only sshd:
# BLOCK_SERVICE = sshd
したがって、BLOCK_SERVICE
変数をALL
上記のように設定すると、sshサービスを監視できます。
Denyhostsバージョン3.0:ログファイルにIPアドレスが表示されるたびに、Denyhostsはhosts.denyファイルを開き、アドレスと一致するものをすべて読み取ります。毎回。メモリには何もキャッシュされません。巨大なhosts.denyファイルがあり、多くのプローブ(多数のログファイルエントリ)の対象である場合、Denyhostsは、表示されるすべてのIPアドレスに対してhosts.denyファイルを読み取りおよび再読み取りするCPUの独り占めになります。良くない。
iptablesサポートを有効にすると、DenyhostsはブロックされたIPアドレスの巨大で遅いリストを作成します。Denyhostsは、ipsetまたはnftablesを使用して効率的なIPマップを作成しません。