
ローカルネットワーク上のUbuntu 18.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
なぜこのようなことが起こるのか、またそれを修正するにはどうしたらよいのか、ご存知ですか? このような問題は、ネットワーク管理者が管理するサブネットの設定によって管理できますか?
答え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