与‘传统’伪装 IP 方式相比,firewalld 的“入口”和“出口”如何工作?

与‘传统’伪装 IP 方式相比,firewalld 的“入口”和“出口”如何工作?

我目前正在使用自己构建的家用路由器进行第二次迭代。

在“原始”版本中,我基本上将“标准”命令包装在防火墙的丰富规则中

在 V1 上

 firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o  enp1s0 -j MASQUERADE  
 firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i br0 -o  enp1s0 -j ACCEPT  
 firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp1s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
 firewall-cmd --runtime-to-permanent

我了解这是如何工作的,我已经打开了伪装,我告诉防火墙将端口从“内部”桥接接口转发到外部桥接接口,并接受来自外部已经建立的连接。

“现代”版本允许我将一个或多个接口添加到区域,然后为区域

firewall-cmd --new-policy internal-external --permanent
firewall-cmd --policy internal-external --add-ingress-zone=internal --permanent
firewall-cmd --policy internal-external --add-egress-zone=external --permanent
firewall-cmd --policy internal-external --set-target=ACCEPT --permanent

它更加优雅,更容易管理,但是 - 它实际上能做什么呢?

geek@router-t1:~$ sudo firewall-cmd --info-policy internal-external
[sudo] password for geek:
internal-external (active)
  priority: -1
  target: ACCEPT
  ingress-zones: internal
  egress-zones: external
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

我没有看到任何伪装发生 - 而且我的印象是这对于 NAT 的工作是必要的 - 它是如何在“幕后”工作的 - 以及它使用了什么机制?

答案1

您可能已经找到了答案,所以这是留给后人的:外部区域默认启用伪装。列出区域而不是策略,您就会看到它。

user@router:~$ sudo firewall-cmd --info-zone external

external (active)
  target: default
  icmp-block-inversion: no
  interfaces: wan
  sources:
  services: ssh
  ports:
  protocols: icmp 
  forward: yes
  masquerade: yes
  source-ports:
  icmp-blocks:
  rich rules:

相关内容