Existe-t-il un moyen d'exécuter simplement enregistrer avec firewalld dans RHEL7?

11

Je commence à utiliser RHEL7 et j'apprends un peu sur les changements qui accompagnent systemd.

Existe-t-il un moyen de jouer /sbin/service iptables savedans 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.

Le parallèle le plus proche que je peux trouver dans la documentation est --reload:

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

Mais il ne dit pas explicitement s'il enregistre ou non.

Peter Souter
la source

Réponses:

21

La version de firewalld dans RHEL 7.0 n'a pas de script "save" et aucun moyen de copier la configuration de pare-feu en cours d'exécution dans la configuration permanente. Vous enregistrez une modification du pare-feu avec firewalld en ajoutant --permanentà la ligne de commande apportant la modification. Sans cela, toute modification apportée est temporaire et sera perdue au redémarrage du système.

Par exemple:

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

Les versions ultérieures (post-RHEL 7) de firewalld incluent un moyen de sauvegarder la configuration en cours d'exécution, et cela est maintenant disponible dans Fedora et dans RHEL 7.1 . Dans ce cas, la commande est simplement:

firewall-cmd --runtime-to-permanent
Michael Hampton
la source
2
Pour continuer sur le commentaire de Michael Hampton, j'ai constaté que je devais redémarrer le service firewalld ("systemctl restart firewalld") après avoir exécuté "firewall-cmd --runtime-to-permanent" afin que les règles de pare-feu soient enregistrées correctement, en particulier après avoir dû supprimer certaines règles manuellement via iptables. Il semble que firewalld cache certaines règles, donc un "firewall-cmd --reload" peut rétablir les règles de firewalld qui auraient dû être supprimées via la commande "--runtime-to-permanent".
Antony Nguyen
2
Notez que la commande --runtime-to-permanent n'apparaît pas dans la complétion des onglets, mais elle y est en fait (testée sur un système CentOS 7.5).
dodexahedron
@AntonyNguyen, vous ne devez pas utiliser les commandes iptables lorsque firewalld gère les règles. FIrewalld n'a aucun moyen de connaître le changement (il aurait besoin d'interroger périodiquement et cela tuerait les performances du pare-feu en raison de sa conception, qui est fixée par nftables) utilisez 'firewall-cmd --direct --passthrough ipv4 -UN AVANT ... -j DROP '
AdamKalisz
0

J'avais besoin d'ajouter un service SIP et quelques IP

dans le répertoire / usr / lib / firewalld / services / j'ai ajouté sip.xml basé sur d'autres fichiers de service xml.

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

Ensuite, j'ai ajouté un service SIP à un pare-feu

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

Ensuite, j'ai ajouté des adresses IP au service dans /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>

vous pouvez également ajouter LOG si vous ajoutez un niveau de journalisation

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

après avoir ajouté des règles à votre zone, exécutez

# firewall-cmd --reload

vérifiez vos iptables - vous devriez être prêt.

Alex N
la source