iptables를 사용하여 포트에서 체인으로 트래픽을 리디렉션하시겠습니까?

iptables를 사용하여 포트에서 체인으로 트래픽을 리디렉션하시겠습니까?

Raspberry Pi에 privoxy 및 Socks 프록시 소프트웨어를 설치했습니다.

모든 트래픽을 REDSOCKS_FILTER 체인으로 리디렉션하고 싶습니다. 포트 80의 모든 TCP 프로토콜 트래픽은 privoxy를 통과한 다음 REDSOCKS_FILTER 체인에 도달합니다. REDSOCKS_FILTER 체인에서 일부 로컬 IP 주소를 삭제하고 마지막으로 처리된 트래픽이 양말 프록시 소프트웨어로 이동합니다.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8118
iptables -t nat -A OUTPUT -p tcp --dport 8118  -j REDSOCKS_FILTER
iptables -t nat -A PREROUTING -p tcp -j REDSOCKS_FILTER

이 ase를 작성해 보았으나 privoxy의 포트 80을 통과하는 트래픽이 REDSOCKS_FILTER 체인에 도달할 수 없습니다. 하지만 내가 입력하면

iptables -t nat -A OUTPUT -p tcp --dport 8118  -j REDSOCKS_FILTER

테스트해본 결과 작동하지 않는 것 같지만 결과는 여전히 동일합니다. 내가 무슨 실수를 했는지 혼란스럽습니다.

답변1

나는 REDSOCKS_FILTER그것이 filter테이블 이 iptables아니라 nat테이블에 있다고 가정하고 있습니까? TCP/IP 드라이버 스택의 서로 다른 위치에서 서로 다른 테이블이 처리되기 때문에 한 테이블에서 다른 테이블로 이동할 수 없습니다.

NAT 테이블의 PREROUTING 및 OUTPUT 체인에서 리디렉션 중이므로 filter해당 INPUT 및 OUTPUT 테이블에서 패킷을 처리할 때 이러한 변경 사항이 이미 적용되었습니다. 따라서 다음과 같은 것이 필요합니다.

iptables -t filter -A INPUT -p tcp --dport 8118 -j REDSOCKS_FILTER
iptables -t filter -A OUTPUT -p tcp --dport 8118 -j REDSOCKS_FILTER

filter이는 기본 테이블이므로 이 옵션은 생략할 수 있습니다 -t filter.

다양한 Netfilter 테이블 간의 패킷 흐름 다이어그램이 도움이 될 수 있습니다.

https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg

브리징이 아니기 때문에 수행하는 모든 작업은 iptables이 이미지의 녹색 "네트워크 레이어" 내에서 발생합니다.

관련 정보