브라우저에서 Apache 2.4.7 웹 서버에 액세스하려고 할 때 금지 된 403 오류


9

동일한 웹 서버 PC에서 localhost 를 사용하여 Apache 웹 서버에 액세스하면 Apache2 Ubuntu 기본 페이지가 표시됩니다.

그러나 192.168.0.2 사용하여 Apache 웹 서버에 액세스하면 403 Forbidden 오류가 발생합니다 (Forbidden이 서버에 액세스 할 수있는 권한이 없습니다).

웹 서버 세부 사항

  • 우분투 14.04 LTS
  • 아파치 버전 2.4.7

소유권 명령

www-data sudo adduser ftpuser www-data
sudo chown -R www-data:ftpuser /var/www
sudo chmod -R g+rwX /var/www

에서 등 / 아파치 / apache2.conf의 파일

ServerName 192.168.0.2

<Directory/>
    AllowOverride All
    Require all granted
</Directory>

에서 등 / 아파치 / port.conf 파일

NameVirtualHost *:80
Listen *:80

한 웹 사이트를위한 가상 호스트

<VirtualHost *:80>
    ServerName mysite
    DocumentRoot /var/www/mysite
    <Directory /var/www/mysite>
        Options None FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>    
</VirtualHost>

어느 장소에서 어떤 설정을해야합니까? 도와주세요...


ServerName 192.168.0.2ServerName 지시문의 이름이 www.server.com과 같고 IP 번호가 아니기 때문에 줄을 버릴 것 입니다. 이것이 문제를 해결할 수 있다고 생각합니다. ServerName의 경우 서버 이름 (있는 경우)을 입력해야합니다. ServerName은 이름 기반 가상 호스팅을 허용하므로 동일한 IP에 더 많은 웹 사이트를 가질 수 있습니다.
아무도

@nobody, 이미 파일에서 제거했지만 여전히 성공하지 못했습니다.
K Ahir

답변:


8

1. / etc / hosts 파일을 다음 과 같이 구성 해야 합니다 .

127.0.0.1   localhost
127.0.0.1   test-site
127.0.1.1   my-hostname
# The following lines are desirable for IPv6 capable hosts. etc...

test-site두 번째 "localhost"는 어디에 있습니까 ? 그리고 my-hostname"시스템 호스트 이름"은에 정의되어 /etc/hostname있습니다.


2. 가상 호스트 (VH)를 정의하고 활성화해야합니다 .

기본 HTTP VH가 있습니다. 에 배치됩니다 /etc/apache2/sites-available/. 파일 이름은 000-default.conf입니다. 파일을 편집 (원하는 경우 이름을 바꾸거나 다른 .conf 파일을 만들 수 있음) 한 후 활성화해야합니다.

"부드러운 심볼릭 링크"를 생성하여 수동으로 활성화 할 수 있습니다.

sudo ln -s /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-enabled/

또는 a2ensite 라는 Apache2 도구 를 사용할 수 있습니다 .

sudo a2ensite 000-default.conf

3 개의 가상 호스트 , 활성화 된 SSL 및 등록 된 개인 도메인 (예 : SOS.info) 이 있다고 가정하십시오 .

/etc/apache2/sites-available/http.SOS.info.conf
/etc/apache2/sites-available/https.SOS.info.conf

그리고이 주제의 목적을 위해 만들어진 것 :

/etc/apache2/sites-available/http.test-site.conf

First 2 VH의 내용 은 다음과 같습니다.

$ cat /etc/apache2/sites-available/http.SOS.info.conf

<VirtualHost *:80>    
    ServerName SOS.info
    ServerAlias www.SOS.info
    ServerAdmin admin@SOS.info

    # Redirect Requests to SSL
    Redirect permanent "/" "https://SOS.info/"

    ErrorLog ${APACHE_LOG_DIR}/http.SOS.info.error.log
    CustomLog ${APACHE_LOG_DIR}/http.SOS.info.access.log combined       
</VirtualHost>

이것은 모든 HTTP 요청을 HTTPS로 리디렉션합니다.

$ cat /etc/apache2/sites-available/https.SOS.info.conf

<IfModule mod_ssl.c>    
    <VirtualHost _default_:443>    
        ServerName SOS.info
        ServerAlias www.SOS.info
        ServerAdmin admin@SOS.info

        DocumentRoot /var/www/html  

        SSLEngine on    
        SSLCertificateFile /etc/ssl/certs/SOS.info.crt
        SSLCertificateKeyFile /etc/ssl/private/SOS.info.key
        SSLCertificateChainFile /etc/ssl/certs/SOS.info.root-bundle.crt
        #etc..
    </VirtualHost>    
</IfModule>

이것이 HTTPS VH입니다.

이 두 파일의 내용을 하나의 파일에 게시 할 수 있지만이 경우 관리 ( a2ensite/ a2dissite)가 더 어려워집니다.


세 번째 가상 호스트는 우리의 목적을 위해 생성 된 것입니다 .

$ cat /etc/apache2/sites-available/http.test-site.conf

<VirtualHost *:80>
    ServerName test-site
    ServerAlias test-site.SOS.info

    DocumentRoot /var/www/test-site
    DirectoryIndex index.html

    ErrorLog ${APACHE_LOG_DIR}/test-site.error.log
    CustomLog ${APACHE_LOG_DIR}/test-site.access.log combined

    <Directory /var/www/test-site>
        # Allow .htaccess 
        AllowOverride All
        Allow from All
    </Directory>    
</VirtualHost>

3.이 구성으로 다음에 액세스해야합니다.

http://localhost     # pointed to the directory of the mine Domain 
https://localhost    # iin our case: /var/www/html (SOS.info), but you should get an error, because the SSL certificate

http://SOS.info      # which redirects to https://SOS.info
https://SOS.info     # you should have valid SSL certificate

http://www.SOS.info  # which is allied to http://SOS.info and redirects to https://SOS.info
https://www.SOS.info # which is allied to https://SOS.info

주요 예에서 다음에 액세스해야합니다 .

http://test-site           # pointed to the directory /var/www/test-site
http://test-site.SOS.info  # which is allied to http://test-site

웹 브라우저에서 사이트를 열거 나 다음 명령으로 (터미널에서) 시도하십시오.

$ curl -L http://test-site/index.html
$ curl -L http://test-site.SOS.info/index.html

물론 index.htmlDocumentRoot에 일부 페이지 가 있어야 합니다. :)



나는 pedantry의 이유로 다음 메모를 남길 것입니다 :)


`/ etc / apache2 / apache2.conf`를 올바르게 설정해야합니다.

서버 보안을 향상시키는 데 시간을 투자하는 것이 좋습니다. 이 매뉴얼은 보안 구성에 관한 것입니다 : 1st and 2nd . 여기에서 무료 SSL 인증서를 얻을 수 있습니다. 이 사이트는 진행 상황을 확인하는 데 도움이됩니다 : 1st and 2nd .

위의 보안 매뉴얼에 따르면 /etc/apache2/apache2.conf파일은 다음과 같아야합니다.

Mutex file:${APACHE_LOCK_DIR} default

PidFile ${APACHE_PID_FILE}

Timeout 60

#KeepAlive Off
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

HostnameLookups Off

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn

IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

Include ports.conf

<Directory />
    Options None FollowSymLinks 
    AllowOverride None
    Require all denied
</Directory>

<Directory /var/www/>
    Options None FollowSymLinks 
    AllowOverride None
    Require all granted
</Directory>

AccessFileName .htaccess
<FilesMatch "^\.ht">
    Require all denied
</FilesMatch>

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf

# Hide Server type in the http error-pages 
ServerSignature Off
ServerTokens Prod

# Etag allows remote attackers to obtain sensitive information 
FileETag None

# Disable Trace HTTP Request
TraceEnable off

# Set cookie with HttpOnly and Secure flag.
# a2enmod headers
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

# Clickjacking Attack
Header always append X-Frame-Options SAMEORIGIN

# CX-XSS Protection
Header set X-XSS-Protection "1; mode=block"

# Disable HTTP 1.0 Protocol
RewriteEngine On
RewriteCond %{THE_REQUEST} !HTTP/1.1$
RewriteRule .* - [F]

# Change the server banner @ ModSecurity 
# Send full server signature so ModSecurity can alter it
ServerTokens Full
# Alter the web server signature sent by Apache
<IfModule security2_module>
    SecServerSignature "Apache 1.3.26"
</IfModule>
Header set Server "Apache 1.3.26"
Header unset X-Powered-By

# Hde TCP Timestamp
#   gksu gedit /etc/sysctl.conf
#   >> net.ipv4.tcp_timestamps = 0
# Test: sudo hping3 SOS.info -p 443 -S --tcp-timestamp -c 1

# Disable -SSLv2 -SSLv3 and weak Ciphers
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"

5. 방화벽을 설정하십시오.

웹 서버에 대한 외부 액세스를 허용 / 거부하려면 UFW ( 복합 방화벽)를 사용할 수 있습니다 .

sudo ufw allow http
sudo ufw allow https

tcp프로토콜 사용 만 허용하려면 다음을 수행하십시오.

sudo ufw allow http/tcp
sudo ufw allow https/tcp

및 포트 번호를 직접 사용할 수 있습니다.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

"규칙 테이블"을 다시로드 할 수있는 경우를 대비하여 :

sudo ufw reload

gufw라는 UFW 의 GUI 인터페이스를 사용할 수 있습니다 .

sudo apt update
sudo apt install gufw
gufw &

Office프로필을 선택하십시오 . 이 설정됩니다 Status:ON, Incoming:Deny그리고 Outgoing:Allow당신의 규칙을 추가합니다.


6. 라우터가 있다면 일부 포트를 전달하는 것을 잊지 마십시오 :

라우터가 있고 인터넷에서 웹 서버에 액세스 할있게 하려면 포트 포워딩을 추가하는 것을 잊지 마십시오. 같은 .


000-default.conf 파일은 이미 / etc / apache2 / sites-enabled / 폴더에 있습니다. 위의 명령을 사용하여 여전히 활성화해야합니까? 알려주세요.
K Ahir

이미 존재하는 경우 사용할 필요가 없습니다.
pa4080

이 오류의 원인은에서 찾을 수 /var/log/apache2/error.log있습니다.
pa4080

내 의견을 업데이트했습니다.
pa4080

이 오류 메시지가 표시되는 중 ... [Fri Aug 12 17 : 18 : 37.224182 2016] [mpm_prefork : notice] [pid 4335] AH00169 : SIGTERM을 종료하고 종료 함 [Fug Aug 12 17 : 18 : 40.679317 2016] [mpm_prefork : notice] [pid 4571] AH00163 : Apache / 2.4.7 (우분투) PHP / 5.5.9-1ubuntu4.19 구성-정상 작업 재개 [8 월 12 일 금요일 17 : 18 : 40.679382 2016] [core : notice] [pid 4571] AH00094 : 명령 행 : '은 / usr / sbin에 / 아파치'
K 아히

3

명령을 사용하여 파일을 제공하는 디렉토리의 소유권을 변경하십시오.

sudo chown -R www-data:www:data <directory_where_you_serve_files_from>

내 질문에 언급하지 않았지만 / var / www 폴더의 특정 그룹 및 사용자에게 소유권을 이미 할당했습니다.
K Ahir

0

내 문제를 해결 한이 답변에 당신을 연결해야합니다 .

우선, 폴더에 권한을 추가하십시오 :

sudo chmod -R 775 /var/www

그런 다음이 텍스트를 추가하십시오.

<Directory /var/www/html>
  AllowOverride All
</Directory>

이 파일의 끝까지 :

/etc/apache2/sites-available/000-default.conf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.