在 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 我的意图是如果未列出源,则它应该无法到达任何服务或端口
如果使用 firewall-cmd 打开一个端口供公众使用,我想将此端口限制为特定 IP,我在此SITE上找到了答案。
我使用以下方法打开它:
$ firewall-cmd --permanent --zone=public --add-port=10050/tcp
$ firewall-cmd --reload
Run Code Online (Sandbox Code Playgroud)
现在使用我发现的信息中的信息,我想将此端口的访问权限限制为特定的 IP 地址。我是否需要先从公共访问中删除此端口?
或者我可以按如下方式添加新规则,这样就能解决我的问题吗?
$ firewall-cmd --new-zone=special
$ firewall-cmd --permanent --zone=special --add-rich-rule='
rule family="ipv4"
source address=”123.1.1.1"
port protocol="tcp" port="10050" accept'
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
$ firewall-cmd --zone=public --remove-port=10050/tcp
$ firewall-cmd --reload
Run Code Online (Sandbox Code Playgroud)
但是当我运行以下命令时:
$ firewall-cmd --list-ports
Run Code Online (Sandbox Code Playgroud)
10050/tcp 仍然显示。
请理解我对服务器端配置不太熟悉。
解决方案:不要忘记--runtime-to-permanent
$ firewall-cmd --zone=public --remove-port=10050/tcp
$ firewall-cmd --runtime-to-permanent
$ firewall-cmd --reload
Run Code Online (Sandbox Code Playgroud)