FreeBSD: PF/pf.conf 인터페이스 인터페이스 전달 규칙

FreeBSD: PF/pf.conf 인터페이스 인터페이스 전달 규칙

저는 FreeBSD 12.3에서 수신 인터페이스와 발신 인터페이스를 기반으로 필터링하는 간단한 전달 규칙(포트 전달이 아님!)을 설정하고 싶습니다. IP 네트워킹은 모든 유형의 IP에 대한 라우터와 같기 때문에 규칙의 일부가 되어서는 안 됩니다. 라우팅된 네트워크는 라우팅 데몬(OSPF가 있는 BIRD)에 의해 동적으로 설정됩니다.

PF를 사용하는 FreeBSD에서는 ifspec필터 규칙당 하나만 설정할 수 있습니다([ "on" ifspec ]남자 5 pf.conf:

     pf-rule        = action [ ( "in" | "out" ) ]
              [ "log" [ "(" logopts ")"] ] [ "quick" ]
              [ "on" ifspec ] [ route ] [ af ] [ protospec ]
              hosts [ filteropt-list ]

입력과 출력 인터페이스의 조합이 일치하길 원합니다. 어떻게 해야 하나요?


Linux에서 nft/nftables를 사용하면 다음과 같이 할 수 있습니다.

define iface_site2site = { "tun0", "tun1", "tun9" }
[...]
  chain forward {
    type filter hook forward priority 0;
    policy drop;

    iifname $iface_site2site oifname $iface_site2site accept \
      comment "Freely forward packets between site-to-site links, firewalled at final destination."
  }
[...]

Linux에서는 iptables다음과 같이 합니다.

iptables -A [...] --in-interface tun+ --out-interface tun+ -j ACCEPT

FreeBSD에서 위의 작업을 어떻게 수행합니까?

명확하게 말하면 나는 그렇습니다.아니요포트 전달 또는 NAT 규칙을 찾으십시오.

답변1

FreeBSD에서는 단일 규칙으로 이를 수행하는 것이 불가능해 보입니다. 따라서 match규칙을 사용하여 이러한 인터페이스에서 인바운드 트래픽을 표시한 다음 passfor in및 for 의 두 가지 규칙을 사용한 out다음 그렇게 표시된 경우에만 트래픽이 나가는 것을 허용할 수 있습니다.

FreeBSD 12.3의 man pf.conf(5)에 따르면:

tag <string>
      Packets matching this rule will be tagged with the specified
      string.  The tag acts as an internal marker that can be used to
      identify these packets later on.  This can be used, for example, to
      provide trust between interfaces and to determine if packets have
      been processed by translation rules.  Tags are "sticky", meaning
      that the packet will be tagged even if the rule is not the last
      matching rule. [...]

질문의 사용 사례("인터페이스 간 신뢰 제공")가 잘 언급되어 있습니다.

관련 정보