(Solução encontrada, veja abaixo...)
O servidor (CentOS 7) possui vários IPs públicos, estes são configurados através dos ifcfg-eth0:0
arquivos de configuração usuais 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 definindo o IP de destino para corresponder a qualquer alias necessário para a porta.
EUpensamentocom o firewalld eu poderia aplicar uma zona diferente a cada interface para obter o mesmo efeito, mas parece que não consigo.
Começamos com:
# firewall-cmd --get-active-zones
public
interfaces: eth0 eth0:0
trusted
interfaces: eth1
Criei uma nova zona public_web
que queria usareth0: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
e --change-interface
vários outros comandos em várias ordens, mas eth0:0
não cederei. Não consigo encontrar nenhuma documentação 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 destination
tag 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 https.xml
arquivo (recomendo que você não toque nos originais) para /etc/firewalld/services
, aqui vou usarhttps-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 destination
tag por serviço, então faça vários serviços se essa for sua necessidade.
Responder1
Toda a funcionalidade de alias da interface é uma herança do passado. Na verdade, não cria uma interface separada. Há muito tempo que você não precisa usar aliases para atribuir vários IPs a uma única interface. Por não ser uma interface “real”, seu software de firewall não pode tratá-la como uma interface real. Se você usar o ip addr
comando, verá que todos os endereços estão atribuídos à interface principal e eth0:0
é simplesmente considerado um rótulo para esse endereço.
Com tudo isso em mente, não tenho certeza do que você precisa fazer para ajustar seu firewall. Suspeito que você precise especificar portas por IP, e não pelo endereço IP e nem pelo alias.