
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 Flask
y la he implementado usando gunicorn
el 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 ufw
el 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 nmap
desde 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 refused
sugiere 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 netstat
confirma su resultado. Si desea que esté disponible en la interfaz externa, debe proporcionar esa IP al inicio o 0.0.0.0
permitir todas las interfaces.
me@appserver:~$ authbind gunicorn -w 4 -b 123.45.67.89:80 app:app