Ubuntu

打開 ubuntu 伺服器的防火牆以訪問執行在埠 80 上的 gunicorn/Flask 應用程序

  • July 24, 2019

我正在嘗試從我們本地網路上執行 Ubuntu 18.04 的伺服器提供 Intranet 應用程序

該應用程序是編寫的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我已經使用with 命令配置了防火牆

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

知道為什麼會這樣以及如何解決嗎?這種事情可以通過網路管理員管理的子網上的設置來管理嗎?

該消息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

引用自:https://serverfault.com/questions/976465