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 firewalld
ich zu installieren iptables-service
und 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-file
Aussehen:
# 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/iptables
die 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.service
anstatt zu verwenden systemctl enable iptables
scheint 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 -L
meine 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.
service stop|mask firewalld
)Antworten:
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
quelle
Stellen Sie sicher, dass Sie das iptables-services-Paket installiert haben:
Wenn nicht, installieren Sie es:
Sie können dann den Dienstbefehl verwenden, um ihn wie bei früheren Versionen von CentOS zu steuern:
Die
save
,stop
,start
,restart
werden alle Befehle Arbeit und es sollte beim Booten laden.quelle
rpm -aq
selbst 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. Wennrpm -aq iptables-services
nichts zurückgegeben wird, bedeutet dies, dass das Paket 'iptables-services' nicht installiert ist.iptables-services
im Standard-Basis-CentOS 7-Repository verfügbar sind.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.
quelle
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 (und
libvirt-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
firewalld
als 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 mitfirewalld
Alternativen.quelle
Versuche dies:
Führen Sie hier jetzt Ihre iptables-Regeln aus
quelle