使用 firewalld 阻止除少数 ip 之外的所有 ip

mik*_*ike 25 fedora command-line-interface firewalld

在 linux 联网机器上,我想限制允许访问它的“公共”区域(防火墙概念)上的地址集。所以最终的结果是没有其他机器可以访问任何端口或协议,除了那些明确允许的,有点混合

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.120" drop'

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.105" drop'
Run Code Online (Sandbox Code Playgroud)

上面的问题是,这不是一个真正的列表,它会阻止所有内容,因为如果它的一个地址与另一个地址不同而被阻止,则会产生意外的“全部删除”效果,我将如何“取消阻止”特定的非连续集?source 是否接受地址列表?到目前为止,我在查看文档或谷歌结果时没有看到任何内容。


编辑:我刚刚创建了这个:

# firewall-cmd  --zone=encrypt --list-all
encrypt (active)
  interfaces: eth1
  sources: 192.168.56.120
  services: ssh
  ports: 6000/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
Run Code Online (Sandbox Code Playgroud)

但是我仍然可以到达端口 6000,因为 .123 我的意图是如果未列出源,则它应该无法到达任何服务或端口

Mic*_*ton 32

根本不需要丰富的规则。

如果要将区域限制为一组特定的 IP,只需将这些 IP 定义为区域本身的源(并删除可能存在的任何接口定义,因为它们会覆盖源 IP)。

不过,您可能不想对“公共”区域执行此操作,因为这在语义上意味着面向公众的服务向世界开放。

相反,请尝试使用不同的区域(例如“内部”)用于最受信任的 IP 地址来访问潜在的敏感服务,例如 sshd。(您也可以创建自己的区域。)

警告:不要将特殊的“可信”区域误认为是正常的“内部”区域。添加到“可信”区域的任何源都将被允许通过所有端口;允许向“受信任”区域添加服务,但这样做没有任何意义。

firewall-cmd --zone=internal --add-service=ssh
firewall-cmd --zone=internal --add-source=192.168.56.105/32
firewall-cmd --zone=internal --add-source=192.168.56.120/32
firewall-cmd --zone=public --remove-service=ssh
Run Code Online (Sandbox Code Playgroud)

这样做的结果将是一个“内部”区域,它允许访问 ssh,但只能从两个给定的 IP 地址访问。要使其持久化,请使用--permanent附加或更好的方式重新运行每个命令firewall-cmd --runtime-to-permanent