내가 작성하지 않은 iptables 설정을 디버깅하고 있습니다. 이 설정은 라우터 자체에서 실행되는 일부 Docker 컨테이너(Portainer 및 Nginx Proxy Manager) 주변에 방화벽을 제공하기로 되어 있지만 문제가 발생하여 두 Docker 컨테이너 모두 WAN에 웹사이트를 제공할 수 없습니다. iptables -L -v -n
출력은 다음과 같습니다:
root@FriendlyWrt:/proc/sys/net/bridge# iptables -L -v -n
# Warning: iptables-legacy tables present, use iptables-legacy to see them
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1400K 251M DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0
1397K 251M DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0
5815 404K ACCEPT all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
2580 116K DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0
15447 7639K ACCEPT all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain DOCKER (1 references)
pkts bytes target prot opt in out source destination
83 4836 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.2 tcp dpt:9443
1 60 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.2 tcp dpt:8000
29 1740 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.3 tcp dpt:443
1 60 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.3 tcp dpt:81
2 120 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.3 tcp dpt:80
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
pkts bytes target prot opt in out source destination
15447 7639K DOCKER-ISOLATION-STAGE-2 all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0
1397K 251M RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * docker0 0.0.0.0/0 0.0.0.0/0
15447 7639K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-MAN (1 references)
pkts bytes target prot opt in out source destination
8395 519K RETURN all -- br-lan docker0 0.0.0.0/0 0.0.0.0/0
2805 167K DROP all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate INVALID,NEW
236 59251 RETURN all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
1388K 251M RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-USER (1 references)
pkts bytes target prot opt in out source destination
1400K 251M DOCKER-MAN all -- * * 0.0.0.0/0 0.0.0.0/0
236 59251 REJECT all -- eth0 docker0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
1397K 251M RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
"전달" 체인의 시작 부분에서는 모든 트래픽이 "docker-user" 체인으로 전송되고 다음 규칙에서는 나머지 모든 트래픽이 "docker-isolation-stage-1" 체인으로 전송되는 것처럼 보입니다. . 모든 것을 "docker-user"로 보낸 후에는 정렬할 트래픽이 더 이상 남지 않고 체인의 나머지 부분은 완전히 사용되지 않을 것이라고 가정합니다. 하지만 각 규칙에 따라 동일한 양의 트래픽이 포착된 다음 3호선으로 더 많은 트래픽이 발생하는 것처럼 보입니다. 여기서 무슨 일이 일어나고 있는 걸까요? "forward"의 처음 두 줄에서 실제로 테스트되고 있는 것은 무엇입니까?
답변1
모바일에서는 댓글이 너무 깁니다.
사용자 정의/새 체인으로 패킷을 보내는 것은 그곳에서 패킷이 반환되지 않는다는 것을 의미한다고 가정하는 것 같습니다. 그것은 다소 정확하지 않습니다.
iptables의 규칙은 순차적으로 확인됩니다.
패킷이 해당 패킷의 운명에 대한 최종 결정을 내리는 규칙(보통 ACCEPT, DROP, REJECT 및 내가 간과한 다른 항목)과 일치하면 처리가 중지됩니다.
규칙이 새/사용자 지정 체인으로 이동하는 경우 다음을 수행합니다.
- 그 체인이 입력되었습니다
- 해당 체인의 모든 규칙은 해당 패킷의 운명에 대한 최종 결정이 내려질 때까지 순차적으로 확인됩니다.
- 패킷의 운명에 대한 최종 결정이 내려지지 않은 경우:
이전 체인으로 돌아가기
이것이 DOCKER-USER 체인에서 일어나는 일입니다. 소수의 패킷만이 DOCKER-MAN 체인의 규칙이나 최종 결정을 내리는 후속 REJECT 규칙과 일치합니다. 입력된 거의 모든 패킷은 최종 결정을 충족하지 못하고 FORWARD 체인으로 돌아가 다음 규칙에 따라 처리되며 DOCKER-ISOLATION-STAGE-1 체인에 입력됩니다.