Firewalld com um alias de IP (eth0: 0)

5

(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.

    
por bnx 19.06.2015 / 17:02

1 resposta

5

Toda a funcionalidade de alias de interface é remanescente do passado. Na verdade, não cria uma interface separada. Você não precisou usar aliases para atribuir vários IPs a uma única interface por um longo tempo. Por não ser uma interface 'real', seu software de firewall não pode tratá-la como uma interface real. Se você usar o comando ip addr , verá que os endereços estão todos atribuídos à interface principal, e o eth0:0 é simplesmente considerado um rótulo para esse endereço.

Com tudo isso em mente, não sei exatamente o que você precisa fazer para ajustar seu firewall. Eu suspeito que você pode precisar especificar portas por IP, e não pelo endereço IP e não pelo alias.

    
por 19.06.2015 / 18:45