
Я пытаюсь обслуживать интрасетевое приложение с сервера под управлением 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