CentOS 7 iptables sind nach dem Neustart nicht dauerhaft

11

Ich habe eine minimale CentOS 7-Version auf einem Entwicklungsserver installiert, um einige Linux-Gäste mit kvm / qemu zu virtualisieren.

So verwenden Sie iptables, anstatt firewalldich zu installieren iptables-serviceund zu tun:

systemctl stop firewalld
systemctl mask firewalld
systemctl enable iptables
systemctl start iptables

SELinux wird durch Bearbeiten deaktiviert /etc/sysconfig/selinux.

Meine Regeln für iptables lauten wie folgt:

iptables -Z
iptables -F
iptables -X
iptables -t nat -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -o enp6s0 -j MASQUERADE
iptables -A FORWARD -i enp6s0 -o virbr0 -j ACCEPT

Jetzt speichere ich meine Einstellungen mit folgendem Befehl:

iptables-save > /etc/sysconfig/iptables

Mein iptables-fileAussehen:

# Generated by iptables-save v1.4.21 on Thu Aug 20 10:46:40 2015
*mangle
:PREROUTING ACCEPT [16736:10889078]
:INPUT ACCEPT [1063:106860]
:FORWARD ACCEPT [15679:10784186]
:OUTPUT ACCEPT [570:71275]
:POSTROUTING ACCEPT [15728:10809742]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Thu Aug 20 10:46:40 2015
# Generated by iptables-save v1.4.21 on Thu Aug 20 10:46:40 2015
*filter
:INPUT ACCEPT [868:81772]
:FORWARD ACCEPT [8328:7311589]
:OUTPUT ACCEPT [233:32016]
-A FORWARD -i enp6s0 -o virbr0 -j ACCEPT
COMMIT
# Completed on Thu Aug 20 10:46:40 2015
# Generated by iptables-save v1.4.21 on Thu Aug 20 10:46:40 2015
*nat
:PREROUTING ACCEPT [1308:86998]
:INPUT ACCEPT [77:12475]
:OUTPUT ACCEPT [1:72]
:POSTROUTING ACCEPT [1228:74319]
-A POSTROUTING -o enp6s0 -j MASQUERADE
COMMIT
# Completed on Thu Aug 20 10:46:40 2015

Eine schnelle Überprüfung, um festzustellen, ob meine Regeln vorerst korrekt sind:

[root@dev1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Nach dem Neustart des Servers sehen die iptables-Regeln jedoch folgendermaßen aus:

[root@dev1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             10.0.1.0/24          ctstate RELATED,ESTABLISHED
ACCEPT     all  --  10.0.1.0/24          anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

Ich verstehe nicht, woher die anderen Regeln kommen.

Beim Aufruf werden iptables-restore -c /etc/sysconfig/iptablesdie erwarteten Regeln angezeigt.

Es scheint, dass die gespeicherten Regeln beim Booten nicht geladen werden oder dass die "Standard" -Regeln nicht gelöscht werden oder was auch immer.

Was ist das Problem hier ??? Ich bekomme langsam graue Haare ...


Danke für deine schnellen Antworten :)

Wie oben erwähnt, wurden die iptables-Dienste von mir installiert:

[root@dev1 ~]# rpm -aq iptables-services
iptables-services-1.4.21-13.el7.x86_64

Das Aktivieren des Dienstes mit systemctl enable iptables.serviceanstatt zu verwenden systemctl enable iptablesscheint keinen Unterschied zu machen, da dieselbe Dienstdatei verknüpft ist:

[root@dev1 ~]# systemctl disable iptables
rm '/etc/systemd/system/basic.target.wants/iptables.service'
[root@dev1 ~]# systemctl enable iptables.service
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'

Dies ist der Inhalt der iptables-Datei nach dem Aufruf /usr/libexec/iptables/iptables.init save

[root@develcluster1 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Fri Aug 21 14:34:04 2015
*nat
:PREROUTING ACCEPT [351490:22546787]
:INPUT ACCEPT [15751:2400243]
:OUTPUT ACCEPT [324:21186]
:POSTROUTING ACCEPT [304860:18293418]
-A POSTROUTING -o enp6s0 -j MASQUERADE
COMMIT
# Completed on Fri Aug 21 14:34:04 2015
# Generated by iptables-save v1.4.21 on Fri Aug 21 14:34:04 2015
*filter
:INPUT ACCEPT [505048:69178501]
:FORWARD ACCEPT [55815086:22035726185]
:OUTPUT ACCEPT [325986:56595531]
-A FORWARD -i enp6s0 -o virbr0 -j ACCEPT
COMMIT
# Completed on Fri Aug 21 14:34:04 2015
# Generated by iptables-save v1.4.21 on Fri Aug 21 14:34:04 2015
*mangle
:PREROUTING ACCEPT [109215513:66867793592]
:INPUT ACCEPT [505243:69203589]
:FORWARD ACCEPT [108710264:66798590873]
:OUTPUT ACCEPT [326323:56634790]
:POSTROUTING ACCEPT [109036066:66855179944]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Fri Aug 21 14:34:04 2015

Nach dem Neustart ein Aufruf, iptables -Lmeine gespeicherten Regeln nicht anzuzeigen:

[root@dev1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             10.0.1.0/24          ctstate RELATED,ESTABLISHED
ACCEPT     all  --  10.0.1.0/24          anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

Vielleicht mache ich etwas grundlegendes falsch. Aber jeder Thread, den ich lese, macht das genauso und es sollte funktionieren.

Wenn Sie weitere Informationen benötigen, sagen Sie es mir bitte.

In der Zwischenzeit habe ich mir geholfen, indem ich ein kleines Skript aufgerufen habe, das ich nach jedem Neustart aufrufen muss.

#!/bin/sh

iptables -Z
iptables -F
iptables -X
iptables -t nat -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -o enp6s0 -j MASQUERADE
iptables -A FORWARD -i enp6s0 -o virbr0 -j ACCEPT

iptables --flush
iptables-restore -c /etc/sysconfig/iptables

Das ist nicht sexy, funktioniert aber soweit. Konnte aber nicht die endgültige Lösung sein.

Elpado
quelle
Haben Sie Firewalld als CentOS7 überprüft? Verwandte Links: serverfault.com/questions/626521/… Ich hoffe, ich bin nicht aus dem Thema. Bitte überprüfen Sie auch diese Antwort stackoverflow.com/a/24827438/2522966 , die Sie auffordert , den Firewall-Dienst zu stoppen und zu maskieren ( service stop|mask firewalld)
Nico

Antworten:

13

Ich denke, Sie müssen den Dienst aktivieren mit:

systemctl enable iptables.service

und Sie müssen das Init-Skript iptables ausführen, um Ihre Regeln wie folgt zu speichern:

/usr/libexec/iptables/iptables.init save

Henrik Pingel
quelle
3

Stellen Sie sicher, dass Sie das iptables-services-Paket installiert haben:

rpm -aq iptables-services

Wenn nicht, installieren Sie es:

yum install iptables-services

Sie können dann den Dienstbefehl verwenden, um ihn wie bei früheren Versionen von CentOS zu steuern:

service iptables save

Die save, stop, start, restartwerden alle Befehle Arbeit und es sollte beim Booten laden.

Gen
quelle
Ich habe den Befehl iptables. aber `rpm -aq iptables-services` gibt nichts aus. Was bedeutet das?
Saad Masood
rpm -aqselbst listet alle auf einem System installierten Pakete und deren Version auf. rpm -aq <package>druckt Informationen über das definierte Paket aus, wenn es installiert ist. Wenn rpm -aq iptables-services nichts zurückgegeben wird, bedeutet dies, dass das Paket 'iptables-services' nicht installiert ist.
Gene
Wenn Sie eine spezifische Frage zu CentOS 7 und AWS haben, sollten Sie eine ganz neue Frage stellen und keine Kommentare zu einer nicht verwandten Antwort abgeben. Ich habe keine Ahnung, welche Pakete Amazon in seinen Repositorys aufbewahrt, aber ich kann Ihnen sagen, dass diese iptables-servicesim Standard-Basis-CentOS 7-Repository verfügbar sind.
Gene
1

Ich habe dies umgangen, indem ich den Befehl 'service iptables stop \ iptables --flush' hinzugefügt habe, der an den unteren /etc/rc.d/rc.local angehängt ist

Meine Umgebung war Centos 7 KVM und mein Problem war, dass libvirt die iptables bei einem Neustart erneut auffüllt und den Zugriff auf meine virtuellen Maschinen blockiert.

3pence
quelle
0

Wenn ich mich richtig erinnere, hat einer der Virtualisierungsdienste (und Sie scheinen einen auszuführen, gemessen am Namen der virbr0-Schnittstelle) selbst einige Firewall-Regeln hinzugefügt, um konfigurierte virtuelle Netzwerke und Schnittstellen aufzunehmen. Bitte werfen Sie einen Blick in diesen Bereich (undlibvirt-daemon ist wahrscheinlich ein guter Ausgangspunkt).

Ich weiß jedoch nicht, ob die Tatsache, dass es Ihre Regeln zu überschreiben scheint, ein Fehler oder eine Funktion ist. RedHat scheint firewalldals Firewall-Lösung in RHEL ziemlich fokussiert zu sein (und dies geht auch unverändert direkt an CentOS), und sie unterstützen möglicherweise nicht den korrekten Betrieb ihrer Virtualisierungslösungen mit firewalldAlternativen.

Tomek
quelle
0

Versuche dies:

systemctl stop firewalld
systemctl disable firewalld
systemctl mask --now firewalld
yum -y remove iptables-services
yum -y install iptables-services
systemctl start iptables
systemctl status iptables

echo '# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT' > /etc/sysconfig/iptables

Führen Sie hier jetzt Ihre iptables-Regeln aus

iptables-save > /etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/iptables
systemctl restart iptables
systemctl restart iptables
systemctl enable iptables.service
David Bohbot
quelle