
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.conf
und 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 ACCEPT
iptables 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-save
Ausgabe zeigt diese zusätzlichen Informationen für Regel 3, die nicht mit angezeigt werden iptables -L
:
Aus iptables -L
der Ausgabe könnte man schließen, dassalleVerkehr wird akzeptiert:
ACCEPT all -- anywhere anywhere
sondern iptables-save
zeigt:
-A INPUT -i lo -j ACCEPT
Das bedeutet, dass iptables
zwar 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 ACCEPT
und 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