iptable은 Linux 브리지와 어떻게 작동합니까?

iptable은 Linux 브리지와 어떻게 작동합니까?

설정:

VM1 --- 브리지 -- VM2

VM1과 2는 동일한 서브넷에 있습니다. 브리지에는 brctl 브리지에 추가된 2개의 인터페이스가 있습니다. uptables -A FORWARD -s (VM1 ip) -j DENY를 사용하여 VM2 IP를 차단하면 작동하지 않습니다. 패킷이 네트워크 계층으로 절대 들어가지 않는다는 것을 알고 있지만이것"IP 패킷이 브리지 코드에 있으면 모든 iptables 체인이 통과됩니다"라고 말합니다. MAC 필터링조차도 iptables에서는 작동하지 않습니다. ebtables는 잘 작동합니다. 뭐가 문제 야?

답변1

iptablesLinux의 브리지 필터 프레임워크에는 레이어 2 브리징 코드가 (및 arptables또는 ) 에 대한 업스트림 호출을 만들고 ip6tables레이어 2(브리지 프레임)에서 레이어 3( iptables패킷 사용)으로의 전송을 필터링한 다음 레벨 2로 돌아갈 수 있는 메커니즘이 있습니다. 이는 레이어 2에 머물거나 레이어 3에서 계속(프레임 전송 / 로컬 전송) BROUTING하는 논리적 선택만 제공하는 체인을 사용하는 것 이상입니다 .dnatbroute

예를 들어, 이 계층화 위반으로 인해 해당 conntrack시설이 악용될 수 있으며 계층 2에서 사용 가능한 상태 저장 방화벽이 제공됩니다.

또한 사람들이 예상하지 못한 문제가 발생하고 디버깅하기 어려운 문제가 발생하거나 (대부분의 경우) 필요하지 않을 때 성능을 방해할 수도 있습니다. 따라서 커널 3.18부터br_netfilter 코드는 브릿지 코드에서 분리되어 모듈화되었습니다.그리고 더 이상 자동으로 로드되지 않습니다.

이제 iptables를 통해 이 기능을 사용하려면~해야 한다modprobe br_netfiltersysconf 매개변수를 (와 동일 ) net.bridge.bridge-nf-call-iptables로 설정합니다 . 이제 이것은 OP 링크의 모든 놀라운 복잡성을 허용합니다.1echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptablesLinux 기반 브리지의 ebtables/iptables 상호 작용. iptables를 사용할 때 참고하세요physdevebtables) 일치, 및 를 모두 사용할 때 주의하지 않으면 전체 방화벽의 동작을 미묘하게 변경할 수 있습니다 iptables.

참고: nftables(및 iptables-nft)도 영향을 받습니다. 현재 상태는 (계층화된 위반의 추가 복잡성으로 인해) 약간 혼란스러운 것으로 간주되며 직접적으로 일부 재구성이 수행되었습니다.연결하다브리지 경로가 지원되지만 더 이상 사용되지 않습니다 . Linux는 커널 5.3부터 이를 허용하는 br_netfilter커널 모듈을 제공합니다 .nf_conntrack_bridgenftables도달하지 않고 브리지 계층에서 직접 연결 추적을 처리합니다.아이피(도 아니다IP6그리고인트라넷) 가족:브리지에 대한 연결 추적 지원.

관련 정보