Denyhosts vs fail2ban vs iptables-ブルートフォースログオンを防ぐ最良の方法


62

LAMPサーバーをセットアップしていますが、SSH / FTP / etcを防ぐ必要があります。成功からのブルートフォースログオン試行。denyhostsとfail2banの両方について多くの推奨事項を見てきましたが、2つの比較はほとんどありません。また、IPTablesルールで同じ機能を満たすことができることも読みました。

なぜこれらの方法の1つを別の方法よりも選択するのですか?serverfaultの人々はこの問題をどのように処理しますか?

回答:


53

IIRC、DenyHostsはSSHサービスのみを監視します。他のサービスも保護する必要がある場合は、間違いなくFail2banの方が適しています。構成を微調整する場合は、ほぼすべてのサービスを監視するように構成できますが、Fail2banの新しいバージョンには多くの一般的なサーバーデーモンに適したルールセットが含まれているため、その必要はありません。単純なiptablesレート制限を超えてfail2banを使用することには、サーバーを攻撃する速度を単純に低下させるのではなく、特定の時間、攻撃者を完全にブロックするという利点があります。多くの実稼働サーバーでfail2banを使用してすばらしい結果を出しましたが、使用を開始して以来、これらのサーバーのいずれかがブルートフォース攻撃によって侵害されたことはありません。


3
DenyHostsは他のサービスを事実上ブロックすることに注意してください-主な違いは、fail2banはiptablesを使用するのに対し、DenyHostsはhosts.denyを使用するため、一部のサービスはApacheなどのホストファイルを参照しません。
ジャミーピーチ

テーブルに別のオプションを追加するために、最近、ufwファイアウォールコンフィギュレーターを使用すると、TCPまたはUDPポートに(構成不可能な)レート制限を適用できることを発見しました。すでにUFWを使用している場合は、追加のデーモンを構成して実行する代わりに、これが適切なオプションになる可能性があります。
spiffytech

ブルートフォース侵害を防ぐために最初に行うことは、適度に強力なパスワードを使用することです(または、パスワード認証を完全に無効にすることさえできます:)。レート制限(単独)はそのために弱いです。私は代替手段を試しませんでしたが、私は自分でfail2banを使用し、パスワードプローブボットをかわすことがかなり有用であることがわかりました。
ペトルグラドキフ

私の経験では、fail2banが実際に何かをするためにはもう少し作業が必要です。対照的に、denyhosts RPMをインストールして起動するだけで、より複雑なオプションを作成しながらサーバーを保護できます。fail2banの方が「良い」ことは間違いありませんが、簡単に保護するためには、denyhostsに勝てません。
ラルフボルトン

21

ブルートフォースログオンを防止する最良の方法は?

そもそも彼らがあなたのマシンに到達しないようにしてください!ホストに到達する前に、または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:

  • rootのログインを許可しない
  • SSHパスワードを許可しない(秘密キー認証を使用)
  • すべてのインターフェイスでリッスンしないでください
  • SSHのネットワークインターフェイス(eth1など)を作成します。これは、リクエストを処理するインターフェイス(eth0など)とは異なります。
  • 一般的なユーザー名を使用しないでください
  • 許可リストを使用し、SSHアクセスを必要とするユーザーのみを許可する
  • インターネットアクセスが必要な場合... IPの有限セットへのアクセスを制限します。1つの静的IPが理想的ですが、xx0.0 / 16に固定する方が0.0.0.0/0よりも優れています
  • 可能であれば、インターネットアクセスなしで接続する方法を見つけると、SSHのすべてのインターネットトラフィックを拒否できます(AWSを使用すると、インターネットをバイパスする直接接続を取得でき、Direct Connectと呼ばれます)
  • fail2banなどのソフトウェアを使用して、ブルートフォース攻撃をキャッチします
  • 特にセキュリティおよびsshパッケージで、OSが常に最新であることを確認してください

応用:

  • アプリケーション、特にセキュリティパッケージが常に最新であることを確認してください
  • アプリケーションの「admin」ページをロックダウンします。上記のアドバイスの多くは、アプリケーションの管理領域にも適用されます。
  • パスワードは管理領域を保護します。Webコンソール用のhtpasswdのようなものは、基礎となるアプリケーションの脆弱性を投影し、エントリに対する追加の障壁を作成します。
  • ファイルのアクセス許可をロックダウンします。「フォルダのアップロード」は、あらゆる種類の厄介なもののエントリポイントであることで有名です。
  • アプリケーションをプライベートネットワークの背後に配置し、フロントエンドロードバランサーとジャンプボックスのみを公開することを検討してください(これは、VPCを使用したAWSの典型的なセットアップです)

1
「ブルートフォース攻撃がホストに到達する前に、またはSSHレベルでさえ阻止する方法はたくさんあります。」というステートメントについて詳しく説明してください。外部ネットワークを制御できないホストされたマシンについて何か提案があれば、特に興味があります。ありがとう!
ケビン・キーン

7

iptablesルールを使用して、同じIPアドレスからの新しい接続をレート制限します(主にSSHですが、FTPでも正常に機能します)。「fail2ban」などのツールと比較した場合の利点は、iptablesルートが完全にカーネルモードで発生し、ログファイルのテール/解析にユーザーモードツールに依存しないことです。

何百もの失敗したsshログイン

できるなら、問題のプロトコルにアクセスできる送信元アドレスを制限することも、明らかに役立ちます。

SSHでは、証明書認証を使用し、パスワードを受け入れないようにする必要があります。


@ mc0e-私はフォローしていません。
エヴァンアンダーソン

7

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で禁止が発生するのが好きです。

SSH PORTKNOCKING

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

6

Fail2banとDenyhostsのもう1つの違いは、Denyhostsが他のDenyhostsユーザーとブロックリストを共有できることです。Fail2banでは、サーバーが以前に見たIPのみをブロックできます-Denyhostsでは、他の誰かがそれを見た場合、ブルートフォースがサーバーに到達することさえできず、ブロックリストが攻撃者の前にサーバーにダウンロードされますお使いのコンピューターに到達します。

さらに別の違いは、Fail2banはiptablesを使用し、Denyhostsはtcpwrappersを使用することです。他の人は以前にこの違いに言及しましたが、言及する価値のある副次的な注意事項がいくつかあります。

iptablesでは、効率的にブロックできるIPアドレスの数に制限があります。これがおそらく、Fail2banにブロックリストを共有するメカニズムがない理由の1つです。

もう1つの効果は、iptablesがnftablesに置き換えられた場合、Fail2banがおそらく動作しなくなるか、書き換える必要があることです。Denyhostsはおそらく動作し続けます。

したがって、どちらにも長所と短所があります。私は両方好き; 私自身はDenyhostsを使用しています。通常、SSHのみを保護したいので、ブロックリストを共有するのが好きだからです。


5

Fail2Banについて注意すべきことの1つは、DenyHostsよりも約10MB多くのメモリを使用しているように見えることです。そのため、128MB VPSを使用している場合は、それを調べてください。また、すぐに使用できるfail2banはSSHでのみ設定されます。つまり、構成に変更を加えることなく、DenyHostsはより少ないメモリで同じことを行います。


2
/ etc / default / fail2banに「ulimit -s 256」を追加してみてください。システムの10MBを下げました。
pkoch

3

denyhostsはssh用です。fail2banはより包括的です(HTTP、FTPなど)。どちらも舞台裏でiptablesを使用します。


「denyhosts」と「fail2ban」は両方ともiptablesを使用して「ブロッキング」動作を実現しますが、レート制限にiptablesを使用しません。「ユーザーランド」のログを解析し、ログエントリに基づいて動作します。
エヴァンアンダーソン

10
@ Evan、denyhostsはiptablesを使用しません(デフォルト)。TCPラッパーを使用し、システムが禁止されるときに/etc/hosts.denyを更新します。
ゾレダチェ

@Zoredache:私は訂正しました。以前に「denyhosts」を使用したことがあるので、「ブロッキング」機能をどのように呼び出すかについて誤った仮定をしました。それでも、ユーザーランドのログ解析/反応ツールであるため、「denyhosts」に対して厳密にiptablesベースのソリューションを使用することを好みます。
エヴァンアンダーソン

1

退屈なiptablesやfail2banの設定をいじるのではなく、オープンコミュニティにすべての作業をしてもらい、代わりにCSF / LFDを使用してみませんか?他のすべてのオプションよりもこの方法を強くお勧めします。サーバーでできることについては、http://configserver.com/cp/csf.htmlを参照してください。CSFはコントロールパネルを必要とせず、単純なUI自体を提供します。これはシェルで行いたくない人向けです。また、非常に安定した信頼性の高い非常駐perlスクリプトです。


8
これは広告のように聞こえますが、実際の質問を覆しています。
ドリューコーリー

いや、実際の質問については、詳しく説明していません。私は、あなたがこの質問に悩まされることさえないようにする代替案を手渡しました。真剣に、CSF / LFDは単なる別のファイアウォール制御システムではなく、ここにある種の問題から生じたものです。なぜ誰も進化したくないのでしょうか?他の人がすでにそれを解決しているので、それはあなたに多くの時間を節約します。それがCSFが存在する理由です。
ベン

価値があるのは、私の時間の獲得能力を大切にする人として、価格が正しければ、この種のことに対する「プラグアンドプレイ」ソリューションが、たとえ数ドルかかるとしてもです。そうすれば、私が本当に気にしないものについて学ぶ時間を無駄にする必要はありませんが、保護を持つことの重要性を認識します。
デビッド

1

fail2banには、成功したsshログインを認識し、失敗のカウントをリセットするメカニズムがないようです。

sshdの標準フィルター(少なくとも私のdebianインストールでは)は、サーバーが拒否するクライアントが提示する各sshキーの失敗カウントを記録します。一部のユーザーは、ログインごとに多くのキーを提示し、いくつかのキーを通過するとログインが成功したにもかかわらず、定期的にロックアウトされます。

上記の結果として、私は現在fail2banから離れることを考えています。少なくともこの点では、denyhostsの方が優れています。しかし、明らかにそれはもはや良い選択肢ではなく、debianの最新バージョンではサポートされていません(https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for- debian /

ここには良い解決策がありません。


LDAP認証を使用する場合、同様の問題があります。ログインの成功が多すぎると、ロックアウトされます:bugs.launchpad.net/ubuntu/+source/libpam-ldap/+bug/562388
Mike

すべてのキーが提示されないようにするには、ユーザーに〜/ .ssh / configファイルで使用するキーを指定する方法を示します。
BillThor

0

実際、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サービスを監視できます。


0

Denyhostsバージョン3.0:ログファイルにIPアドレスが表示されるたびに、Denyhostsはhosts.denyファイルを開き、アドレスと一致するものをすべて読み取ります。毎回。メモリには何もキャッシュされません。巨大なhosts.denyファイルがあり、多くのプローブ(多数のログファイルエントリ)の対象である場合、Denyhostsは、表示されるすべてのIPアドレスに対してhosts.denyファイルを読み取りおよび再読み取りするCPUの独り占めになります。良くない。

iptablesサポートを有効にすると、DenyhostsはブロックされたIPアドレスの巨大で遅いリストを作成します。Denyhostsは、ipsetまたはnftablesを使用して効率的なIPマップを作成しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.