Apache サーバーがポート 80 をリッスンしていません

Apache サーバーがポート 80 をリッスンしていません

私のワークステーションとサーバーは両方とも同じ LAN セグメント上にあり、相互に ping を実行できます (また、ワークステーションからサーバーに問題なく ssh で接続できます)。

CentOS 7 に Apache をデフォルトインストールしました。

サービスを開始しましたが、ワークステーションから Web サーバーを参照できません。

nmap レポート ポート 80 はフィルタリングされます。

サーバーで SELinux を無効にしましたが、ポートはまだフィルタリングされています。

netstat -l の結果は次のとおりです:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
tcp6       0      0 [::]:http               [::]:*                  LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN
raw6       0      0 [::]:ipv6-icmp          [::]:*                  7

奇妙なことに、netstat -na はポート 80 がリッスン中であると表示しますが、これは IPv6 の場合です (ただし、どこかで読んだところによると、これは必ずしも IPv4 でもリッスンしていないことを意味するわけではありません)。

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0     64 10.1.1.1:22             10.2.2.2:44939        ESTABLISHED
tcp6       0      0 :::80                   :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
raw6       0      0 :::58                   :::*                    7

以下は私の /etc/httpd/conf/httpd.conf の関連部分です(変更していません)

<Directory />
    AllowOverride none
    Require all denied
</Directory>

<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

<Directory "/var/www/html">

    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<Files ".ht*">
    Require all denied
</Files>

サービスは正常に動作しているようです:

httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: active (running) since Fri 2015-10-02 08:36:40 EDT; 1h 27min ago
  Process: 23294 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
 Main PID: 23302 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─23302 /usr/sbin/httpd -DFOREGROUND
           ├─23303 /usr/sbin/httpd -DFOREGROUND
           ├─23304 /usr/sbin/httpd -DFOREGROUND
           ├─23305 /usr/sbin/httpd -DFOREGROUND
           ├─23306 /usr/sbin/httpd -DFOREGROUND
           └─23307 /usr/sbin/httpd -DFOREGROUND

なぜポート 80 でリッスンしないのですか?

答え1

Michael Hampton さんがあなたの投稿にコメントしたように、ファイアウォール (iptables) がトラフィックをブロックしていると思われます。

無効にするか ( systemctl disable firewalld)、ポート 80 のトラフィックを許可するように指示します ( firewall-cmd --zone=public --add-port=80/tcp --permanent)。

答え2

ポート 80 がフィルタリングされているかどうかは、netstat 出力には関係ありません。iptables がそのポートへの接続をブロック (DROP または REJECT) するように設定されている場合でも、Apache がポート 80 をリッスンしていることがわかります。

重要なのは、httpd が IPv4 と IPv6 の両方の ANY アドレス (0.0.0.0 と ::) をリッスンするように設定されており、その場合、netstat は IPv6 のものだけを表示することです。説明は次のとおりです。

https://bugs.launchpad.net/ubuntu/+source/net-tools/+bug/657270

つまり、その場合、IPv6 接続は両方のプロトコルに対応できるため、1 つのソケットのみが開かれます。また、1 つのソケットのみが開かれているため、netstat 出力には 1 つのソケットのみが表示されます。

答え3

iptables ルール ( iptables-save) を確認し、ポート 80 が許可されているかどうかを確認します。

service iptables stopテスト目的では、または を実行できますiptables -F

関連情報