1つのIPアドレスから1分のフレームにWebコンテンツのダウンロードを制限します(iptablesを使用)[閉じる]

1つのIPアドレスから1分のフレームにWebコンテンツのダウンロードを制限します(iptablesを使用)[閉じる]

ダウンロードトラフィックを制限するためにiptablesにどのようなルールを適用できますか?たとえば、クライアントが1分に1つのIPアドレスから400 KBのみをダウンロードできるように制限する必要がありますか?もっとダウンロードすると、5分間IPをブロックしますか? Apache/nginxではなくiptabesです。 1分以内に400kb以上を取得したい人のためにネットワーク接続をオフにしたいと思います。

ベストアンサー1

この答えは、これが次のようになると仮定します。XYの問題実際には、DoS攻撃を防ぐためにユーザーごとのサーバーリソース使用量を制限する方法です。

まず、単にiptablesを使用することに加えて、次のより良いオプションがあります。

  1. 使用しているサーバーソフトウェアに組み込まれている速度制限を使用してください。ほとんどの主要なWebサーバーは、このモジュールを組み込みまたは標準モジュールとしてサポートしています。これは、単一システムの特定のサービスへのアクセスを制限する標準的な方法でもあります。これは、iptalbeを使用するよりも3つの主な利点があります。
    • 誰もブロックしませんが、帯域幅制限を超えることはできません(ソースIPあたりの接続数を制限する場合)。
    • アプリケーションレベルのポリシーはファイアウォールを複雑にしません。
    • 通常は設定が簡単です。 NGinxの場合は実際には1行です(またはソースごとの接続制限を含む場合は5行)。 Apacheの場合は2行です(モジュールをロードする行を除く)。
  2. 速度制限を提供するには、一部のリバースプロキシソフトウェア(場合によってはアプリケーションサーバーで直接実行される場合があります)を使用します。 Squidはこのアプローチの最良の例の1つですが、ほとんどのリバースプロキシオプションはそれをサポートしています。これは、バックエンドシステムが複数ある場合の標準的なアプローチです。
  3. TCPウィンドウのサイズ変更パラメータを調整します。これは、信頼でき、正しく実行された場合、クライアントは中断されず、一度安定したら動的調整を必要としません。ただし、設定は簡単ではなく、スマートクライアントはこの問題を解決してパフォーマンスを向上させることができます。これはすべてのサーバーソフトウェアの一部の操作で行うことができますが、接続あたりの速度制限に制限されます。
  4. 真の接続あたりの速度制限を適用するには、iptablesの接続タグでネットワークデバイスキュールールを使用してください。セットアップは非常に複雑ですが、2つの明らかな利点があります。つまり、100% プロトコルに拘束されず(何でも使える)、極めて決定的な動作を提供するので(テストが簡素化されます)。

何らかの理由でiptablesしか利用できない場合は、3つの一般的なオプションがあります。

  1. limitマッチだけを使用してください。これにより、単位時間あたりのパケット数を制限できます。リンクのMTUに対していくつかの簡単な計算を行うことで、要求する帯域幅の上限を簡単に把握できます。たとえば、MTU 1500(イーサネット標準)のリンクから毎分400 KBを取得するには、1秒あたり4パケット制限または1分あたり267パケット制限を考慮する必要があります(どちらも正確ではありません)。すべて1%以内です。)しかし、ルールを追加する必要があります。ルールに一致するすべてのエントリが制限を共有するため、クライアント IP です。
  2. やや複雑な設定では、マッチングを代わりに使用できますhashlimit。これにより、より良い処理が可能になりますが、上記と同じクライアント固有のルールが適用されます。
  3. 速度制限に絶対に反応したい場合(非常に悪い考えです。ここではいくら強調しても過度ではありません。これにより、多くのレベルでユーザーの期待が崩れ、本質的にデバッグが難しくなり、デバッグが難しくなります。)さらに強くなります。rateest競争と目標を見てください。目標は、一致と一致させることができるデータを収集します。これにより、LOGターゲットを使用してIPをブロックできるユーザースペースヘルパープログラムの操作をトリガーできます。

おすすめ記事