Öffnen der Firewall des Ubuntu-Servers, um auf die auf Port 80 ausgeführte Gunicorn/Flask-App zuzugreifen

Öffnen der Firewall des Ubuntu-Servers, um auf die auf Port 80 ausgeführte Gunicorn/Flask-App zuzugreifen

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 Flaskbereitgestelltgunicorn

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 ufwdem 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 nmapvom 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 refusedlä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 netstatAusgabe 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.0alle Schnittstellen zulassen.

me@appserver:~$ authbind gunicorn -w 4 -b 123.45.67.89:80 app:app

verwandte Informationen