Existe uma maneira de executar apenas salvar com firewalld no RHEL7?

11

Estou começando a usar o RHEL7 e aprendendo um pouco sobre as mudanças que acompanham o systemd.

Existe uma maneira de executar /sbin/service iptables saveno firewalld?

$ /sbin/service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

O paralelo mais próximo que posso encontrar na documentação é --reload:

Reload the firewall without loosing state information:
$ firewall-cmd --reload

Mas não diz explicitamente se está economizando ou não.

Peter Souter
fonte

Respostas:

21

A versão do firewalld no RHEL 7.0 não possui um script "save" e não tem como copiar a configuração do firewall em execução para a configuração permanente. Você salva uma alteração no firewall com o firewalld adicionando --permanentà linha de comando a alteração. Sem ele, qualquer alteração feita é temporária e será perdida quando o sistema reiniciar.

Por exemplo:

firewall-cmd --add-service=http                 # Running config
firewall-cmd --add-service=http --permanent     # Startup config

As versões posteriores (pós-RHEL 7) do firewalld incluem uma maneira de salvar a configuração em execução, e isso está disponível agora no Fedora e no RHEL 7.1 . Nesse caso, o comando é simplesmente:

firewall-cmd --runtime-to-permanent
Michael Hampton
fonte
2
Para continuar no comentário de Michael Hampton, descobri que precisava reiniciar o serviço firewalld ("systemctl restart firewalld") depois de executar "firewall-cmd --runtime-to-Permanent" para que as regras de firewall fossem salvas corretamente, especialmente depois de remover algumas regras manualmente via iptables. Parece que o firewalld armazena em cache algumas regras; portanto, um "firewall-cmd --reload" pode restabelecer regras do firewalld que deveriam ter sido removidas pelo comando "--runtime-to-Permanent".
Antony Nguyen
2
Observe que o comando --runtime-to-Permanent não aparece na conclusão da guia, mas está de fato lá (testado em um sistema CentOS 7.5).
Dodexahedron 26/09/18
@AntonyNguyen, você não deve usar os comandos iptables quando o firewalld estiver gerenciando as regras. O FIrewalld não tem como saber da alteração (seria necessário pesquisar periodicamente e isso prejudicaria o desempenho do firewall por causa de seu design, que é fixado pelo nftables) use 'firewall-cmd --direct --passthrough ipv4 -A para a frente ... GOTA -j'
AdamKalisz
0

Eu precisava adicionar o serviço SIP e alguns IPs

no diretório / usr / lib / firewalld / services / adicionei sip.xml com base em outros arquivos de serviço xml.

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SIP</short>
  <description>This is SIP, Yo! </description>
  <port protocol="udp" port="5060"/>
</service>

Em seguida, adicionei o serviço sip a um firewalld

# firewall-cmd --add-service=sip --permanent 

Em seguida, adicionei IPs ao serviço em /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description></description>
  <service name="dhcpv6-client"/>
  <service name="http"/>
  <service name="ssh"/>
  <service name="https"/>

  <rule family="ipv4">
    <source address="x.x.x.x/32"/>
    <service name="sip"/>
    <accept/>
  </rule>

</zone>

você também pode adicionar LOG se adicionar nível de registro

  <rule family="ipv4">
    <source address="x.x.x.x/32"/>
    <service name="sip" 
    <log prefix="sip" level="info"/>
    <accept/>
  </rule>

depois de adicionar regras à sua zona, execute

# firewall-cmd --reload

verifique suas tabelas de ipt - você deve estar pronto.

Alex N
fonte