Arch LinuxのインストールにApacheサーバーを設定しようとしています。本機にはパブリックIPアドレスを使用したイーサネット接続があります。外部コンピュータから何度も接続しようとしましたが、動作しませんでした。その後、ApacheでSSLを設定して接続できました。
テストのために次のように単純なhttpサーバーを起動するとき
$ sudo python3 -m http.server <port_here> --bind <public_ip_here>
他のコンピュータから正常に任意のポートに接続できますとは別に80. それはできません。ポート443でも動作します。
ポート80がブロックされる理由と、この問題を解決する方法を知りたいです。
ベストアンサー1
次のコマンドを実行して、トラフィックが実際にシステムに入っていることを確認できます。
# iptables -I INPUT -p TCP --dport 80 -j LOG
# iptables -I INPUT -p TCP --dport 80 -j ACCEPT
-j LOG
一致するトラフィックの履歴はメッセージログに送信されますが、ファイアウォールは引き続きルールを処理します。 2番目のルールは、ACCEPT
すべてのポート80トラフィックに明示的なルールを設定します。これにより、ファイアウォールのボトルネックが解消されます。パケットカウンタ(出力の左側にある2つの数値列iptables -nvL
)が上がると、ルールが一致することがわかり、メッセージを見て、トラフィックの着信方法に異常があるかどうかを確認できます(NATなど)。
netstat -tlpn
または、実行してlsof -i tcp:80
デーモンが現在ネットワークに接続できるIPを受信していることを確認することもできます。たとえば、
[root@xxx01 ~]# lsof -i tcp:42499
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 12659 puppet 10u IPv4 37071710 0t0 TCP localhost:42499 (LISTEN)
ポート42499でリッスンして127.0.0.1()にバインドするRubyスクリプトがあるため、パブリックlocalhost:42499
IPアドレスを指定するすべてのエントリがこのデーモンに到達しないことを示します。比較:
[root@xxx01 ~]# lsof -Pi tcp:80 | head -3
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 2247 root 4u IPv6 12264 0t0 TCP *:80 (LISTEN)
httpd 7376 apache 4u IPv6 12264 0t0 TCP *:80 (LISTEN)
アスタリスクは、利用可能なすべてのIPアドレス(ネットワークに接続できるIPアドレスを含む)を受信していることを意味します。