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


8

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攻撃と一般的な虐待のリスクを軽減しようとしている目標

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

PS:私はちょうどICMPのために関連する質問を開きました、そしてそれはこのプロトコルのためのレート制限を含みます:iptables | ICMPのタイプ:(潜在的に)有害なものはどれですか?

回答:


6

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

レート制限は一般に、

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

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

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


こんにちはsyneticon-dj。ファイアウォールの設定ミスがDoS攻撃のもう1つのツールであることを理解し、同意します。ヘッドアップをありがとう!
ML-- 2011

IPごとまたはIPポートごとのレート制限は、サーバーにとって大きすぎるが、発信者があなたが言及している問題を悪用する可能性が低い正当なトラフィックから防御する場合にも意味があるようです。たとえば、BingbotまたはFacebookボット。
JANLalinský

3

-m制限の問題は、送信元IPアドレスに関係なく、すべてのTCPパケットの制限です。したがって、次のような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

ハッシュ制限を使用して、IPアドレスごとの着信TCP接続を制限することをお勧めします。次のルールは、1秒あたり30パケットが受信され、IPあたりの許可パケット数が1秒あたり 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

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


1

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

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

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

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

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


こんにちはjeffatrackaid、あなたの答えをありがとう!私も、これらのタイプのサービス(SSHなど)を(全体的に)レート制限する傾向があります。HTTPトラフィックに関しては、それが私がグローバルな制限を適用するつもりがない理由です。この質問では、IPごとの制限が興味深い場合があるかどうかを確認します。スプーフィングされたIP(別の質問をしました)に関しては、接続を確立できませんが、SYNフラッドを使用してDoSの可能性があります。これがどのように緩和されるかについては、引き続き興味があります。
ML-- 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.