Ubuntu
打開 ubuntu 伺服器的防火牆以訪問執行在埠 80 上的 gunicorn/Flask 應用程序
我正在嘗試從我們本地網路上執行 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