Wie kann ich iptables auf centos 7 verwenden? [geschlossen]


154

Ich habe CentOS 7 mit minimaler Konfiguration installiert (OS + Dev Tools). Ich versuche, den 80-Port für den httpdDienst zu öffnen , aber mit meinem iptables-Dienst stimmt etwas nicht ... was ist daran falsch? Was mache ich falsch?

# ifconfig/sbin/service iptables save
bash: ifconfig/sbin/service: No such file or directory


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

# sudo service iptables status
Redirecting to /bin/systemctl status  iptables.service
iptables.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

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

# sudo service iptables start
Redirecting to /bin/systemctl start  iptables.service
Failed to issue method call: Unit iptables.service failed to load: No such file or directory.

versuchen Sie diese /etc/init.d/iptables speichern
Satya

8
Ich habe die Antwort hier . RHEL 7 verwendet firewalld instad von iptables
Meiblorn

Antworten:


333

Mit RHEL 7 / CentOS 7 wurde firewalld zur Verwaltung von iptables eingeführt. Meiner Meinung nach eignet sich firewalld eher für Workstations als für Serverumgebungen.

Es ist möglich, zu einem klassischeren Iptables-Setup zurückzukehren. Beenden und maskieren Sie zunächst den Firewall-Dienst:

systemctl stop firewalld
systemctl mask firewalld

Installieren Sie dann das iptables-services-Paket:

yum install iptables-services

Aktivieren Sie den Dienst beim Booten:

systemctl enable iptables

Verwalten des Dienstes

systemctl [stop|start|restart] iptables

Das Speichern Ihrer Firewall-Regeln kann wie folgt erfolgen:

service iptables save

oder

/usr/libexec/iptables/iptables.init save

5
Es speichert nicht die iptables. Beim Neustart des Servers gehen alle Änderungen verloren.
Roosevelt

2
Auf meinem System werden die iptables korrekt gespeichert. Haben Sie sichergestellt, dass der iptables-Dienst beim Booten gestartet wird? Sie können dies tun, indem Sie 'systemctl enable iptables'
ausführen

1
Möglicherweise wird auch eine Firewall ausgeführt, die der Liste zusätzliche iptables-Regeln hinzufügt (jedes Mal, wenn Sie das System neu starten). Um die Firewall zu stoppen, führen Sie "systemctl mask firewalld" aus
TroodoN-Mike

Die Informationen zum Maskieren von Firewalld wurden zur Antwort hinzugefügt, wie von @ TroodoN-Mike vorgeschlagen
Sgaduuw

8
@Sgaduuw Können Sie bitte erläutern, warum fitewalld Ihrer Meinung nach nicht / weniger für Server geeignet ist?
Alexander Groß

98

RHEL und CentOS 7 verwenden Firewall-cmd anstelle von iptables . Sie sollten diese Art von Befehl verwenden:

# add ssh port as permanent opened port
firewall-cmd --zone=public --add-port=22/tcp --permanent

Anschließend können Sie Regeln neu laden, um sicherzustellen, dass alles in Ordnung ist

firewall-cmd --reload

Dies ist besser als die Verwendung von iptable-save, insbesondere wenn Sie lxc- oder Docker-Container verwenden möchten. Durch das Starten der Docker-Dienste werden einige Regeln hinzugefügt, die der Befehl iptable-save auffordert. Wenn Sie das Ergebnis speichern, haben Sie viele Regeln, die NICHT gespeichert werden sollten. Weil Docker-Container ihre IP-Adressen beim nächsten Neustart ändern können.

Firewall-cmd mit permanenter Option ist dafür besser geeignet.

Überprüfen Sie "man firewall-cmd" oder die offiziellen Firewalld-Dokumente , um Optionen . Es gibt viele Optionen, um Zonen, Konfiguration und Funktionsweise zu überprüfen. Die Manpage ist wirklich vollständig.

Ich empfehle dringend, den iptables-Service seit Centos 7 nicht mehr zu verwenden


1
Tolle Erklärung - hat perfekt für mich funktioniert. Vielen Dank!
Digitalformula

1
firewall-cmd --reload funktioniert nicht. Ich musste mit "systemctl restart firewalld" neu starten, damit die Änderungen wirksam wurden.
Basil Musa

"Da Firewalld dynamisch ist, können Änderungen an seiner Konfiguration jederzeit vorgenommen und sofort implementiert werden. Kein Teil der Firewall muss neu geladen werden, sodass vorhandene Netzwerkverbindungen nicht unbeabsichtigt unterbrochen werden" - aus den offiziellen Firewalld-Dokumenten
Yicone

Effizient und sauber. Vielen Dank
Vaibhav

17

Ich hatte das Problem, dass ein Neustart iptables nicht starten würde.

Dies hat es behoben:

yum install iptables-services
systemctl mask firewalld
systemctl enable iptables
systemctl enable ip6tables
systemctl stop firewalld
systemctl start iptables
systemctl start ip6tables

Auf CentOS 7 funktioniert nicht: # systemctl start iptablesgibt Failed to start iptables.service: Unit not found.und # systemctl start ip6tablesgibtFailed to start ip6tables.service: Unit not found.
PKHunter


5

Ich habe die /etc/sysconfig/ip6tables-configDatei geändert :

IP6TABLES_SAVE_ON_STOP="no"

Zu:

IP6TABLES_SAVE_ON_STOP="yes"

Und das:

IP6TABLES_SAVE_ON_RESTART="no"

Zu:

IP6TABLES_SAVE_ON_RESTART="yes"

Dies schien die Änderungen zu speichern, die ich mit den Befehlen iptables durch einen Neustart vorgenommen hatte.


1

Fügen Sie die IPtables-Konfiguration in die herkömmliche Datei ein und sie wird nach dem Start geladen:

/ etc / sysconfig / iptables


1

Letzten Monat habe ich versucht, iptables auf einem LXC VM-Container zu konfigurieren, aber jedes Mal nach dem Neustart wurde die iptables-Konfiguration nicht automatisch geladen.

Die einzige Möglichkeit für mich, es zum Laufen zu bringen, bestand darin, den folgenden Befehl auszuführen:

yum -y installiere iptables-services; systemctl firewalld deaktivieren; systemctl mask firewalld; Service Iptables neu starten; Service Iptables speichern


0

Und um hinzuzufügen, sollten Sie in der Lage sein, dasselbe für ip6tables zu tun, nachdem Sie den systemctl mask firewalldBefehl ausgeführt haben:

    systemctl start ip6tables.service
    systemctl enable ip6tables.service

0

Wenn Sie dies tun und fail2ban verwenden, müssen Sie die richtigen Filter / Aktionen aktivieren:

Fügen Sie die folgenden Zeilen ein /etc/fail2ban/jail.d/sshd.local

[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/secure
maxretry = 5
bantime = 86400

Aktivieren und starten Sie fail2ban:

systemctl enable fail2ban
systemctl start fail2ban

Referenz: http://blog.iopsl.com/fail2ban-on-centos-7-to-protect-ssh-part-ii/

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.