Abrir el firewall del servidor Ubuntu para acceder a la aplicación Gunicorn/Flask que se ejecuta en el puerto 80

Abrir el firewall del servidor Ubuntu para acceder a la aplicación Gunicorn/Flask que se ejecuta en el puerto 80

Estoy intentando ofrecer una aplicación de intranet desde un servidor que ejecuta Ubuntu 18.04 en nuestra red local.

La aplicación está escrita Flasky la he implementado usando gunicornel comando

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

Al ingresar SSH al servidor con reenvío de puerto de pantalla, puedo abrir la aplicación usando Firefox e interactuar con ella sin problemas. Sin embargo, cuando lo intento desde otra máquina en la subred, se rechaza la conexión.

Puedo hacer telnet al puerto 22, ¿vale?

me@clientmachine:~$ telnet 123.45.67.89 22
Trying 123.45.67.89...
Connected to 123.45.67.89.

pero me sale una conexión rechazada en el puerto 80

me@clientmachine:~$ telnet 123.45.67.89 80
Trying 123.45.67.89...
telnet: Unable to connect to remote host: Connection refused

He configurado el firewall usando ufwel comando

me@appserver:~$ sudo ufw allow 80

lo que me da

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)

También lo confirmé con

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)

y

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

Sin embargo, al ejecutar nmapdesde el cliente se muestra 80 pero dice que está cerrado.

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

¿Alguna idea de por qué sería esto y cómo solucionarlo? ¿Se pueden gestionar este tipo de cosas mediante la configuración de la subred gestionada por el administrador de la red?

Respuesta1

El mensaje Connection refusedsugiere que no hay nada escuchando en ese puerto, el puerto está cerrado. Si el firewall estuviera impidiendo el acceso, recibiría un mensaje sobre el tiempo de espera.

El problema es que inició su aplicación para escuchar solo en la interfaz loopback 127.0.0.1. Por lo tanto, solo está disponible en esa interfaz, lo que netstatconfirma su resultado. Si desea que esté disponible en la interfaz externa, debe proporcionar esa IP al inicio o 0.0.0.0permitir todas las interfaces.

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

información relacionada