ネットワーク速度を制限しますが、制限する前にTCP接続あたりのバーストを許可します。

ネットワーク速度を制限しますが、制限する前にTCP接続あたりのバーストを許可します。

速度制限(警察ポリシーと呼ばれます)を許可しますが、TCP接続ごとにバーストを許可するCiscoルータがあります。たとえば、帯域幅を50Mbitに制限できますが、4MBが送信されるまで制限を適用しないことがあります。これは確立されたすべてのTCP接続に適用されます。

Linuxでこれを行う方法はありますか?また、このソリューションに欠点はありますか?誰かに役立つ場合、バーストを設定するために使用されるCiscoコマンドは、ポリシーマップ(少なくともASA 5505では)で実行される警察コマンドの3番目のパラメータです。

これの目的は、サーバーが95/5バーストを利用してできるだけ早く一般ユーザーにWebページを提供しますが、時間の5%以上のバーストの可能性を減らすことです(たとえば、サーバー間の転送を実行するか、Webサイトからの大容量ファイルダウンロード)。私が知る限り、これは長期間続くDDoS攻撃に対する解決策ではないかもしれませんが、いくつかの理由で問題にはなりません。

答え1

iptablesこれはLinuxでおよびを通じて達成することができますtcMARK特定のバイト数を送信した接続にパケットを持つようにiptablesを設定できます。その後、tcこれらのタグ付きパケットをキュールールのクラスに入れて、帯域幅の速度を制限できます。

少しトリッキーな部分は、アップロードとダウンロードの接続を制限することです。tc着信トラフィックの調整はサポートされていません。 Web サーバーへのインターフェースの送信 (Web サーバーへのダウンロードに影響を与える) とアップストリーム プロバイダーへのインターフェースの送信 (Web サーバーのアップロードに影響を与える) の質問を調整することで、この問題を解決できます。アップストリームプロバイダはデータの転送速度を制御できないため、実際に受信(ダウンロード)トラフィックを規制しません。ただし、ネットワークサーバーへのインターフェイスを調整するとパケットが破棄され、アップローダは帯域幅制限に対応するためにTCPウィンドウを縮小します。

例:(Webサーバー接続インターフェイスがあり、eth0上流のLinuxベースのルーターにあると仮定eth1

# mark the packets for connections over 4MB being forwarded out eth1
# (uploads from webserver)
iptables -t mangle -A FORWARD -p tcp -o eth1 -m connbytes --connbytes 4194304: --connbytes-dir both --connbytes-mode bytes -j MARK --set-mark 50

# mark the packets for connections over 4MB being forwarded out eth0
# (downloads to webserver)
iptables -t mangle -A FORWARD -p tcp -o eth0 -m connbytes --connbytes 4194304: --connbytes-dir both --connbytes-mode bytes -j MARK --set-mark 50

# Setup queuing discipline for server-download traffic
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:50 htb rate 50mbit

# Setup queuing discipline for server-upload traffic
tc qdisc add dev eth1 root handle 1: htb
tc class add dev eth1 parent 1: classid 1:50 htb rate 50mbit

# set the tc filters to catch the marked packets and direct them appropriately
tc filter add dev eth0 parent 1:0 protocol ip handle 50 fw flowid 1:50
tc filter add dev eth1 parent 1:0 protocol ip handle 50 fw flowid 1:50

Linuxルーターの代わりにWebサーバー自体でこれを行う場合は、上記のアップロード部分を使用できます。 1つの注目すべき変化は、を置き換えることですFOWARDOUTPUTダウンロードするには、「中間機能ブロック」デバイスを使用するか、キュールールを設定する必要がありますifb。簡単に言えば、着信トラフィックを送信トラフィックとして扱い、使用できるように仮想インターフェイスを使用しますtc。設定方法の詳細についてはifbこちらをご覧ください。https://serverfault.com/questions/350023/tc-ingress-policing-and-ifb-mirroring

この種のコンテンツは、規模を調整するために多くの調整が必要な場合が多い。緊急の問題は、多数の接続がある拡張壁に当たる傾向があるモジュールconnbytesへの依存です。conntrack高負荷テストをお勧めします。

注目すべきもう一つのことは、これがステートレスであるため、UDPではまったく機能しないことです。この問題を解決する他の技術がありますが、あなたの要件はTCP専用です。

また、上記のすべての操作を元に戻すには、次の手順を実行します。

# Flush the mangle FORWARD chain (don't run this if you have other stuff in there)
iptables -t mangle -F FORWARD

# Delete the queuing disciplines
tc qdisc del dev eth0 root
tc qdisc del dev eth1 root

関連情報