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