
Ich versuche, eine Intranetanwendung von einem Server mit Ubuntu 18.04 in unserem lokalen Netzwerk bereitzustellen
Die Anwendung ist in geschrieben und ich habe sie mit dem Befehl Flask
bereitgestelltgunicorn
me@appserver:~$ authbind gunicorn -w 4 -b 127.0.0.1:80 app:app
Durch SSH mit Display-Port-Weiterleitung auf den Server kann ich die App mit Firefox öffnen und problemlos damit interagieren. Wenn ich es jedoch von einem anderen Computer im Subnetz aus versuche, wird die Verbindung abgelehnt.
Ich kann mich per Telnet auf Port 22 einloggen, d.h.
me@clientmachine:~$ telnet 123.45.67.89 22
Trying 123.45.67.89...
Connected to 123.45.67.89.
aber ich bekomme eine Verbindung abgelehnt auf Port 80
me@clientmachine:~$ telnet 123.45.67.89 80
Trying 123.45.67.89...
telnet: Unable to connect to remote host: Connection refused
Ich habe die Firewall mit ufw
dem Befehl konfiguriert.
me@appserver:~$ sudo ufw allow 80
das gibt mir
me@appserver:~$ sudo ufw status
Status: active
To Action From
-- ------ ----
80 ALLOW Anywhere
80/tcp ALLOW Anywhere
22/tcp ALLOW Anywhere
80/udp ALLOW Anywhere
80 (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
80/udp (v6) ALLOW Anywhere (v6)
Ich bestätigte dies auch mit
me@appserver:~$ netstat -an | grep :80
tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN
me@appserver:~$ lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gunicorn 1818 me 5u IPv4 31215 0t0 TCP localhost:http (LISTEN)
gunicorn 1822 me 5u IPv4 31215 0t0 TCP localhost:http (LISTEN)
gunicorn 1823 me 5u IPv4 31215 0t0 TCP localhost:http (LISTEN)
gunicorn 1824 me 5u IPv4 31215 0t0 TCP localhost:http (LISTEN)
gunicorn 1825 me 5u IPv4 31215 0t0 TCP localhost:http (LISTEN)
Und
me@appserver:~$ sudo iptables -L -n | grep :80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:80
Wenn Sie es jedoch nmap
vom Client aus ausführen, wird 80 angezeigt, aber es heißt, dass es geschlossen ist
me@clientmachine:~$ nmap 123.45.67.89
Starting Nmap 7.01 ( https://nmap.org ) at 2019-07-24 16:41 AEST
Nmap scan report for appserver.myuni.edu (123.45.67.89)
Host is up (0.00041s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp closed http
Irgendeine Idee, warum das so ist und wie man es beheben kann? Kann so etwas durch Einstellungen im Subnetz verwaltet werden, die vom Netzwerkadministrator verwaltet werden?
Antwort1
Die Meldung Connection refused
lässt darauf schließen, dass auf diesem Port nichts lauscht, der Port ist geschlossen. Wenn die Firewall den Zugriff verhindern würde, würden Sie eine Meldung über ein Timeout erhalten.
Das Problem besteht darin, dass Sie Ihre Anwendung so gestartet haben, dass sie nur auf der Loopback-Schnittstelle lauscht 127.0.0.1
. Sie ist also nur auf dieser Schnittstelle verfügbar, was Ihre netstat
Ausgabe bestätigt. Wenn Sie sie auf der externen Schnittstelle verfügbar machen möchten, müssen Sie diese IP beim Start angeben oder 0.0.0.0
alle Schnittstellen zulassen.
me@appserver:~$ authbind gunicorn -w 4 -b 123.45.67.89:80 app:app