用firewalld阻止除少数几个ip外的所有ip


17

在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'

上面的问题是,这不是一个真实的列表,它将阻止所有内容,因为如果它的一个地址与另一个地址不同则被阻止,从而产生意外的“全部丢弃”效果,我将如何“取消阻止”特定的非连续集?来源接受地址列表吗?到目前为止,我在文档或Google搜索结果中都看不到任何内容。


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

# 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: 

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

Answers:


24

丰富的规则完全没有必要。

如果要将区域限制为一组特定的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

这样的结果将是一个“内部”区域,该区域允许访问ssh,但只能从两个给定的IP地址访问。要使其持久,请重新运行每个带有--permanent附加命令的命令。


请澄清“可能存在的接口定义”的含义,iv尝试了您的建议,请参见我的编辑。
mike 2015年

@mike就像我说的那样,您需要eth1从区域中删除。firewall-cmd --zone=encrypt --remove-interface=eth1
迈克尔·汉普顿

好吧,加密区域是新区域,在eth1公开之前,我已将其从公开区域移至加密,因此加密具有源.120,我认为只有120应该能够到达端口,我错过了什么?
mike 2015年

1
如果将接口放在区域中,那么通过该接口到达的任何对象都可以访问添加到区域中的任何端口和服务,而无需考虑IP地址。因此,它可能属于原来的公共场所。
迈克尔·汉普顿

嗯,因此即使接口公开放置,接受源仍放置在其他受信任源中,仍将允许接受源?
mike

1

按照firewalld.richlanguage

来源[不是] address =“地址[/ mask]”

   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 (/x.x.x.x) 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.

为该地址指定一个网络掩码,以允许连续的块。

除此之外,您可以尝试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必须单独创建。


这会拒绝,我需要的是逆数,如果在集合中,则接受
Mike

0

您可以通过Rich Rule轻松管理。

第一步

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'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.