443 포트에서 들어오는 TURN/STUN 패킷을 찾고 있습니다. TURN RFC에 따르면 바이트 46~49는 TURN 패킷 매직 쿠키 '2112a442'입니다.여기STUN 쿠키가 46에서 49 사이인 것을 발견한 Wireshark의 스크린샷입니다.
사용하고 있지만 -m u32 --u32 "46=0x2112A442"
필터링할 수 없습니다.
내 완전한 iptable 규칙은 다음과 같습니다.
-A PREROUTING -i eth0 -p tcp --dport 443 -m u32 --u32 "46=0x2112A442" -j REDIRECT --to-port 3478
내가 뭘 잘못하고 있을지 알 수 없나요?
답변1
iptables u32 모듈 오프셋은 이더넷 래퍼를 제외한 패킷을 참조합니다(소스 및 대상 MAC 제외, 각각 6바이트, 에테르 유형 2바이트 제외). 따라서 Wireshark 오프셋 46은 14로 조정해야 하며 32여야 합니다. .
이제 온전한 점검을 위해 u32 영역에서 알고 있는 서비스 바이트 유형을 찾으십시오.iptables-extensions 매뉴얼 페이지은 오프셋 9에 있고 UDP의 경우 0x11(17)이라는 것도 알고 있습니다. Wireshark 스크린샷의 바이트 0x17(23)에 있습니다. 거기에서 계산하면 사용해야 하는 오프셋으로 32도 얻습니다.
편집 1: 프로토콜이 UDP이므로 iptables 명령의 해당 부분도 조정해야 합니다. 그래서:
sudo iptables -A PREROUTING -i eth0 -p udp --dport 443 -m u32 --u32 "32=0x2112A442" -j REDIRECT --to-port 3478
편집 2: Wireshark 스크린샷 예시에서 대상 포트는 443이 아닌 5004입니다. 따라서 iptables 명령은 특정 패킷 예시에서는 여전히 작동하지 않습니다. 아마도 이것은:
sudo iptables -A PREROUTING -i eth0 -p udp --dport 5004 -m u32 --u32 "32=0x2112A442" -j REDIRECT --to-port 3478