web-dev-qa-db-ja.com

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でリッスンしないのはなぜですか?

2
red888

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

無効にする(systemctl disable firewalld)、またはポート80(firewall-cmd --zone=public --add-port=80/tcp --permanent)。

2
GregL

ポート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/65727

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

3
SimoneLazzaris