web-dev-qa-db-ja.com

iptablesでパケットをレート制限する必要がありますか?

Ubuntu Serverでiptablesを使用しています。これはVPS上のWebサーバーです。
パケットをレート制限する必要があるかどうか知りたいのですが。もしそうなら、私は何をレート制限すべきですか?また、グローバルに、またはIPアドレスごとに行う必要がありますか?

参照
私はこれを示唆している人々を見ました:

# Limit packet traffic on a TCP or UDP port:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m limit --limit $lim/s --limit-burst $lb -j ACCEPT

# Limit established/related packet traffic:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit $lim/s --limit-burst $lb -j ACCEPT

上記のように、グローバルなレート制限は、少なくとも私が想像できるケースでは、あまり役に立ちません。グローバルにレート制限する必要がある場合はありますか?
通常、IPごとのレート制限が優れていると思います。

# Add the IP to the list:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m recent --set --name RATELIMITED
# Drop if exceeded limit:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m recent --update --seconds $sec --hitcount $hc --rttl --name RATELIMITED -j DROP
# Accept if inside limit:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -j ACCEPT

追加の質問:リモートIPが偽装されている可能性があります。それらを適切に制限する方法は?
これに関する別の質問を追加しました:
https://serverfault.com/questions/340258/how-to-rate-limit-spoofed-ips-with-iptables

ゴール
いくつかのD/DoS攻撃と一般的な虐待のリスクを軽減しようとしています。

関連
SSH接続をiptablesでレート制限するにはどうすればよいですか?

[〜#〜] ps [〜#〜]:ICMPに関連する質問を開きました。このプロトコルのレート制限が含まれています。 iptables | ICMPのタイプ:どのタイプが(潜在的に)有害ですか?

8
ML--

レート制限は防止ではなく、DoSへの招待です。特に、上記のフレーバーでは、状態情報のない未認証パケットの特定のレートを超えた場合にパケットがドロップされます。誰もがこの接続状態でパケット(送信元IPアドレスを含む)を簡単に偽造できるため、レート制限機能を利用した新しいDoS攻撃ベクトルが発生します。

レート制限は一般に、

  1. 構成内の予測可能なハードまたはソフト接続制限
  2. 負荷に関係なく、優先トラフィックまたは管理トラフィックの接続をセットアップできるようにするには、一般的なトラフィックのレート制限をこの制限よりも低く設定します

1.多くの場合、迷惑でさえ判断するのに十分なほど困難ですが、2。は、接続のセットアップ時に「優先または管理」トラフィックを他のトラフィックから確実に区別できる場合にのみ機能します。別のネットワークインターフェイスを経由している場合。

他の場合では、システムに回復力を追加するよりも回復力を低下させます。

6
the-wabbit

-m制限の問題は、すべてのTCP=パケットが送信元IPアドレスに関係なく制限されることです。そのため、synパケットの制限が低い場合、

-A INPUT -p tcp  --syn -m limit --limit 30/s --limit-burst 30 -j ACCEPT
-A INPUT -p tcp --syn -j DROP

制限ルールが一致し、送信元IPアドレスに関係なく多くのパケットをドロップするため、SYN​​フラグ付きのtcpパケットを多数送信することで、hpingコマンドラインを持つ1つのクライアントだけがサーバーをダウンさせることができます。制限は良いトラフィックと悪いトラフィックを区別しません。また、着信トラフィックも減少します。

hpingは次のようになります。

hping thetargetedhostip -p 80 -S -c 1000 -i u20000

ハッシュ制限を使用して、着信TCP接続を制限することをお勧めしますIPアドレスごと。次のルールは、毎秒30パケットが受信される場合にのみ一致し、許可されるパケットの数IPごとを毎秒15パケットに減らします。

-A INPUT -p tcp --syn -m hashlimit --hashlimit 15/s --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-name synattack -j ACCEPT 
-A INPUT -p tcp --syn -j DROP

事実、今日停止しているサーバーの多くは、攻撃中にリソースが不足しているのではなく、すべての受信トラフィックを制限モジュールがドロップしているために停止していると確信しています。

3

レート制限ルールは通常、想定しているサーバーに限定します。

  • 予想されるトラフィック量が少ない
  • 認証サービス

たとえば、ホスティングコントロールパネルのログインページ、POP3、IMAP、SSHなどです。通常、HTTPサービスは開いたままにし、問題がある場合にのみブロックします。

良好なWebトラフィックをドロップしたくない。スラッシュドットのリンクは大量のトラフィックを送信する可能性があり、グローバルルールでは問題を認識できない場合があります。

これらのルールは主に確立されたTCP接続の制限に焦点を当てているため、この方法を使用してブロックすることはできず、通常は問題になりません。スプーフィングIPの場合、TCP接続を確立することはできません。

1
jeffatrackaid