打开 ubuntu 服务器的防火墙以访问在端口 80 上运行的 gunicorn/Flask 应用程序

打开 ubuntu 服务器的防火墙以访问在端口 80 上运行的 gunicorn/Flask 应用程序

我正在尝试从运行 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表明该端口上没有任何内容正在监听,端口已关闭。如果防火墙阻止访问,您将收到有关超时的消息。

问题是您启动应用程序时只监听环回接口127.0.0.1。因此它只在该接口上可用,您的netstat输出证实了这一点。如果您想让它在外部接口上可用,您必须在启动时提供该 IP,或者0.0.0.0允许所有接口。

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

相关内容