web-dev-qa-db-ja.com

大規模なIPブラックリストを使用してWebサーバーへのアクセスを拒否する最良の方法は?

IPブラックリストこのような 、しかしおそらく2〜3倍大きい、可能性のある効率的で簡単な使用方法はありますか?標準/ユーザースペースソフトウェア(カーネルの再コンパイルなし)を使用してWebサーバー(lighttpdまたはApache)へのアクセスを拒否するために(CIDRにあまり単純化されていません) Linux

ApacheconfigのAFAIKDenyルールとiptablesのルックアップ時間は線形です。 IPの大規模なリストを効率的に処理するカーネルモジュールがありますが、それらをインストールするには、カーネルにパッチを適用する必要があります。

4
Kornel

moblock (google it-まだリンクを追加できません、新しいユーザー)を使用してみてください。ダウンロードしたすべてのブロックリストを無効にし、生成したローカルブロックリストのみを使用します。カーネルにNFQUEUE(ネットリンクキュー)サポートを追加する必要があるかもしれませんが、デフォルトではすでに存在している可能性があります。

一般的な設定は次のとおりです。フィルタリングするポート上のすべてのSYNパケットについて、netfilterのNFQUEUEアクションを使用して、ユーザースペースに座ってmoblockにプッシュします。 Moblockは効率的なマッチングを行い、ACCEPTまたはDROP応答をnetlinkに送り返します。

Moblock構成ファイルの形式は非常に単純です。各行に、123.123.123.42-123.123.124.56の形式で名前とIP範囲を指定します。 moblockが範囲をロードすると、それらの範囲と一致する効率的なデータ構造が構築されます。一致が原因でパケットがドロップされると、範囲名と実際の送信元IPがログに記録されます(一致のログを無効にした場合はログに記録されません)。

約230000IP範囲のデフォルト構成(ダウンロードされたブロックリスト)でmoblockを使用しましたが、認識できるパフォーマンスヒットは観察されませんでした(SYNパケットのみをフィルタリングする)ただし、カーネル/ユーザースペースのトラフィックを抑えることが重要です)。

注意点:moblockが実行されていない場合、NFQUEUEのデフォルトのアクションはDROPであり、アプリケーションのサービス拒否につながると思います。そうは言っても、私は6か月以上問題なくmoblockを継続的に実行してきました。それでも、正常なIPがサーバー上の:80に接続できなくなった場合に警告する監視プローブを設定することをお勧めします。回復するためにnetfilterで信頼できるIPを明示的にホワイトリストに登録していない限り、moblockを使用してsshをフィルタリングすることは絶対に避けてください。

9
David Anderson

ApacheconfigおよびiptablesのAFAIKDenyルールには、線形ルックアップ時間があります。

ある種。 IPTablesでチェーンを使用して分割できます。つまり、単純なアプローチでは、アドレスのAクラスブロック(1.0.0.0/8、2.0.0.0/8など)ごとにチェーンを作成し、そのルールを設定します。チェーン内のブロックにより、ルックアップ時間が大幅に短縮されます(つまり、最悪の場合、Aクラスルールに到達するための最大200のルール評価と、そのブロック内の多くのルール。「iptables -L-v-n」を使用してどのルールセットが最も評価されており、それらを一番上に移動します。これを行うための他のより良い方法があります。iptablesのドキュメントでこれについて説明しています。

4
Kurt

ええ、あなたのシステムには、/etc/hosts.allowがあるはずです。見てみましょう。サービスごとでもIPをロックアウトする非常に簡単な例がいくつかあります。

一言で言えば、/etc/hosts.allow

ALL : ALL : allow

httpd : /etc/hosts.httpd.deny : deny

sshd : /etc/hosts.sshd.deny : deny
2
Till

.htaccessで行うこともできます

これはuseragentによってブロックする例ですが、考え方は同じです: http://jetfar.com/trap-content-scraper-spam-harvester-bots-using-honeypot-wordpress-htaccess/

ApacheconfigおよびiptablesのAFAIKDenyルールには、線形ルックアップ時間があります。

これを除外する前に、試してからいくつかのテストを行います。影響は目立たない可能性があり、保守は非常に簡単です。

同様に、リストを/etc/hosts.denyに追加してみてください。

最初に両方をテストしないと、どちらが速いとは思いません。

乾杯/リッチー

1
Rich

カーネルをパッシングせずにそれを行うことはできないと思います。

ipset は良い解決策のようです。

そのウェブページからの引用:

あなたがしたい場合は

  • 複数のIPアドレスまたはポート番号を保存し、一挙にiptablesによるコレクションと照合します。
  • パフォーマンスを低下させることなく、IPアドレスまたはポートに対してiptablesルールを動的に更新します。
  • 複雑なIPアドレスとポートベースのルールセットを単一のiptablesルールで表現し、IPセットの速度の恩恵を受ける

それならipsetがあなたにとって適切なツールかもしれません。

1
cstamas