CentOS 6 - iptables verhindert Webzugriff über Port 80

CentOS 6 - iptables verhindert Webzugriff über Port 80

Ich richte einen neuen Webserver mit CentOS 6.2 ein und kann keine Verbindung über das Internet herstellen. Alles scheint richtig eingerichtet zu sein httpd.confund Apache läuft, daher gehe ich davon aus, dass es sich um ein iptables-Problem handelt.

Ist im Folgenden etwas aufgeführt, das das Problem verursachen könnte?

EDIT: Wenn ich iptables stoppe, kann ich mich problemlos verbinden, also muss im Folgenden etwas optimiert werden. Ich habe iptables -A INPUT -p tcp --dport 80 -j ACCEPTiptables bereits ausgeführt, gespeichert und neu gestartet, aber es hat keinen Unterschied gemacht

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Folgender Ratschlag findet sich in der Antwort weiter unten:

[root@staging ~]# iptables -N TCP
[root@staging ~]# iptables -A TCP -p tcp --dport 80 -j ACCEPT
[root@staging ~]# iptables-save > /etc/iptables/iptables.rules
-bash: /etc/iptables/iptables.rules: No such file or directory
[root@staging ~]# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov  8 14:09:09 2012
*filter
:INPUT ACCEPT [91:7480]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [70:6556]
:TCP - [0:0]
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
# Completed on Thu Nov  8 14:09:09 2012
[root@staging ~]# iptables-restore
^C
[root@staging ~]# service iptables start
iptables: Applying firewall rules:                         [  OK  ]

Weitere Bearbeitung: iptables-save hat nichts angezeigt, als ich es ausgeführt habe, nachdem ich iptables gestoppt hatte! Hier ist also die Ausgabe:

# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov  8 14:39:10 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [28:3344]
-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 INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov  8 14:39:10 2012

Antwort1

Die iptables-saveAusgabe zeigt diese zusätzlichen Informationen für Regel 3, die nicht mit angezeigt werden iptables -L:

Aus iptables -Lder Ausgabe könnte man schließen, dassalleVerkehr wird akzeptiert:

ACCEPT     all  --  anywhere             anywhere

sondern iptables-savezeigt:

-A INPUT -i lo -j ACCEPT

Das bedeutet, dass iptableszwar der gesamte Datenverkehr akzeptiert wird, jedoch nur von der Loopback-Schnittstelle ( lo).

Und das ist der Grund, warum HTTP-Verkehr Ihren Webserver nie erreicht: Zulässig sind nur etablierte Verbindungen in Regel 1, ICMP (z. B. ping) in Regel 2: -A INPUT -p icmp -j ACCEPTund SSH in Regel 4 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT:.

Dann wird in Regel 5 alles abgelehnt: -A INPUT -j REJECT --reject-with icmp-host-prohibited.

Das heißt, der gesamte HTTP-Verkehr wird abgelehnt, bevor Regel 6 erreicht wird:-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Korrigierenes streicht Regel 6 ( -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT):

iptables -D INPUT 6

und fügen Sie es (Option -I) als Regel 5 ein:

iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT

oder importieren Sie dies:

# Generated by iptables-save v1.4.6 on Thu Nov  8 16:46:28 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [40:5423]
-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 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov  8 16:46:28 2012

indem Sie es in einer Datei speichern und ausführen iptables-restore < file.

EDIT: Dem OP ist aufgefallen, dass die neuen Regeln nach dem Neustart verloren gehen iptables.

Wie hier erklärt:http://wiki.centos.org/HowTos/Network/IPTables, jedes Mal, wenn wir die Regeln aktualisieren, müssen wir sie speichern. Führen Sie also Folgendes aus:

# /sbin/service iptables save

um die Änderungen dauerhaft zu machen. Nun werden die geänderten Regeln geladen iptables.

Antwort2

Ich bin kein Meister in Sachen iptables, aber bei meinem Setup verwende ich eine separate benutzerdefinierte Kette zum Öffnen meiner Ports:

iptables -N TCP
iptables -A TCP -p tcp --dport 80 -j ACCEPT

Stellen Sie sicher, dass Sie

iptables-save > /etc/iptables/iptables.rules

Laden

iptables-restore < /etc/iptables/iptables.rules

^^ wenn der Daemon es nicht für Sie lädt. Ich sehe, dass Sie sagten, Sie hätten die oben beschriebene Methode bereits ausgeführt (nur für die INPUT-Kette, die meiner Meinung nach keine Rolle spielt), sodass ich annehmen muss, dass Sie möglicherweise nicht richtig speichern und neu laden. Läuft Ihr iptables-Daemon richtig? Stellen Sie sicher, dass Sie nach dem Ausführen der obigen Befehle und der Verwendung von iptables -L die neu hinzugefügte Kette und Regel sehen.


Als Antwort auf Ihre weiteren Probleme. iptables-save > location_of_rules Ich bin nicht sicher, wo es sich unter CentOS befindet. Überprüfen Sie jedoch mit iptables -L, ob die neue Kette vorhanden ist.

Ich empfehle außerdem, zu überprüfen, ob Ihre Website nicht erreichbar ist. Rufen Sie dazu Ihren Webbrowser (auf dem Computer) auf und geben Sie die URL http://127.0.0.1/ <- Ohne das Leerzeichen zwischen : und // ein. Wenn die Website erreichbar ist, liegt das Problem bei Ihrem Router. Sie müssen eine Portweiterleitung durchführen, um den Port in Ihrer Firewall zu öffnen.http://en.wikipedia.org/wiki/Port_forwarding

verwandte Informationen