web-dev-qa-db-ja.com

tcまたはipfilterを使用してIPパケットの最後のフラグメントを照合する

たとえば2900バイトのUDPパケットを送信しています。断片化により、パケットは2つのIPフラグメントに分割されます。私のtcu32フィルター(より多くのフラグメントビットとIP/PORTの組み合わせ)は最初のフラグメントのみに一致し、2番目のフラグメントは一致しません。

フィルタを使用して最後のフラグメントを照合するにはどうすればよいですか。私はtcまたはiptablesフィルタールールのどちらでも大丈夫です

4
Pritesh

できません。 nf_conntrack_ipv4をロードします。このモジュールはパケットをデフラグし、ルールが機能するはずです。

3
Diego Woitasen

できません。 nf_conntrack_ipv4をロードします。このモジュールはパケットをデフラグし、ルールが機能するはずです。

本当じゃない。

Pktがローカルに送信される場合、nf_conntrack_ipv4はpktフラグメントをデフラグしません。フックNF_INET_LOCAL_OUT(ipv4_conntrack_defragを呼び出す)は、断片化が発生する前にあるためです。

UFOまたはudpgsoが有効になっている場合、tcフィルターは(フラグメントではなく)pkt全体に一致します。 tcフィルターのUDPポートは有効です。

無効にすると、フラグメントが一致します。ほとんどの場合、UDPポートは最初のフラグメントにあります。したがって、2番目のフラグメントをポートと一致させることはできません。使用できるのはipとprotocolのみです。

UFOとudpgsoは、カーネルのバージョンとnic(UFOの場合)によって異なります。

カーネル> = 4.14の場合、UFOカーネルサポートは削除されます

カーネル> = 4.18の場合、UDPGsoが追加されます

0
faicker