
다음 규칙을 사용하여 "연결 거부"를 유발하기 위해 포트 1986으로 향하는 모든 트래픽을 포트 9로 리디렉션하는 iptables 규칙을 만들려고 합니다.
iptables -t nat -I PREROUTING -p tcp -m tcp --dport 1986 -j DNAT --to-destination :9
이는 새로운 연결에 효과적이지만 문제는 설정된 연결이 이 규칙을 건너뛰고 거부되지 않는 것처럼 보인다는 것입니다.
NOTRACK
연결 상태 추적을 피하기 위해 원시 테이블에 규칙을
추가하려고 시도했지만 아무런 효과가 없습니다.
iptables -t raw -I PREROUTING -p tcp --dport 1986 -m state --state ESTABLISHED,RELATED,NEW,INVALID -j NOTRACK
nat 규칙에 상태를 추가해도 작동하지 않습니다.
iptables -t nat -I PREROUTING -p tcp --dport 1986 -m state --state ESTABLISHED,RELATED,NEW,INVALID -j DNAT --to-destination :9
설정된 연결에서 전송된 패킷에 대해 '연결 거부' 오류를 유발하기 위해 iptables를 어떻게 사용할 수 있습니까?
답변1
규칙 DNAT
은 TCP 3방향 핸드셰이크를 사용하여 연결이 설정되면 conntrack 테이블에 대한 항목을 생성합니다.
이 notrack
규칙은 새로운 conntrack 항목 생성을 비활성화하는 것 같습니다. 그러나 기존 conntrack 항목을 사용하는 것은 금지되지 않습니다.
연결이 이미 설정되었으므로 conntrack 테이블에 항목이 이미 있고 커널은 이를 사용하여 트래픽을 전달합니다.
conntrack
conntrack 테이블에서 흐름을 삭제하려면 도구를 사용해야 합니다 . 예를 들어:
conntrack -D -s 192.168.1.10 -d 192.168.100.20 -p tcp --dport 1986
이 명령을 실행한 후 iptables의 새로운 DNAT 규칙을 사용하여 연결이 conntrack에 다시 추가됩니다. 그러면 새 대상 서버가 연결을 거부합니다. 새 대상 서버가 정확히 무엇을 다시 보낼지 잘 모르겠습니다. 어쩌면 TCP RST일 수도 있습니다.