インターネットに接続するホスト(外部ファイアウォール)を検討してください。望ましくないトラフィックで何をすべきか:単にそれをドロップするか、またはポート到達不能などのICMPエラーを送り返しますか? (Linux用語では:iptables -P DROP
またはiptables -j REJECT
?)
これはネットワークのセキュリティに関するものではなく、パケットはどちらの方法でも取得されていません。良き市民であることです。 REJECT
は、着信パケットに偽のオリジンがある場合、ファイアウォールをDDoSに参加させる可能性があります。しかし、それは常に正しい選択でしょうか?適切なICMPエラーを送り返す方がよい状況はありますか?
私は通常、UDPのICMPエラーとTCPのRSTパケットの返信に投票します。問題のデバッグが非常に簡単になります。また、迷惑なタイムアウトを防ぎます。メールとIRCサーバーは、IDクエリを実行するか、クライアントがオープンプロキシでないことを確認しようとします。
最も外側のファイアウォールで行われる場合、関連情報は公開されません。設定によっては、ファイアウォールがあることを隠すこともあります。答えがなければ、ブラックホールがあることは明らかです。
DoS状況での増幅効果を防ぐために、サーバーがブロードキャストアドレスに送信されたパケットに対して応答を送信しないことが重要です。この状況でファイアウォールがエラーメッセージを送信しても問題はなく、結果は1つだけです。
ICMPエラーとTCP-RSTパケットは、元の最小のパケットより大きくありません。そのため、これらはDDoS攻撃には関係ありません。
編集:DNSの信頼できるサーバー(および誤って構成されたDNSリゾルバー)は、DNSの応答がクエリよりも大きいため、攻撃者に無料で増幅を許可するので、反射型DDoS攻撃にとってはるかに興味深いものです。
あなたはiptables
について言及しているので、Linuxを示唆しています(少なくとも、調整可能なネットワークポリシーを備えたOSの例として)。
Linuxは非常に長い間、送信されるICMPエラーメッセージの数に制限がありました。デフォルトは非常に低く、1メッセージ/秒です。
Linuxのこの動作は、ネットワークsysctl
パラメーターで調整可能です: icmp_ratelimit sysctl
icmp_ratelimit-INTEGER タイプが一致するICMPパケットを送信する最大レートを制限します icmp_ratemask(以下を参照)を特定のターゲットに送信します。 0は制限を無効にします。 それ以外の場合、応答間の最小間隔(ミリ秒)。 デフォルト:1000
デフォルトではicmp_ratelimit
は、すべてのICMP応答ではなく、ICMPエラーメッセージとソースクエンチにのみ適用されます。
icmp_ratemask-INTEGER レートが制限されているICMPタイプで構成されるマスク。 有効ビット:IHGFEDCBA9876543210 デフォルトマスク:0000001100000011000(6168) ビット定義(include/linux/icmp.hを参照): 0エコー応答 3 宛先に到達できません* 4 ソースクエンチ* 5リダイレクト 8エコーリクエスト B 時間超過* C パラメータの問題* Dタイムスタンプ要求 Eタイムスタンプ応答 F情報要求 G情報応答 Hアドレスマスク要求 Iアドレスマスク応答 *これらはデフォルトでレート制限されています(上記のデフォルトマスクを参照)
したがって、このレート制限は、デフォルトではエコー応答に適用されません。
デフォルトの設定では、Linuxボックスから送信されたICMPエラーメッセージでターゲットをDOS化するのは非常に難しいようです。
(...)ICMP到達不能パケットが非常に小さい
いいえ、それらは常に小さいとは限りません。Linuxでは、ICMPエラーメッセージは、それを引き起こしたパケットから可能な限り多くのコンテキストをキャプチャします 最大576(または宛先MTU) 、それを作成します RFC 1812 に従って、IPの複雑なカプセル化が使用されている場合でも、エラーメッセージを逆多重化することが可能
4.3.2.3元のメッセージヘッダー 歴史的に、すべてのICMPエラーメッセージには、インターネット ヘッダーと、少なくともデータグラムの最初の8データバイトが含まれています がエラーを引き起こしました。 IP-in-IPトンネリングおよびその他のテクノロジーを使用しているため、これはもはや適切ではありません。したがって、ICMP データグラム ICMPデータグラムの長さが576バイトを超えることなく、可能な限り多くの元のデータグラムを含める必要があります(SHOULD)。