들어오는 모든 연결을 비활성화하도록 iptables를 설정했습니다.
:INPUT DROP [0:65535]
iptables를 시작한 후 다음 명령을 실행하여 ping을 활성화합니다.
/usr/sbin/iptables -A INPUT -m icmp --icmp-state 8 -j ACCEPT
/usr/sbin/iptables -A INPUT -m icmp --icmp-state 0 -j ACCEPT
iptables 규칙은 /etc/init.d/iptables status
Windows 및 Linux PC 모두에서 장치를 핑할 수 있습니다. 이제 다음 명령을 실행하여 삭제합니다.
/usr/sbin/iptables -D INPUT -m icmp --icmp-state 8 -j ACCEPT
/usr/sbin/iptables -D INPUT -m icmp --icmp-state 0 -j ACCEPT
iptables 규칙이 제거된 것을 확인했습니다 /etc/init.d/iptables status
. 예상대로 Linux PC에서 장치를 ping할 수 없습니다. 그러나 Windows PC에서 1~2분 동안 장치를 ping할 수 있다가 ping을 할 수 없습니다.
Windows XP PC에서는 장치를 무기한으로 핑하지 않습니다(즉, -t를 사용하지 않음). 그런데 이 결과가 나타나는 이유는 무엇입니까?
답변1
귀하가 제공한 모든 정보에 따르면 규칙을 제거하면 Linux PC의 IP 주소가 더 이상 존재하지 않으므로 iptables conntrack table
트래픽이 감소하는 것으로 추측됩니다. Windows PC의 IP 주소가 여전히 conntrack 테이블에 나타날 수 있으므로 해당 트래픽이 허용됩니다.
iptables
각 규칙을 위에서 아래로 작업하세요. 따라서 규칙을 정의하는 순서가 iptables
매우 중요합니다. 귀하의 경우 체인은 다음 INPUT
과 같습니다.
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 127.0.0.0/255.0.0.0 -j ACCEPT
....
-A INPUT -m icmp --icmp-state 8 -j ACCEPT
-A INPUT -m icmp --icmp-state 0 -j ACCEPT
따라서 규칙을 제거하더라도 ICMP
클라이언트 연결이 conntrack 테이블에 있으면 여전히 허용되는 것을 볼 수 있습니다 iptables
.
당신은 읽을 수 있습니다iptables conntrack table
여기:
연결에서 양방향 트래픽이 확인되면 conntrack 항목은 [UNREPLIED] 플래그를 지우고 재설정합니다. 연결에 양방향 트래픽이 없음을 알려주는 항목은 항목 끝 부분에 있는 [ASSURED] 플래그로 대체됩니다. [ASSURED] 플래그는 이 연결이 보장되며 추적 가능한 최대 연결 수에 도달하더라도 삭제되지 않음을 알려줍니다. 따라서 보장되지 않는 연결([ASSURED]로 표시되지 않은 연결)과 달리 [ASSURED]로 표시된 연결은 삭제되지 않습니다. 연결 추적 테이블이 보유할 수 있는 연결 수는 최근 커널의 ip-sysctl 기능을 통해 설정할 수 있는 변수에 따라 달라집니다. 이 항목이 보유하는 기본값은 보유한 메모리 양에 따라 크게 달라집니다. 128MB RAM에서는 8192개의 항목을 얻을 수 있고, 256MB RAM에서는 16376개의 항목을 얻을 수 있습니다. /proc/sys/net/ipv4/ip_conntrack_max 설정을 통해 설정을 읽고 설정할 수 있습니다.
답변2
iptables는 이전/현재 연결에 대한 일부 상태를 유지하므로 iptables에 대한 변경 사항이 지연되어 적용되는 것처럼 보일 수 있습니다. 상태를 보고 조작하려면 먼저 conntrack을 설치해야 합니다:
sudo apt-get conntrack
이렇게 하면 발급이 가능합니다
sudo conntrack -L
해당 상태의 이전/현재 연결 목록을 봅니다.
다음을 실행하여 이 상태를 완전히 지울 수 있습니다.
sudo conntrack -F
그러나 현재 적용 중인 규칙이 여전히 허용하는 경우에도 현재 열려 있는 모든 연결이 종료됩니다. 상태 테이블에서 제거된 내용을 더욱 세부적으로 확인할 수 있습니다. 달리기
sudo conntrack
이 명령에 대한 몇 가지 기본적인 도움말을 얻으세요. 일반적으로 지정되지 않은 경우 명령이 작동하는 "conntrack" 테이블을 다루고 있습니다. 예를 들어 NAT를 켜거나 끄는 사용 사례의 경우 다음을 실행합니다.
sudo conntrack -D --any-nat
적절한 iptables 명령을 실행하여 nat를 끄거나 켜십시오.
답변3
규칙 세트 시작 부분에 규칙을 추가하여 ICMP 프로토콜을 명시적으로 차단할 수 있습니다.
iptables -I INPUT -p icmp -j DROP
한 가지 주목할 점은 RELATED,ESTABLISHED 규칙이 규칙 세트의 마지막 규칙이어야 한다는 것입니다. 그렇지 않으면 ESTABLISHED 상태가 다른 규칙과 일치하도록 의도된 패킷과 일치하게 되어 궁극적으로 카운터를 무효화하고 현재 겪고 있는 상황과 같은 디버깅을 악몽으로 만듭니다.
답변4
이는 정상적인 동작이며 RELATED,ESTABLISHED가 수행해야 하는 작업입니다.
"관련되고 확립된 규칙은 규칙의 마지막 규칙이어야 합니다"는 완전히 넌센스입니다. 각 답변 패키지에 대해 전체 체인을 뛰어넘고 싶지 않으며 어쨌든 이를 명시적으로 거부/제거하지 않고 동작을 변경하지만 처리를 수행합니다. 각 패키지는 각 규칙을 평가하고 마지막 규칙이 이를 수락하므로 비용이 더 많이 듭니다.
아무런 이유 없이 순방향 체인의 27개 규칙을 통해 8억 3,800만 개의 패키지를 넣는 즐거움을 누리십시오. 올바른 규칙 세트는 가장 높은 적중률을 가진 규칙으로 정렬되고 마지막으로 최종 거부/삭제 규칙이 지정됩니다.
Chain FORWARD (정책 DROP 0 패킷, 0 바이트) num pkts 바이트 target prot opt in out 소스 대상 1 838M 852G ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 2 35M 1912M INBOUND 모두 - - Wanlan0.0.0.0/0 0.0.0.0/0 0