具有 IP 别名 (eth0:0) 的 Firewalld

具有 IP 别名 (eth0:0) 的 Firewalld

(找到解决方案,见下文......)

服务器(CentOS 7)有多个公共 IP,这些 IP 是通过常用ifcfg-eth0:0配置文件设置的,并且运行良好。我正在尝试适应防火墙(来自 iptables)。我喜欢能够为每个 IP 别名指定开放端口 - 使用 iptables,只需将目标 IP 设置为与需要端口的任何别名相匹配即可。

想法使用firewalld,我可以对每个接口应用不同的区域来实现相同的效果,但是似乎我无法这样做。

我们首先要说的是:

# firewall-cmd --get-active-zones
public
  interfaces: eth0 eth0:0
trusted
  interfaces: eth1

我创建了一个新区域public_web,用于eth0:0

# firewall-cmd --permanent --new-zone=public_web
success
# firewall-cmd --permanent --zone=public_web --add-service=http
success
# firewall-cmd --permanent --zone=public_web --add-interface=eth0:0
success
# firewall-cmd --reload
success

但...

# firewall-cmd --get-active-zones
public
  interfaces: eth0 eth0:0
trusted
  interfaces: eth1

我尝试了--remove-interface--change-interface以及各种其他命令,但eth0:0没有任何效果。我似乎找不到任何关于使用别名的文档,所以我不确定这是否是实现我想要的正确方法?

谢谢大家。


解决方案:

解决方案是在服务文件中使用标签destination,每个服务只能使用一次。

假设你想要 87.98.256.512 上的端口 443,请复制该https.xml文件(建议不要触碰原件)/etc/firewalld/services,在这里我将使用https-admin.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>HTTPS for 87.98.256.512</short>
  <description>...</description>
  <port protocol="tcp" port="443"/>
  <destination ipv4="87.98.256.512" />
</service>

然后

# firewall-cmd --permanent --zone=public --add-service=https-admin
success
# firewall-cmd --reload
success
# firewall-cmd --zone=public --list-services
http https-admin

最后用 iptables 确认一下

Chain IN_public_allow (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            87.98.256.512        tcp dpt:443 ctstate NEW
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 ctstate NEW

请记住:destination每个服务只有一个标签,因此如果您有要求,只需创建多个服务即可。

答案1

整个接口别名功能都是过去遗留下来的。它实际上并没有创建一个单独的接口。很长时间以来,您都不需要使用别名将多个 IP 分配给单个接口。由于它不是“真实”接口,因此您的防火墙软件无法将其视为真实接口。如果您使用该ip addr命令,您将看到所有地址都分配给主接口,并且eth0:0仅被视为该地址的标签。

考虑到所有这些,我并不完全确定您需要做什么来调整防火墙。我怀疑您可能需要通过 IP 指定端口,而不是通过 IP 地址和别名。

相关内容