Firewalld com um alias de IP (eth0:0)

Firewalld com um alias de IP (eth0:0)

(Solução encontrada, veja abaixo...)

O servidor (CentOS 7) possui vários IPs públicos, estes são configurados através dos ifcfg-eth0:0arquivos 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_webque 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-interfacee --change-interfacevários outros comandos em várias ordens, mas eth0:0nã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 destinationtag 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.xmlarquivo (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 destinationtag 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 addrcomando, 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.

informação relacionada