(解决scheme发现,见下文…)
服务器(CentOS 7)具有多个公共IP,通过通常的ifcfg-eth0:0
configuration文件进行设置,工作正常。 我正在尝试适应firewalld(来自iptables)。 我喜欢能够为每个IP别名指定开放端口 – 通过iptables,可以简单地通过设置目标IP来匹配所需端口的别名。
我想用firewalld我可以应用一个不同的区域,以达到相同的效果,但似乎我不能这样做。
我们从以下开始:
# firewall-cmd --get-active-zones public interfaces: eth0 eth0:0 trusted interfaces: eth1
我创build了一个我想用于eth0:0
的新区域public_web
# 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
不会改变。 我似乎无法find有关使用别名的任何文档,所以我不确定这是否是实现我想要的正确方法?
谢谢大家。
解决的办法是在服务文件中使用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
标签,所以如果这是您的要求,只需要多个服务。
整个接口别名function是从过去遗留下来的。 它实际上并不创build一个单独的接口。 您不需要使用别名长时间将多个IP分配到单个接口。 因为它不是一个“真正的”接口,所以你的防火墙软件不能把它当作真正的接口。 如果使用ip addr
命令,您将看到地址全部分配给主接口,并且eth0:0
被简单地认为是该地址的标签。
考虑到这一切,我不完全确定你需要做什么来调整你的防火墙。 我怀疑你可能需要通过IP来指定端口,而不是IP地址而不是别名。