web-dev-qa-db-ja.com

iptablesを使用したudpフラッド防止

udpフラッドを防ぎたいので、内部ネットワークから来ておらず、udp接続に関係のないすべてのudpをドロップすると、udpフラッドを防ぐことができると思います。言い換えれば、内部ネットワークからのudpsと、外部ネットワークからのudpsだけで、最初ではなく、udp接続に関連するudpsが受け入れられ、他の人がudpフラッディングをドロップした場合、発生しないと思います。私が書いたこのiptableコードは働ける

# accept any packet that's a response to anything we sent
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p udp -s 8.8.8.0/24 -j ACCEPT

iptables -A INPUT -p udp -j DROP

8.8.8.0/24は私の内部ネットワークのアドレスです。それは本当だと思いますか?私のコードは本当ですか?

1
tarane

iptablesステートメントが正しい場合でも、多くのことを達成することはできません。

UDPはステートレスです。これは、任意の大きなUDPパケットをサーバーに送信できることを意味します。宛先UDPポートでリッスンしているプロセスがない場合、これらのパケットはカーネルによってDROPpedされます。トラフィックはまだインターネットを通過しており、モデム/デマークにヒットしています。

UDPドロップで防ぐことができるのは、実行中のサービスに関連付けられているポートのフラッディングを防ぐことだけです。 EG:大きなDNSパケットを作成し、UDP経由でDNSサーバーのポートに送信できます。サーバーはおそらくそれらのパケットをACCEPTし、それらを処理しようとします。ブロッキングが役立つのはこの処理です。

任意のUDPパケットをブロックしようとすると、ひどい時間を過ごすことになります。 DHCP、DNS、RPC、NFS、NTPなど...大量の重要なネットワークプロトコルがUDP上で実行されます。これらは許可する必要があります。


ネットワークをもう一度見てみることをお勧めします。 [〜#〜] if [〜#〜] UDPフラッドに問題がある場合は、正確な原因への対処と考えられる解決策を確認できます。

アップストリーム帯域幅を埋めている大きなUDPパケットで溢れている場合は、より多くの帯域幅またはDDoS保護を取得することを検討してください。

フラッドが原因で一部のアプリケーションが誤動作している場合は、アプリケーションを修正するか、より適切なアプリケーションを使用するか、パケットを事前に選別するために何らかのレイヤー7ファイアウォールに夢中になることを検討してください。

最後に、ブロッキングUDP floodingは良い考えです。なぜなら....? ...?おそらくそうではありません。特定のUDPフラッドの問題がない限り、解決する以上に機能しなくなる可能性があります。

2
Daniel Widrick