Wie kann ich den iptables-Dienst nach dem Neustart unter CenOS / RHEL7 automatisch starten lassen?

8

Ich habe einige Probleme mit einem neu installierten Heimserver, den ich vorbereite. Ich habe CentOS7 darauf installiert und festgestellt, dass Port 80 und 443 standardmäßig deaktiviert sind. Ich habe sie daher mit den folgenden Befehlen zu den iptables hinzugefügt:

iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
service iptables save

Ich habe auch den iptable-Dienst installiert, der nicht vorhanden war. Das Problem ist, dass bei jedem Neustart des Computers die neuen Konfigurationen gelöscht werden.

Ich habe versucht, den iptable-Dienst zu chkconfig hinzuzufügen, erhalte jedoch die folgende Fehlermeldung:

[root@CentOS-7]# chkconfig --add iptables
error reading information on service iptables: No such file or directory

Ich nehme an, dass der Grund, warum ich diesen Fehler erhalte, darin besteht, dass es in /etc/init.d/ kein iptable-Skript gibt, aber jemand irgendwelche Ideen hat, ob ich tatsächlich das Richtige tue und / oder ob es einen einfacheren, solideren Weg gibt diese? Wenn nicht, wie kann ich dieses Problem lösen? Am Ende muss ich nur meinen Heimserver als Web- / Mailserver verwenden ...

Ich habe auch versucht, den Befehl 'systemctl enable iptables' zu verwenden, wie es Flemingovirus freundlicherweise vorgeschlagen hat, aber ohne Erfolg. Nachdem ich den Befehl eingegeben hatte, erhielt ich die folgende Ausgabe:

ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants`/iptables.service'`

UPDATE: Ich habe mir die iptables angesehen und der Befehl "service iptables save" hat ordnungsgemäß funktioniert. Das Problem scheint darauf zurückzuführen zu sein, dass der Dienst beim Neustart nicht gestartet wird. Ich habe es geschafft, den Dienst beim Neustart zum Laufen zu bringen, nachdem ich die folgende Zeile zu /etc/rc.local hinzugefügt habe

systemctl start  iptables.service

Ich frage mich jedoch, warum der Befehl 'systemctl enable iptables' in diesem Fall nicht funktioniert. Vermisse ich etwas Vielen Dank

Dave
quelle

Antworten:

6

Obwohl diese Frage alt ist, bin ich auf dasselbe Problem gestoßen und habe hier die Lösung gefunden .

systemctl mask firewalld
systemctl stop firewalld

Grundsätzlich widerspricht die Firewall iptables und verhindert so das Laden von iptables:

# cat /usr/lib/systemd/system/firewalld.service 
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network.target
Before=libvirtd.service
Before=NetworkManager.service
Conflicts=iptables.service ip6tables.service ebtables.service

...

Ich konnte dieses Problem lösen, indem ich firewalld maskierte, um sicherzustellen, dass es nicht automatisch startet und danach nie mehr gestartet wird. Natürlich müssen Sie sicherstellen, dass iptables aktiviert ist:

systemctl enable iptables
Zanegray
quelle
4

Init-Skripte sind weg. Jetzt ist es systemctl. Es ist in allen CentOS7-Dokumenten enthalten. Um ipatables zu chkconfigieren oder den iptables-Dienst beim Start zu starten, müssen Sie Folgendes verwenden: -

systemctl enable iptables

Sie sollten einfache Informationen zu systemctl in den Cyberciti-Dokumenten zu iptables lesen .

Flemingovirus
quelle
Hallo Flemingovirus, ich habe versucht, was Sie vorgeschlagen haben, und habe mir auch den Link angesehen, aber er funktioniert immer noch nicht. Irgendwelche Ideen? danke
Dave
@ Dave hast du überprüft, wo die iptables sind? Ist es / sbin / iptables selbst? dpkg -L iptables
Probieren
[root @ CentOS-7} # rpm -ql iptables-services.x86_64 / etc / sysconfig / ip6tables / etc / sysconfig / iptables /usr/lib/systemd/system/ip6tables.service / usr / lib / systemd / system / iptables .service / usr / libexec / initscripts / Legacy-Aktionen / ip6tables / usr / libexec / initscripts / Legacy-Aktionen / ip6tables / Panik / usr / libexec / initscripts / Legacy-Aktionen / ip6tables / save / usr / libexec / initscripts / Legacy -actions / iptables / usr / libexec / initscripts / Legacy-Aktionen / iptables / Panic / usr / libexec / initscripts / Legacy-Aktionen / iptables / save / usr / libexec / iptables /usr/libexec/iptables/ip6tables.init / usr /libexec/iptables/iptables.init
Dave
Da es kein dpkg gibt, habe ich stattdessen rpm verwendet. Ist diese Ausgabe sinnvoll? danke
Dave
1
@ Dave die Ausgabe von systemctl sagt, dass es für den Start gestellt wurde. Überprüfen Sie mit einem Neustart.
Flemingovirus
0

Zunächst sollten Sie versuchen, #chkconfig --add /sbin/iptablesdies erkennt die "iptables". Dann sollten Sie ein Skript für Ihre iptables-Konfiguration erstellen und dieses Skript dann starten, um beim Booten zu starten. Erstellen Sie ein Skript:

#!/bin/bash
#
iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/service iptables save

und nenne es zum Beispiel myfirewall. Machen Sie es ausführbar mit chmod +x myfirewallund schreiben Sie dies ./myfirewallein /etc/rc.local, um das Skript beim Booten zu starten.

amir jj
quelle
Vielen Dank, aber ich erhalte die folgende Fehlermeldung: "Fehler beim Lesen von Informationen zu Service-Iptables: Keine solche Datei oder kein solches Verzeichnis" Außerdem scheint es mir eine sehr komplizierte Möglichkeit zu sein, dies zu tun. Gibt es keine andere Möglichkeit, dies in CentOS zu implementieren? Am Ende versuche ich nur, es als Standard-Web- / Mailserver zu verwenden. Wie kann man einen Webserver verwenden, wenn Port 80 und 443 nicht standardmäßig geöffnet sind? Mache ich etwas falsch?
Dave
iptables ist in Centos eingebaut. Ich denke, Sie hatten ein Problem bei der Installation. Bitte versuchen Sie, $sudo service iptables statusdie Ausgabe in einen Kommentar zu schreiben.
Amir JJ