Открытие брандмауэра сервера Ubuntu для доступа к приложению gunicorn/Flask, работающему на порту 80

Открытие брандмауэра сервера Ubuntu для доступа к приложению gunicorn/Flask, работающему на порту 80

Я пытаюсь обслуживать интрасетевое приложение с сервера под управлением Ubuntu 18.04 в нашей локальной сети.

Приложение написано Flask, и я развернул его с помощью gunicornкоманды

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

SSH-подключение к серверу с переадресацией порта дисплея позволяет мне открыть приложение с помощью Firefox и взаимодействовать с ним без проблем. Однако, когда я пытаюсь подключиться с другой машины в подсети, соединение отклоняется.

Я могу нормально подключиться по telnet к порту 22, т.е.

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

но я получаю сообщение об отказе в подключении через порт 80

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

Я настроил брандмауэр с помощью ufwкоманды

me@appserver:~$ sudo ufw allow 80

что дает мне

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)

Я также подтвердил это с

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)

и

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

Однако запуск nmapс клиента показывает 80, но говорит, что закрыто

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

Есть идеи, почему это может быть и как это исправить? Можно ли управлять такими вещами с помощью настроек в подсети, которые управляются сетевым администратором?

решение1

Сообщение Connection refusedпредполагает, что на этом порту ничего не прослушивается, порт закрыт. Если бы брандмауэр блокировал доступ, вы бы получили сообщение о тайм-ауте.

Проблема в том, что вы запустили свое приложение для прослушивания только на интерфейсе loopback 127.0.0.1. Поэтому оно доступно только на этом интерфейсе, что netstatподтверждает ваш вывод. Если вы хотите сделать его доступным на внешнем интерфейсе, вам нужно указать этот IP при запуске или 0.0.0.0разрешить все интерфейсы.

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

Связанный контент