나는 나만의 방화벽을 구축하고 있습니다. 사용자 공간 TCP/IP 스택을 구축한다고 가정해 보겠습니다.
그러나 커널이 인식하지 못하는 패킷을 수신하면 커널은 RST + ACK를 보냅니다(ACK가 전송되었는지 확실하지 않음(업데이트: 실제로 ACK가 전송된 것으로 나타남)).
포트를 열지 않기 때문에 커널의 기본 동작을 재정의할 수 있는 방법이 필요합니다.
나가는 RST를 차단하기 위해 IP 테이블을 사용할 것을 제안하는 사람들을 찾았고 NOTRACK 사용을 제안하는 답변도 찾았습니다.
NOTRACK의 작동 방식이나 장점과 단점을 모르겠습니다. RST를 차단하면 연결을 종료해야 하기 때문에 또 다른 문제가 발생하지만 RST를 차단하면 내 RST를 보내기가 어려워집니다.
iptables -t raw -A PREROUTING -p tcp --port 8080 -j NOTRACK
내 가설은 이 규칙이 커널이 포트 8080에서 들어오는 패킷을 제어하는 것을 방지한다는 것입니다. 이것이 사실이라면 RST를 차단하는 것보다 훨씬 나을 것입니다.
고쳐 쓰다:
실제로 이것을 Wireshark로 테스트했습니다. NOTRACK 규칙을 추가한 후에도 여전히 RST가 전송되므로 NOTRACK의 용도가 무엇인지 잘 모르겠습니다.
iptables -t raw -A PREROUTING -p tcp --sport 443 -j NOTRACK
답변1
NOTRACK
연결 추적에서 연결이 추적되지 않도록 합니다.