iptable-Übereinstimmungsregel für STUN/TURN-Verkehr

iptable-Übereinstimmungsregel für STUN/TURN-Verkehr

Ich suche nach TURN/STUN-Paketen, die über Port 443 eingehen. Laut TURN RFC sind die Bytes 46 bis 49 das TURN-Paket-Magic-Cookie „2112a442“.Hierist der Screenshot von Wireshark, wo ich festgestellt habe, dass der STUN-Cookie von 46 bis 49 ist

Ich verwende sie -m u32 --u32 "46=0x2112A442" , kann sie aber nicht filtern.

Hier ist meine komplette iptable-Regel

-A PREROUTING -i eth0 -p tcp --dport 443 -m u32 --u32 "46=0x2112A442" -j REDIRECT --to-port 3478

Irgendeine Idee, was ich falsch machen könnte?

Antwort1

Die Offsets des iptables u32-Moduls beziehen sich auf das Paket abzüglich des Ethernet-Wrappers (abzüglich der Quell- und Ziel-MAC, jeweils 6 Bytes, und des Ether-Typs, 2 Bytes). Daher muss Ihr Wireshark-Offset von 46 um 14 angepasst werden und sollte 32 betragen.

Suchen Sie nun zur Plausibilitätsprüfung den Typ des Servicebytes, den wir aus dem u32-Bereich vondie Manpages für iptables-extensionsliegt bei Offset 9 und wir wissen auch, dass es 0x11 (17) für UDP ist. Es liegt bei Byte 0x17 (23) Ihres Wireshark-Screenshots. Wenn wir von dort aus zählen, erhalten wir auch 32 als den Offset, den Sie verwenden sollten.

EDIT 1: Da das Protokoll UDP ist, müssen Sie auch diesen Teil Ihres iptables-Befehls anpassen. Also:

sudo iptables -A PREROUTING -i eth0 -p udp --dport 443 -m u32 --u32 "32=0x2112A442" -j REDIRECT --to-port 3478

EDIT 2: In Ihrem Beispiel-Wireshark-Screenshot ist der Zielport 5004 und nicht 443. Der iptables-Befehl funktioniert also für Ihr spezielles Paketbeispiel immer noch nicht. Vielleicht das hier:

sudo iptables -A PREROUTING -i eth0 -p udp --dport 5004 -m u32 --u32 "32=0x2112A442" -j REDIRECT --to-port 3478

verwandte Informationen