web-dev-qa-db-ja.com

ポート80で実行されているgunicorn / Flaskアプリにアクセスするためにubuntuサーバーのファイアウォールを開く

ローカルネットワーク上でUbuntu18.04を実行しているサーバーからイントラネットアプリケーションを提供しようとしています

アプリケーションはFlaskで記述されており、コマンドでgunicornを使用してデプロイしました

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

ディスプレイポートフォワーディングを使用してサーバーにSSH接続するFirefoxを使用してアプリを開き、問題なく操作できます。ただし、サブネット上の別のマシンから試行すると、接続が拒否されます。

ポート22にtelnetで接続できます。

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

これがなぜなのか、そしてそれをどのように修正するのか、何か考えはありますか?このようなことは、ネットワーク管理者が管理するサブネットの設定で管理できますか?

2
Tom Close

メッセージ 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
1