it-swarm.com.de

apache akzeptiert keine eingehenden Verbindungen von außerhalb von localhost

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   
54
Phildo

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
107
antonio.fornie

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

14
Josh

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.

3
Raja

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.

2
Matt Pennington

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
1
user4806038

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.

1
Pethical

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.

1
dAm2K

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
1
Mr.T

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

Binding Docs für Apache

0
nsfyn55