iptables는 첫 번째 응답 패킷을 보낸 후 다음 ICMP 요청 패킷을 ESTABLISHED 상태로 일치시킵니다.

iptables는 첫 번째 응답 패킷을 보낸 후 다음 ICMP 요청 패킷을 ESTABLISHED 상태로 일치시킵니다.

테스트 환경: CentOS 6.3 - 커널 2.6.32-279.el6.i686, iptables v1.4.7 Win7 ⇔ CentOS Windows는 ICMP 에코 요청을 CentOS에 10pkt/초의 속도로 지속적으로 재생합니다.

iptables에서는 들어오는 icmp 요청 패킷 속도를 제한하기 위해 다음 규칙을 추가했습니다. 그러나 그것은 작동하지 않았습니다. 첫 번째 규칙이 첫 번째 들어오는 icmp 요청을 수락하고 내 호스트가 응답한 후 두 번째 규칙은 모든 후속 icmp 요청을 수락하고 두 번째 규칙은 들어오는 icmp 요청을 ESTABLISHED 상태 패킷으로 수락합니다. 나는 이것이 말이 되지 않는다고 생각한다.

여기에 이미지 설명을 입력하세요.

"Iptables Tutorial 1.2.2"를 확인하고 다음 문장을 발견했습니다.

Iptables 튜토리얼► 상태 머신

이미 설명했듯이 응답 패킷은 설정된 것으로 간주됩니다. 그러나 우리가 확신할 수 있는 것은 ICMP 응답 후에는 동일한 연결에서 더 이상 합법적인 트래픽이 발생하지 않는다는 것입니다. 따라서 응답이 Netfilter 구조를 완전히 통과하면 연결 추적 항목이 삭제됩니다. 위의 각 경우에 요청은 NEW로 간주되고 응답은 ESTABLISHED로 간주됩니다.

/proc/net/nf_conntrack그러나 첫 번째 응답이 전송된 후에도 conntrack 항목이 항상 존재한다는 것을 발견했습니다.

ipv4     2 icmp     1 24 src=192.168.56.1 dst=192.168.56.101 type=8 code=0 id=1 src=192.168.56.101 dst=192.168.56.1 type=0 code=0 id=1 mark=0 secmark=0 use=2

ICMP 연결이 이미 설정되어 있더라도 들어오는 모든 ICMP 요청은 ESTABLISHED 대신 새로운 상태로 처리되어야 한다고 생각합니다.

상태 매칭을 올바르게 이해하지 못한 경우 정정해 주시기 바랍니다.

답변1

제안한 대로 연결 추적은 분명히 ICMP "세션"을 기록하므로 일단 탁구 왕복이 수행되면 패킷이 ESTABLISHED 상태에 있는 것으로 간주됩니다.

ICMP 요청을 제한하려는 목표를 달성하려면 "다른 모든 ICMP 삭제" 규칙(스크린샷의 세 번째 규칙)을 속도 제한 에코 요청을 허용하는 규칙 아래로 이동합니다. 이러한 방식으로 ICMP 패킷은 ESTABLISHED 규칙을 고려하지 않습니다.

하지만 ICMP 패킷은 다양한 문제를 전달하는 데에도 사용되므로 특정 유형의 모든 ICMP 패킷을 허용하는 규칙을 추가하는 것이 좋습니다.다른TCP 연결 등의 문제가 발생하지 않도록 하기 위해 "echo-request" 대신 사용합니다(예: "연결 거부됨"은 ICMP를 사용하여 전달됩니다). 내가 제안하는 규칙은 다음과 같습니다.

iptables -A INPUT -p icmp ! --icmp-type echo-request -j ACCEPT

그리고 ECHO 요청을 허용하는 속도 제한 규칙 바로 아래, "다른 모든 ICMP 삭제" 규칙 바로 위에 배치합니다.

관련 정보