Gibt es eine Möglichkeit, nur mit firewalld in RHEL7 zu speichern?

11

Ich fange an, RHEL7 zu verwenden und lerne ein wenig über die Änderungen, die mit systemd einhergehen.

Gibt es eine Möglichkeit, /sbin/service iptables savein Firewalld durchzuführen ?

$ /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.

Die nächste Parallele, die ich aus der Dokumentation finden kann, ist --reload:

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

Es wird jedoch nicht explizit angegeben, ob gespeichert wird oder nicht.

Peter Souter
quelle

Antworten:

21

Die Version von firewalld in RHEL 7.0 verfügt über kein "Speichern" -Skript und keine Möglichkeit, die ausgeführte Firewall-Konfiguration in die permanente Konfiguration zu kopieren. Sie speichern eine Firewall-Änderung mit firewalld, indem Sie --permanentsie der Befehlszeile hinzufügen , die die Änderung vornimmt. Ohne sie sind alle Änderungen, die Sie vornehmen, vorübergehend und gehen beim Neustart des Systems verloren.

Beispielsweise:

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

Spätere (nach RHEL 7) Versionen von firewalld enthalten eine Möglichkeit zum Speichern der laufenden Konfiguration. Diese ist jetzt in Fedora und in RHEL 7.1 verfügbar . In diesem Fall lautet der Befehl einfach:

firewall-cmd --runtime-to-permanent
Michael Hampton
quelle
2
Um mit Michael Hamptons Kommentar fortzufahren, musste ich den Firewalld-Dienst ("systemctl restart firewalld") nach dem Ausführen von "firewall-cmd --runtime-to-permanent" neu starten, damit die Firewall-Regeln korrekt gespeichert wurden, insbesondere nachdem einige Regeln manuell über iptables entfernt werden mussten. Es scheint, dass firewalld einige Regeln zwischenspeichert, sodass ein "firewall-cmd --reload" möglicherweise Regeln von firewalld neu einrichtet, die über den Befehl "--runtime-to-permanent" entfernt werden sollten.
Antony Nguyen
2
Beachten Sie, dass der Befehl --runtime-to-permanent nicht in der Tab-Vervollständigung angezeigt wird, sondern tatsächlich vorhanden ist (getestet auf einem CentOS 7.5-System).
Dodexaeder
@AntonyNguyen Sie sollten keine iptables-Befehle verwenden, wenn firewalld die Regeln verwaltet. FIrewalld hat keine Möglichkeit, die Änderung zu kennen (es müsste regelmäßig abgefragt werden und dies würde die Leistung der Firewall aufgrund ihres Designs beeinträchtigen, das übrigens von nftables behoben wird). Verwenden Sie 'firewall-cmd --direct --passthrough ipv4 -A FORWARD ... -j DROP '
AdamKalisz
0

Ich musste einen SIP-Dienst und einige IPs hinzufügen

Im Verzeichnis / usr / lib / firewalld / services / habe ich sip.xml basierend auf anderen XML-Servicedateien hinzugefügt .

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

Dann habe ich einer Firewall einen SIP-Dienst hinzugefügt

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

Dann habe ich IPs zum Dienst in /etc/firewalld/zones/public.xml hinzugefügt

<?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>

Sie können auch LOG hinzufügen, wenn Sie die Protokollierungsstufe hinzufügen

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

Nachdem Sie Ihrer Zone Regeln hinzugefügt haben, führen Sie sie aus

# firewall-cmd --reload

Überprüfen Sie Ihre iptables - Sie sollten fertig sein.

Alex N.
quelle