Iptables를 사용하여 특정 TCP 포트의 네트워크 인터페이스(브리지 포트)에서 트래픽 필터링 문제

Iptables를 사용하여 특정 TCP 포트의 네트워크 인터페이스(브리지 포트)에서 트래픽 필터링 문제

트래픽을 필터링하기 위해 iptables를 방화벽으로 사용하고 있습니다. 특정 TCP 포트의 네트워크 인터페이스에서 트래픽을 차단하고 싶습니다(포트 22에서 테스트 중입니다). 네트워크 인터페이스는 브리지 포트이므로 physdev 모듈을 사용합니다(-i 옵션을 시도했지만 작동하지 않습니다). 포트를 지정하지 않고 규칙을 작성하면 모든 트래픽이 성공적으로 필터링됩니다.

iptables -t mangle -A PREROUTING -m physdev --physdev-in IF_NAME -j DROP

하지만 포트를 지정하면 작동하지 않습니다.

iptables -t mangle -A PREROUTING -m physdev --physdev-in IF_NAME -p tcp -m tcp --dport 22 -j DROP

규칙을 둘로 분할하기 위해 mark 및 connmark 모듈을 사용해 보았으므로 브리지 인터페이스와 TCP 포트가 별도의 규칙에 있습니다. 불운.

몇 가지 참고 사항: 저는 Debian 10에서 iptables v1.8.2를 사용하고 있습니다. 가상 머신의 트래픽을 필터링하려고 합니다. 호스트 컴퓨터에서 규칙을 작성 중입니다. 가상 머신의 네트워크 인터페이스를 설정합니다. 네트워크 인터페이스 대신 가상 머신의 IP를 사용하면 제대로 작동합니다.

브리지가 데이터링크 계층에 있고 TCP 포트가 전송 계층에 있어 작동하지 않기 때문일까요? 나는 개인적으로 이것이 규칙이 작동하지 않는 것에 대한 좋은 변명이라고 생각하지 않습니다. 결국 iptables는 다른 네트워크 계층에서 작동합니다.

내 질문:

  1. (첫 번째 우선순위) iptables를 사용하여 이 규칙을 작동시키는 것이 가능합니까? 그렇다면 무엇이며, 그렇지 않다면 이유는 무엇입니까?
  2. nftables를 사용하여 이것이 가능합니까?
  3. 언급하고 싶은 다른 솔루션이 있나요?

관련 정보