Я пытаюсь обслуживать приложение интрасети с сервера под управлением Ubuntu 18.04 в нашей локальной сети
Приложение написано на Flask
, и я развернул его, используя gunicorn
с помощью команды
me@appserver:~$ authbind gunicorn -w 4 -b 127.0.0.1:80 app:app
SSHing на сервер с переадресацией порта отображения. Я могу открыть приложение с помощью 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
Есть идеи, почему это может быть и как это исправить? Можно ли управлять такими вещами с помощью настроек в подсети, которыми управляет сетевой администратор?
Сообщение В соединении отказано
предполагает, что на этом порту ничего не прослушивает, порт закрыт.Если брандмауэр будет препятствовать доступу, вы получите сообщение о тайм-ауте.
Проблема в том, что вы запустили приложение для прослушивания только интерфейса обратной петли 127.0.0.1
. Таким образом, он доступен только на том интерфейсе, что подтверждается выводом netstat
. Если вы хотите сделать его доступным на внешнем интерфейсе, вы должны указать этот IP-адрес при запуске или 0.0.0.0
, чтобы разрешить все интерфейсы.
me@appserver:~$ authbind gunicorn -w 4 -b 123.45.67.89:80 app:app