나는 로컬에서 생성된 패킷이 PREROUTING 체인을 통과하도록 하고 싶습니다.
sudo iptables -t mangle -A PREROUTING -p tcp -d somewebsite.com -j TPROXY --on-port 32794
somewesite.com으로 향하는 모든 패킷(로컬 프로세스에 의해 생성됨)을 로컬 포트 32794로 리디렉션합니다.
많은 사람들이 다음과 같이 권장합니다.
sudo iptables -t nat -A OUTPUT -p tcp -d somewebsite.com -j REDIRECT --to-ports 32794
하지만REDIRECT는 데이터 패킷 헤더를 수정합니다.나는 이것을 피하려고 노력하고 있습니다. 패킷 헤더를 수정하지 않는 유일한 대상 유형인 TPROXY를 사용해야 합니다.
그렇다면 로컬에서 생성된 패킷이 PREROUTING 체인을 통과하도록 하려면 어떻게 해야 할까요? 어쩌면 루프백을 사용할까요? 그러나 루프백이 패킷 헤더를 변경하는지 확실하지 않습니다 ...
답변1
iptables는 체인에서 찾을 수 있는 규칙 세트(또는 규칙 세트)입니다. 체인은 테이블 안에 있어요.
귀하의 경우 REDIRECT
대상을 사용했지만 이는 실제로 패킷을 수정하여 대상 주소를 변경하므로 허용되지 않을 수 있으며 nat
대부분의 경우 테이블에 바인딩됩니다.
대상은 TPROXY
유사한 기능을 제공하며 mangle
테이블을 사용합니다. iptables 규칙 세트에 다음과 같은 규칙을 추가하기만 하면 됩니다.
iptables -t mangle -A PREROUTING -p tcp -d your.ip.address.here --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 32794 --on-ip=127.0.0.1
참고: 이 플래그도 사용했지만 이로 인해 TCP 헤더가 변경되어서는 안 됩니다.