Centos 7 speichert die Iptables-Einstellungen

58

Problem: iptables wird nach dem Neustart des Servers auf die Standardeinstellungen zurückgesetzt.

Ich versuche so eine Regel zu setzen:

iptables -I INPUT -p tcp --dport 3000 -j ACCEPT

danach mache ich:

service iptables save

und es schreibt so etwas zurück

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

und danach rannte ich einfach (dies wurde einmal gemacht):

chkconfig iptables on (Ich habe gelesen, dass dies getan werden muss, um die Einstellungen nach dem Neustart wiederherzustellen)

Danach starte ich neu und führe den folgenden Befehl aus:

systemctl list-unit-files | grep iptables

und ich sehe, dass iptables.service aktiviert ist, aber die Regel (um Port 3000 zu öffnen) funktioniert nicht mehr.

Wie behalte ich diese Einstellungen bei?

user1463822
quelle
Warum hast du nicht einfach Firewalld benutzt? Es läuft wahrscheinlich noch.
Michael Hampton
Wahrscheinlich, weil Firewalld nicht für Server-Umgebungen geeignet ist ...
Juan Jimenez

Antworten:

67

CentOS 7 verwendet jetzt FirewallD !

Beispiel:

firewall-cmd --zone=public --add-port=3000/tcp --permanent

Regeln neu laden:

firewall-cmd --reload
roothahn
quelle
2
Keine Ahnung, warum Centos7-Image von AWS AMI keine Firewall hat.
Saad Masood
5
ODER Sie können die Firewall deaktivieren und das Paket "iptables-services" installieren, um eine nahezu native iptables-Kompatibilität zu erreichen :)
vagarwal
1
Ich habe versucht , Port Konfiguration Spedition 80 -> 8180 für lo ( --zone=trusted) mit firewalld-cmd , aber es funktioniert nicht (es funktioniert in --zone=public) Doing so mit iptables sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8180 ; sudo /sbin/iptables -t nat -I OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8180Werken (aber jeder firewalld --reloadverliert rückgängig macht diese)
djb
@saad: weil aws bereits einen firewall service
anbietet,
Es ist nicht! Ich habe ein Centos 7 VPS bestellt und es hat standardmäßig Iptables! Die OS-Version: 7.5.1804 (Core)
Codezombie
66

Deaktivieren Sie die Firewall mit dem folgenden Befehl:

systemctl disable firewalld

Dann installiere iptables-service mit folgendem Befehl:

yum install iptables-services

Dann aktiviere iptables als Dienste:

systemctl enable iptables

Jetzt können Sie Ihre iptable-Regeln mit folgendem Befehl speichern:

service iptables save
HosseinGBI
quelle
22

Unter CentOS 7 Minimal müssen Sie möglicherweise das iptables-servicesPaket installieren (danke an @RichieACC für den Vorschlag ):

sudo yum install -y iptables-services

Aktivieren Sie dann den Dienst mit systemd:

sudo systemctl enable iptables.service

Führen Sie das Initscript aus, um Ihre Firewall-Regeln zu speichern:

sudo /usr/libexec/iptables/iptables.init save
qris
quelle
2

Vielleicht wäre ein solches Skript für irgendjemanden hilfreich gewesen?

Beachten Sie, dass Sie alle aktuell konfigurierten Daten verlieren, da die Firewall entfernt und alle aktuellen Regeln in der INPUT-Tabelle gelöscht werden :

yum remove firewalld && yum install iptables-services

iptables --flush INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            # Any packages related to an existing connection are OK
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # ssh is OK
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT   # Port 3000 for IPv4 is OK
iptables -A INPUT -j REJECT # any other traffic is not welcome - this should be the last line
service iptables save       # Save IPv4 IPTABLES rules van memory naar disk
systemctl enable iptables   # To make sure the IPv4 rules are reloaded at system startup

Ich vermute, Sie möchten dasselbe, falls Ihr System (jetzt oder zu einem späteren Zeitpunkt) über IPv6-Datenverkehr erreicht werden kann:

ip6tables --flush INPUT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            # Any packages related to an existing connection are OK
ip6tables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # ssh is OK
ip6tables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT   # Port 3000 for IPv6 is OK
ip6tables -A INPUT -j REJECT # any other traffic is not welcome - this should be the last line
service ip6tables save       # Save IPv6 IPTABLES rules van memory naar disk
systemctl enable ip6tables   # To make sure the IPv6 rules are reloaded at system startup
JohannesB
quelle
1

Sie können die Datei / etc / sysconfig / iptables direkt ändern. Laden Sie den iptables-Dienst neu, um die Regeln aus dieser Datei neu zu laden. Wie Sie bereits erfahren haben, ist firewalld das neue Standard-Firewall-System für Centos, und dies ist eine gute Gelegenheit, den Umgang damit zu erlernen.

gesteinigt
quelle
7
in CentOS7 ist es nicht mehr ein / etc / sysconfig / iptables - Datei
roothahn
1
Sorry @roothahn, aber es gibt es definitiv ... es sei denn, Sie verpassen natürlich einige Pakete. Unter /usr/lib/systemd/system/iptables.service können Sie sehen, dass "/usr/libexec/iptables/iptables.init start" tatsächlich gestartet wurde. Dies ist das übliche alte und beliebte Skript, das nach der üblichen alten Konfigurationsdatei sucht in / etc / sysconfig
stoned
1
Ja, /etc/sysconfig/iptablesexistiert auch für mich nicht. Existiert /etc/sysconfig/iptables-configjedoch. Es enthält jedoch keine Firewalls-Regeln wie in der iptablesvorherigen Datei.
Kentgrav
2
Ich stellte fest, dass die Datei bei einer Standardinstallation mit minimaler Installation nicht vorhanden war. CentOS 7 installiert iptables.service anscheinend nicht standardmäßig. "yum install -y iptables.service" hat den Dienst installiert und eine Standarddatei / etc / sysconfig / iptables für mich erstellt.
RichieACC
3
Das sollte "yum install iptables-services" sein
Qris