(Solução encontrada, veja abaixo ...)
O servidor (CentOS 7) tem vários IPs públicos, estes são configurados através dos usuais arquivos ifcfg-eth0:0
config e estão funcionando bem. Estou tentando me adaptar ao firewalld (vindo do iptables). Eu gosto de poder especificar portas abertas por alias de IP - com o iptables isso foi feito simplesmente configurando o IP de destino para corresponder ao alias necessário à porta.
Eu pensei que com firewalld eu poderia aplicar uma zona diferente em cada interface para obter o mesmo efeito, mas parece que não posso fazê-lo.
Começamos com:
# firewall-cmd --get-active-zones
public
interfaces: eth0 eth0:0
trusted
interfaces: eth1
Eu criei uma nova zona public_web
que eu queria usar para 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
Mas ...
# firewall-cmd --get-active-zones
public
interfaces: eth0 eth0:0
trusted
interfaces: eth1
Eu tentei --remove-interface
, --change-interface
e vários outros comandos em vários pedidos, mas eth0:0
não se moverá. Não consigo encontrar nenhuma documentação em nenhum lugar sobre o uso de aliases, então não tenho certeza se essa é a maneira correta de conseguir o que eu gostaria?
Obrigado a todos.
Solução:
A solução é usar a tag destination
em um arquivo de serviço, ela só pode ser usada uma vez por serviço.
Então, digamos que você queira a porta 443 em 87.98.256.512, faça uma cópia do arquivo https.xml
(recomende que você não toque em originais) em /etc/firewalld/services
, aqui eu usarei 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>
Então
# firewall-cmd --permanent --zone=public --add-service=https-admin
success
# firewall-cmd --reload
success
# firewall-cmd --zone=public --list-services
http https-admin
E finalmente confirme isso com 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
Lembre-se: apenas uma tag destination
por serviço, portanto, basta fazer vários serviços se essa for sua necessidade.