ข้อผิดพลาด 403 ที่ต้องห้ามเมื่อพยายามเข้าถึง Apache 2.4.7 เว็บเซิร์ฟเวอร์ในเบราว์เซอร์


9

เมื่อฉันเข้าถึง Apache เว็บเซิร์ฟเวอร์โดยใช้localhostจากเว็บเซิร์ฟเวอร์ PC เดียวกันมันแสดงหน้าเริ่มต้น Apache2 Ubuntu

แต่เมื่อฉันเข้าถึง Apache เว็บเซิร์ฟเวอร์โดยใช้192.168.0.2มันให้ 403 ข้อผิดพลาดต้องห้าม (ห้ามคุณไม่ได้รับอนุญาตให้เข้าถึง / บนเซิร์ฟเวอร์นี้)

รายละเอียดเว็บเซิร์ฟเวอร์

  • Ubuntu 14.04 LTS
  • Apache เวอร์ชัน 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

ในetc / apache2 / apache2.confไฟล์

ServerName 192.168.0.2

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

ในetc / apache2 / 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.2บรรทัดเป็นคำสั่ง ServerName ควรมีชื่อเช่น 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. คุณควรกำหนดและเปิดใช้งานVirtual Host (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/

หรือคุณสามารถใช้เครื่องมือ Apache2 ที่เรียกว่าa2ensiteซึ่งทำสิ่งเดียวกัน:

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

เนื้อหาของ 2 VHs แรกคือ:

$ 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.htmlหน้าใน DocumentRoot ของพวกเขา :)



ฉันจะทิ้งโน้ตตัวต่อไปด้วยเหตุผลของการคุยโว :)


4. คุณต้องกำหนดค่าอย่างถูกต้อง `/ etc / apache2 / apache2.conf '

ฉันควรใช้เวลาในการปรับปรุงความปลอดภัยของเซิร์ฟเวอร์ของคุณ เหล่านี้เป็นคู่มือเกี่ยวกับการกำหนดค่าความปลอดภัย: วันที่ 1และครั้งที่ 2 ที่นี่คุณสามารถรับใบรับรอง SSL ฟรี เว็บไซต์เหล่านี้จะช่วยให้คุณสามารถตรวจสอบความคืบหน้าของคุณ: ที่ 1และครั้งที่ 2

ตาม/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 (Uncomplicated Firewall):

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

คุณสามารถใช้และ interface GUI UFW ที่เรียกว่าgufw

sudo apt update
sudo apt install gufw
gufw &

เลือกOfficeโปรไฟล์ มันจะตั้ง: Status:ON, Incoming:DenyและOutgoing:Allowและเพิ่มกฎของคุณ


6. ถ้าคุณมีเราเตอร์อย่าลืมส่งต่อพอร์ต:

หากคุณมีเราเตอร์และต้องการให้เว็บเซิร์ฟเวอร์ของคุณสามารถเข้าถึงได้จากอินเทอร์เน็ตอย่าลืมเพิ่มการส่งต่อพอร์ต บางอย่างเช่นนี้


ไฟล์ 000-default.conf มีอยู่แล้วใน / etc / apache2 / sites-enabled / folder ดังนั้นฉันจึงควรเปิดใช้งานโดยใช้คำสั่งด้านบน? โปรดแจ้งให้เราทราบ
K Ahir

หากมีอยู่แล้วคุณไม่จำเป็นต้องใช้
pa4080

บางทีคุณจะพบสาเหตุของข้อผิดพลาด/var/log/apache2/error.logนี้
pa4080

ฉันได้อัพเดตความคิดเห็นของฉันแล้ว
pa4080

รับข้อความแสดงข้อผิดพลาดนี้ ... [ศุกร์ 12 ส.ค. 17: 18: 37.224182 2016] [mpm_prefork: สังเกตเห็น] [pid 4335] AH00169: ถูกจับ SIGTERM ปิด [ศุกร์ 12 ส.ค. 17: 40.679317 2016] [mpm_prefork: ประกาศ] [pid 4571] AH00163: Apache / 2.4.7 (Ubuntu) PHP / 5.5.9-1ubuntu4.19 กำหนดค่า - กลับสู่การทำงานปกติ [ศุกร์ 12 ส.ค. 17: 18: 40.679382 2559] [หลัก: ประกาศ] [pid 4571] AH00094 : บรรทัดคำสั่ง: '/ usr / sbin / apache2'
K Ahir

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.