Adicionando uma regra PREROUTING permanente no iptables usando o firewall-cmd

1

Estou tentando adicionar uma nova regra na cadeia PREROUTING no iptables (NAT) usando firewall-cmd no RHEL 7:

$ firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8161

Então eu verifico o iptables via $ iptables -t nat -L :

...
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
PREROUTING_direct  all  --  anywhere             anywhere
PREROUTING_ZONES_SOURCE  all  --  anywhere             anywhere
PREROUTING_ZONES  all  --  anywhere             anywhere
...
Chain PREROUTING_direct (1 references)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8161
...

No entanto, se eu executar um comando equivalente do iptables da seguinte forma:

...
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
PREROUTING_direct  all  --  anywhere             anywhere
PREROUTING_ZONES_SOURCE  all  --  anywhere             anywhere
PREROUTING_ZONES  all  --  anywhere             anywhere
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8161
...
Chain PREROUTING_direct (1 references)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8161

Eu recebo essa regra adicional no Chain PREROUTING e isso permite que o pré-layout funcione mesmo se o firewall estiver desabilitado (ou seja, desabilitando o daemon de firewall e executando o comando iptables ).

Então, minha pergunta é dupla:

  • Existe um comando firewall-cmd que faz exatamente o mesmo que o comando iptables acima?
  • Essa regra pode ser adicionada permanentemente por meio de firewall-cmd e permanecer lá mesmo depois que o daemon de firewall estiver desativado?
por xeroqu 02.03.2017 / 08:50

2 respostas

3

Você está usando a opção firewall-cmd with --direct , o que significa que aceita um comando iptables. Assim, você pode apenas as mesmas opções com iptables -t nat para ter o mesmo efeito com uma exceção. Usar firewall-cmd dessa maneira adicionará a regra de NAT a PREROUTING_direct chain ao usar iptables diretamente com a adição da regra a PREROUTING chain.

Na saída de iptables -t nat -L , você adicionou a regra duas vezes: uma vez para cada cadeia.

Quanto à segunda parte da questão, o serviço firewalld removerá todas as cadeias definidas quando forem interrompidas. Assim, as regras adicionadas a PREROUTING_direct não estarão mais disponíveis. Resposta curta é Não.

    
por 02.03.2017 / 09:30
0

I get this additional rule in the Chain PREROUTING and this allows prerouting to work even if the firewall is disabled.

Então, não tenho certeza se isso é verdade.

Se o PREROUTING não estiver mais funcionando quando você interromper o firewalld (e não estou claro por que você faria isso), presumo que seja porque o firewalld está removendo sua política inteira (por exemplo, iptables -F / iptables -X ) . Nesse caso, o fato de você ter adicionado outra versão da mesma regra manualmente faria pouca diferença. iptables -F ainda o removeria.

Seu (primeiro) comando deve estar lhe dando uma regra de pré-roteamento permanente como você queria, contanto que você não pare o firewalld. Eu tenderia a pensar que isso deveria ser suficiente, mas posso muito bem estar perdendo alguma coisa sobre suas necessidades.

Só para ficar claro: não existe uma diferença prática entre ter sua regra de pré-roteamento na cadeia PREROUTING_DIRECT ou na cadeia PREROUTING. Ambas as abordagens funcionam da mesma maneira, têm o mesmo efeito e, além de outras alterações na política de firewall, devem estar fazendo o que você precisa.

A única diferença é que o firewalld está basicamente fazendo um pequeno administrador nos bastidores para você e colocando sua regra real em uma cadeia definida pelo usuário em vez de uma definida pelo sistema.

tl; dr : Eu apenas manteria o firewalld em execução e usaria seus comandos para criar e gerenciar suas regras. Enquanto os comandos firewall-cmd versus 'raw' iptables têm efeitos visuais ligeiramente diferentes, eles têm o mesmo efeito no tráfego de rede.

    
por 02.03.2017 / 09:59