Como faço para mascarar apenas uma sub-rede específica com firewalld?

1

Estou executando openvpn no CentOS 7 com firewalld . Já habilitei o mascaramento na zona pública (padrão) e ele funciona bem. No entanto, eu ocasionalmente preciso executar serviços em localhost / 127.0.0.1, e o mascaramento está atrapalhando. Os serviços se ligam corretamente a 127.0.0.1, mas o código do cliente que tenta se conectar a ele parece estar mapeando o endereço IP de destino 127.0.0.1 para o endereço IP para eth0, onde o servidor não está escutando (ele foi configurado para 127.0 .0.1 apenas).

Como faço para limitar o mascaramento a apenas uma sub-rede específica, então o openvpn ainda funciona, mas também posso acessar serviços localmente no host local sem interferir no mascaramento?

Outra maneira de traduzir minha pergunta: Como evitar o mascaramento do (s) endereço (s) de loopback?

Algumas ideias que tive, mas não consigo descobrir como fazer (ou fazer sem quebrar outra coisa):

  • Limite de mascaramento apenas para 10.8.0.0/16 para openvpn
  • Limite de mascaramento movendo o endereço IP de eth0 para outra zona
  • Tolere o mascaramento movendo a interface de loopback para a zona confiável e adicionando o endereço IP da eth0 como uma fonte na zona confiável
por Christopher 12.03.2016 / 06:42

1 resposta

3

Eu encontrei uma solução:

external
  interfaces: eth0
  masquerade: yes

internal
  interfaces: tun0
  masquerade: no

public (default)
  interfaces:      # not used
  masquerade: no

trusted
  interfaces: lo
  masquerade: no

Para que isso funcionasse, eu tive que declarar explicitamente que lo estava na trusted zone, tun0 estava na internal zone e eth0 estava na external zone. Para fazer isso, eu usei (por exemplo):

firewall-cmd --permanent --zone=external --add-interface=eth0
firewall-cmd --permanent --zone=internal --add-interface=tun0
firewall-cmd --permanent --zone=trusted  --add-interface=lo
firewall-cmd --reload

Para eth0 , também foi necessário adicionar ZONE="external" a /etc/sysconfig/network-scripts/ifcfg-eth0 para continuar trabalhando nas reinicializações. Isso não foi necessário para as outras interfaces.

Os serviços / portas reais abrem na zona trusted e internal , deixei seus padrões. Certifiquei-me de que a zona padrão ( public ) tinha ssh (que é o padrão) para emergências (como se uma atualização renomeie a interface eth0 ) e adicionei os serviços que desejo expor à external zone. / p>

masquerade já estava ativado por padrão na zona external e desativado nas outras.

Esta configuração funciona com firewalld-0.3.9-14.el7.noarch Eu não tenho certeza porque colocá-los em zonas separadas era necessário para excluir a interface de loopback do masquerading (transformando o mascaramento em sets da regra: -A POST_external_allow ! -i lo -j MASQUERADE , o que parece suficiente para mim, mas eu não sou especialista). No entanto, eu achei este bug que pode estar relacionado e o problema pode ser corrigido em versões futuras.

    
por 12.03.2016 / 18:53