
규칙을 만들었습니다 iptables
.
iptables -I INPUT -p tcp --tcp-flags SYN,RST,ACK,FIN SYN --dport 10000 -j REJECT --reject-with tcp-reset
그러나 실제로 이것이 수행하는 작업은 플래그가 있는 모든 패킷을 거부하는 것 RST
입니다 ACK
.
플래그가 설정되어 있어야만 거부가 가능한가요 RST
?
일반적인 환경에서는 이것이 의미가 없다는 것을 알고 있지만 실험실이 있고 설명된 대로 정확하게 수행해야 합니다.
답변1
저는 중국에 있으므로 그 전에 dig +tcp twiter.com @1.1.1.1
다음 두 줄을 작성해야 합니다.
sudo iptables -A INPUT -p tcp -s 1.1.1.1/32 --tcp-flags ALL RST,ACK -j DROP
sudo iptables -A INPUT -p tcp -s 1.1.1.1/32 --tcp-flags ALL RST -j DROP
그러면 나는 올바른 대답을 얻을 것입니다:
;; ANSWER SECTION:
twitter.com. 204 IN A 104.244.42.65
첫 번째 명령만 수행하면 iptables
발굴이 실패합니다.
";; communications error to 1.1.1.1#53: connection reset"
중국의 만리방화벽이상해...
답변2
인바운드 RST 패킷을 삭제하려면,
iptables -I INPUT -p tcp --tcp-flags ALL RST,ACK --dport 10000 -j DROP
아웃바운드 RST 패킷을 삭제하려면
iptables -I OUTPUT -p tcp --tcp-flags ALL RST,ACK --dport 10000 -j DROP
회계연도:
RST/ACK는 RST에 대한 승인이 아니며, SYN/ACK가 정확히 SYN에 대한 승인이 아닌 것과 같습니다. 실제로 TCP 설정은 4방향 프로세스입니다. 시작 호스트는 수신 호스트에 SYN을 보내고 수신 호스트는 해당 SYN에 대한 ACK를 보냅니다. 수신 호스트는 시작 호스트에 SYN을 보내고, 시작 호스트는 ACK를 다시 보냅니다. 이는 상태 저장 통신을 설정합니다.
SYN -->
<-- ACK
<-- SYN
ACK -->
이를 더욱 효율적으로 만들기 위해 수신 호스트는 SYN에 대해 ACK를 보내고 동일한 패킷으로 자신의 SYN을 보내 우리가 익숙한 3방향 프로세스를 생성할 수 있습니다.
SYN -->
<-- SYN/ACK
ACK -->
RST/ACK의 경우 장치는 이전 패킷에서 전송된 모든 데이터를 ACK와 함께 순서대로 확인한 다음 RST로 연결이 닫혔음을 보낸 사람에게 알립니다. 장치는 SYN/ACK처럼 단순히 두 개의 패킷을 하나로 결합합니다. RST/ACK는 일반적으로 TCP 세션을 닫을 때 일반적인 응답이 아니지만 반드시 문제를 나타내는 것은 아닙니다.