방화벽 규칙에 대한 기본 삭제 방법을 갖고 싶습니다. 테스트 목적으로 몇 가지 규칙을 만들었습니다.
table bridge vmbrfilter {
chain forward {
type filter hook forward priority -100; policy drop;
ip saddr 192.168.1.10 ip daddr 192.168.1.1 accept;
ip saddr 192.168.1.1 ip daddr 192.168.1.10 accept;
}
}
192.168.1.1
그러나 및 사이의 트래픽은 192.168.1.10
차단된 상태로 유지됩니다. 구문 문제인지 확인하기 위해 다음을 시도했습니다.
table bridge vmbrfilter {
chain forward {
type filter hook forward priority -100; policy accept;
ip saddr 192.168.1.10 ip daddr 192.168.1.1 drop;
ip saddr 192.168.1.1 ip daddr 192.168.1.10 drop;
}
}
그러나 이는 두 IP 간의 트래픽을 성공적으로 차단했습니다. 그래서 나는 왜 내 accept
규칙이 지켜지지 않는지 모르겠습니다 . 위키피디아는 다음 nftables
과 같이 말합니다.
삭제 결정은 패킷이 기본 체인의 끝에 도달하면 패킷이 삭제된다는 것을 의미합니다.
하지만 accept
내 체인에는 일치해야 하는 규칙이 있습니다.
제가 잘못 이해한 걸까요? 도움을 주셔서 미리 감사드립니다.
고쳐 쓰다:AB의 ARP 규칙 제안이 도움이 되었습니다. 하지만 VLAN 태그가 방화벽 규칙에 문제를 일으키는 것을 발견했습니다. ARP 규칙은 태그가 지정된 트래픽이 물리적 NIC를 통해 들어갈 수 있도록 허용하고 ARP 응답은 브리지를 통해 이동하지만 물리적 NIC에서 나갈 때 차단됩니다.
답변1
이더넷을 통한 IPv4는 다음에 의존합니다.주소 확인 프로토콜나중에 유니캐스트 패킷을 보낼 수 있도록 피어의 이더넷 MAC 주소를 확인합니다.
ARP 요청을 필터링하면 예외가 없기 때문에 이러한 요청은 성공하지 못하고 일반적인 3초 시간 초과 후에 표준 "호스트에 대한 경로 없음"을 얻게 됩니다. 이전 단계가 실패했기 때문에 192.168.1.10에서 192.168.1.1로 또는 192.168.1.1에서 192.168.1.10으로 전송된 IPv4 패킷이 없습니다.
따라서 지금 이 규칙을 추가하고 나중에 정말로 필요한 경우 미세 조정하는 방법을 확인하세요.
nft add rule bridge vmbrfilter forward ether type arp accept
브리지가 VLAN을 인식하거나( vlan_filtering=1
) 그렇지 않더라도(예: 브리지가 프레임에서 작동하지만 실제로는 프레임에 대해 더 많이 알지 못하는 경우) 두 개의 서로 다른 VLAN의 두 프레임이 동일한 MAC 주소를 갖는 경우 , 좋지 않을 수 있음) 다음은 프레임 내에서 VLAN 태그가 지정된 ARP 패킷을 허용하는 규칙입니다.
nft add rule bridge vmbrfilter forward ether type vlan vlan type arp accept
그러나 어떤 경우에도 IP가 적합하지 않으면 동일한 문제가 발생합니다. 이를 위해서는 VLAN 설정에 대한 추가 정보가 필요합니다.
이는 태그가 지정된 프레임과 태그가 지정되지 않은 프레임을 허용하는 규칙 세트로, 반복 규칙이 필요합니다. ARP에는 이를 필터링할 추가 표현식이 없으므로 프로토콜/유형을 자동으로 선택하려면 명시적인 vlan type arp
.
table bridge vmbrfilter # for idempotency
delete table bridge vmbrfilter # for idempotency
table bridge vmbrfilter {
chain forward {
type filter hook forward priority -100; policy drop;
ip saddr 192.168.1.10 ip daddr 192.168.1.1 accept
ip saddr 192.168.1.1 ip daddr 192.168.1.10 accept
ether type arp accept
ether type vlan ip saddr 192.168.1.10 ip daddr 192.168.1.1 accept
ether type vlan ip saddr 192.168.1.1 ip daddr 192.168.1.10 accept
ether type vlan vlan type arp accept
}
}
이전 버전도 있습니다nftables(예: OP의 0.9.0) 필수 필터 표현식은 추가 필터가 없는 경우 출력에서 생략될 수 있습니다(예: 그러나 이 답변에는 없음: ether type vlan arp htype 1
(display truncated) vs vlan id 10 arp htype 1
). 따라서 해당 출력을 다음과 같이 재사용해서는 안 됩니다. 구성 파일에 입력합니다. 여전히 차이점을 알 수 있으며 를 사용하여 추가 필터 표현식이 있음을 알 수 있습니다 nft -a --debug=netlink list ruleset
.
내가 아는 한, 프로토콜의 임의 캡슐화/캡슐화 해제는 현재 지원되지 않습니다.nftables, 따라서 규칙의 중복은 불가피해 보입니다(VLAN 및 비VLAN 사례에서 동일한 필드가 어떻게 검색되는지 알아보려면 바이트코드를 살펴보세요. 서로 다른 오프셋).