在一个linux联网的机器上,我想限制在“公共”区域(firewalld概念)上允许达到的地址集合。 所以最终的结果是没有其他机器可以访问任何端口或协议,除了那些明确允许的,混合的种类
--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'
上面的问题是,这不是一个真正的名单,它会阻止一切,因为如果它的一个地址被阻止不是相同的另一个,产生一个意外的“全部放弃”的效果,我将如何“解锁”一个特定的非连续设置? 源是否接受地址列表? 到目前为止,我还没有看到任何文档或谷歌的结果。
编辑:我刚刚创build这个:
# 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:
但是我仍然可以从.123到达端口.123我的意图是,如果源不在列表中,它不应该能够到达任何服务或端口
丰富的规则是没有必要的。
如果你想限制一个区域到一组特定的IP地址,只需将这些IP定义为该区域本身的源(并且删除任何可能存在的接口定义,因为它们会覆盖源IP)。
你可能不希望这样做到“公共”区域,因为这在语义上意味着面向公众的服务向世界开放。
相反,尝试使用不同的区域(如“内部”)作为主要受信任的IP地址来访问潜在的敏感服务(如sshd)。 (您也可以创build自己的区域。)
警告:不要将特殊的“可信”区域与正常的“内部”区域相混淆。 所有添加到“受信任”区域的源都将被允许在所有端口上通过; 将服务添加到“受信任”区域是允许的,但这样做没有任何意义。
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
这个结果将是一个“内部”区域,允许访问ssh,但只能从两个给定的IP地址访问。 要使其持久化,请使用--permanent重新运行每个命令。
根据firewalld.richlanguage :
源来源[不]地址=“地址[/掩码]”
With the source address the origin of a connection attempt can be limited to the source address. An address is either a single IP address, or a network IP address. The address has to match the rule family (IPv4/IPv6). Subnet mask is expressed in either dot-decimal (/xxxx) or prefix (/x) notations for IPv4, and in prefix notation (/x) for IPv6 network addresses. It is possible to invert the sense of an address by adding not before address. All but the specified address will match then.
指定地址的networking掩码以允许连续的块。
除此之外,你可以尝试创build一个ipset的非连续的允许的IP列表。
例如,在/etc/firewalld/direct.xml :
<?xml version="1.0" encoding="utf-8"?> <direct> <rule ipv="ipv4" table="filter" chain="INPUT" priority="0">-m set --match-set whitelist src -j ACCEPT</rule> </direct>
实际的ipset必须单独创build。
您可以通过Rich Rule轻松pipe理。
第一步
firewall-cmd --permanent --set-default-zone=home firewall-cmd --permanent --zone=drop --change-interface=eth0
第二步 – 添加丰富的规则
firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" source address="192.168.78.76/32" accept'
一旦你添加丰富的规则,并阻止来自其他来源的每个端口,所有端口都可以通过192.168.2.2访问。
如果您将通过下面的命令添加任何端口或服务,那么它将被所有来源访问。
firewall-cmd --zone=public --add-service=ssh firewall-cmd --zone=public --add-port=8080
如果你想打开特定的端口为特定的IP比下面的命令
firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'