아파치 서버가 포트 80에서 수신 대기하지 않습니다.

아파치 서버가 포트 80에서 수신 대기하지 않습니다.

내 워크스테이션과 서버는 모두 동일한 LAN 세그먼트에 있고 서로 핑할 수 있습니다(그리고 문제 없이 내 워크스테이션에서 서버로 SSH를 통해 연결할 수 있습니다).

Centos 7에 Apache를 기본 설치했습니다.

서비스를 시작했지만 워크스테이션에서 웹서버를 탐색할 수 없습니다.

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 연결은 두 프로토콜을 모두 제공할 수 있으므로 하나의 소켓만 열립니다. 그리고 하나의 소켓만 열렸으므로 netstat 출력에는 하나의 소켓만 표시됩니다.

답변3

iptables 규칙( iptables-save)을 확인하고 포트 80이 허용되는지 확인하세요.

테스트 목적으로 service iptables stop또는 을 수행할 수 있습니다 iptables -F.

관련 정보