クライアントが100万個未満の個々のIPアドレス(サブネットなし)のセットをブラックリストに登録する必要があり、ネットワークパフォーマンスが懸念される状況に遭遇しました。IPTablesルールは、ルートよりもパフォーマンスへの影響が少ないと推測しますが、それは単なる推測です。
IPアドレスの長いリストをブラックリストに登録するためのソリューションとして、IPTablesまたはnullルーティングのいずれかを支持する確固たる証拠やその他の正当性はありますか?この場合、すべてが自動化されているため、使いやすさは実際には問題になりません。
11月26日編集
いくつかのテストと開発の後、これらのオプションはどれも機能しないようです。ルート検索とiptablesの両方がルールセットを介して線形検索を実行し、この多くのルールを処理するのに時間がかかりすぎるようです。最新のハードウェアでは、iptablesブラックリストに100万個のアイテムを入れると、サーバーの速度が1秒あたり約2ダースまで低下します。そのため、IPTablesとnullルートが出ています。
ipset
、Jimmy Hedmanが推奨しているように、セットで65536個を超えるアドレスを追跡できないことを除いて、素晴らしいと思います。
このように多くのIPをブロックする唯一の解決策は、アプリケーション層でインデックス付きルックアップを実行することです。そうではありませんか?
詳しくは:
この場合の使用例は、IPアドレスの「既知の攻撃者」リストがWebサーバー上の静的コンテンツにアクセスするのをブロックすることです。FWIWでは、Apacheを介したブロックの実行Deny from
は、線形スキャンも実行するため、同様に遅くなります(そうでない場合)。
参考までに:最終的な作業ソリューションは、Apacheのmod_rewriteをberkeley DBマップと組み合わせて使用して、ブラックリストに対してルックアップを行うことでした。バークレーDBのインデックス付きの性質により、リストはO(log N)のパフォーマンスに合わせてスケーリングできます。