Ich habe einen CentOS-Server auf rackspace gebootet und yum install httpd
'd ausgeführt. Dann services httpd start
. Also nur die Barebones.
Ich kann seine IP-Adresse aus der Ferne über ssh (22) erreichen, kein Problem, also gibt es kein Problem mit dem DNS oder irgendetwas (denke ich ...), aber wenn ich versuche, mich auf Port 80 (über einen Browser oder etwas) zu verbinden, bekomme ich Verbindung abgelehnt.
Von localhost kann ich jedoch telnet (80) oder sogar lynx auf sich selbst anwenden und mit keinem Problem bedient werden. Von draußen (mein Haus, meine Schule, ein lokales Café usw.) verbindet sich telnet mit 22, aber nicht mit 80.
Ich benutze netstat -tulpn
(<- Ich werde nicht lügen, ich verstehe den -tulpn
-Teil nicht, aber das hat mir das Internet befohlen ...) und zu sehen
tcp 0 0 :::80 :::* LISTEN -
wie ich glaube ich sollte. Der httpd.conf
sagt Listen 80
.
Ich habe services httpd restart
oft.
Ehrlich gesagt habe ich keine Ahnung, was ich tun soll. Es gibt KEINE Möglichkeit, dass Rackspace eine Firewall für eingehende Anforderungen von Port 80 hat. Ich habe das Gefühl, dass mir etwas Dummes fehlt, aber ich habe jetzt zweimal einen Barebones-Server hochgefahren und habe das absolute Minimum dafür gebraucht, um diese Funktionsweise zu erhalten.
Jede Hilfe wird sehr geschätzt! (Und Entschuldigung für den langatmigen Beitrag ...)
Edit Ich wurde gebeten, die Ausgabe von iptables -L
zu posten. Hier ist es also:
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
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
Falls noch nicht gelöst. Ihre iptables sagen:
zustand BEZIEHT, ERSTELLT
Das bedeutet, dass nur Verbindungen, die bereits hergestellt wurden, weitergeleitet werden können. Dann können Sie in den nächsten Regeln Ausnahmen davon sehen:
state NEW tcp dpt:ssh
Was nur für ssh zählt, sollten Sie eine ähnliche Regel/Zeile für http hinzufügen, die Sie folgendermaßen tun können:
state NEW tcp dpt:80
Was kannst du so machen:
Sudo iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
(In diesem Fall wähle ich die neue Regel in der vierten Zeile.)
Denken Sie daran, dass Sie die Datei nach dem Bearbeiten so speichern sollten:
Sudo /etc/init.d/iptables save
CentOS 7 verwendet jetzt standardmäßig firewalld. Alle Antworten konzentrieren sich jedoch auf iptables. Ich wollte also eine Antwort zu firewalld hinzufügen.
Da firewalld ein "Wrapper" für iptables ist, scheint die Antwort von antonio-fornie immer noch zu funktionieren, aber ich konnte diese neue Regel nicht "speichern". Daher konnte ich nach dem Neustart der Firewall keine Verbindung zu meinem Apache-Server herstellen. Glücklicherweise ist es viel einfacher, mit den Firewalld-Befehlen eine entsprechende Änderung vorzunehmen. Prüfen Sie zunächst, ob Firewalld ausgeführt wird:
firewall-cmd --state
Wenn es läuft, ist die Antwort einfach eine Zeile mit der Angabe "running".
So erlauben Sie HTTP-Verbindungen (Port 80) vorübergehend in der öffentlichen Zone:
Sudo firewall-cmd --zone=public --add-service=http
Das Obige wird nicht "gespeichert". Beim nächsten Neustart des Firewalld-Dienstes werden die Standardregeln wiederhergestellt. Sie sollten diese temporäre Regel verwenden, um zu testen, ob das Verbindungsproblem gelöst ist, bevor Sie fortfahren.
So lassen Sie HTTP-Verbindungen dauerhaft in der öffentlichen Zone zu:
Sudo firewall-cmd --zone=public --permanent --add-service=http
Wenn Sie den Befehl "permanent" ausführen, ohne auch den Befehl "temporär" auszuführen, müssen Sie firewalld neu starten, um die neuen Standardregeln zu erhalten (dies kann bei Nicht-CentOS-Systemen anders sein):
Sudo systemctl restart firewalld.service
Wenn dies Ihre Verbindungsprobleme nicht gelöst hat, liegt dies möglicherweise daran, dass sich Ihre Schnittstelle nicht in der "öffentlichen Zone" befindet. Der folgende Link ist eine großartige Ressource, um mehr über Firewall zu erfahren. Es wird detailliert beschrieben, wie Sie Zonen überprüfen, zuweisen und konfigurieren: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall- using-firewalld-on-centos -7
SELinux verhindert standardmäßig, dass Apache (und damit alle Apache-Module) Remoteverbindungen herstellen.
# setsebool -P httpd_can_network_connect=1
Versuchen Sie es mit der folgenden Einstellung in der Tabelle iptables.config
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Führen Sie den folgenden Befehl aus, um den iptable-Dienst neu zu starten
service iptables restart
Ändern Sie die Datei httpd.config in
Listen 192.170.2.1:80
starten Sie den Apache neu.
Versuche es jetzt.
Wenn Sie RHEL/CentOS 7 verwenden (das OP war nicht, aber ich dachte, ich würde die Lösung für meinen Fall freigeben), müssen Sie anstelle des in anderen Antworten genannten iptables-Dienstes firewalld verwenden.
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
Und dann prüfen, ob es läuft mit:
firewall-cmd --permanent --zone=public --list-all
Es sollte 80/tcp
unter ports
auflisten.
das hat uns geholfen, den Apache von außen zugänglich zu machen:
Sudo iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
Sudo service iptables restart
Suchen Sie in den Apache-Konfigurationsdateien nach der LISTEN-Direktive (httpd.conf, Apache2.conf, listen.conf, ...). Wenn Sie localhost oder 127.0.0.1 sehen, müssen Sie diese mit Ihrer öffentlichen IP-Adresse überschreiben.
Versuchen Sie, iptables zu deaktivieren: Dienst iptables wird angehalten
Wenn dies funktioniert, aktivieren Sie TCP Port 80 für Ihre Firewall-Regeln: Führen Sie system-config-selinux vom Stammverzeichnis aus aus und aktivieren Sie TCP Port 80 (HTTP) in Ihrer Firewall.
das würde funktionieren: -- für REDHAT use: cat "/ etc/sysconfig/iptables"
iptables -I RH-Firewall-1-INPUT -s 192.168.1.3 -p tcp -m tcp --dport 80 -j ACCEPT
gefolgt von
Sudo /etc/init.d/iptables save
Stellen Sie Apache so ein, dass eine Liste auf eine bestimmte Schnittstelle gesetzt wird, und portieren Sie etwa Folgendes:
Listen 192.170.2.1:80
Suchen Sie auch nach Iptables- und TCP - Wrapper-Einträgen, die möglicherweise auf dem Host durch externe Hosts beeinträchtigt werden, die auf diesen Port zugreifen