Galat terlarang 403 ketika mencoba mengakses server web Apache 2.4.7 di browser


9

Ketika saya mengakses server web Apache menggunakan localhost dari PC server web yang sama, itu menunjukkan halaman default Apache2 Ubuntu.

Tetapi ketika saya mengakses server web Apache menggunakan 192.168.0.2 , ia memberikan 403 Forbidden error (Forbidden Anda tidak memiliki izin untuk mengakses / di server ini).

Detail Server Web

  • Ubuntu 14,04 LTS
  • Apache versi 2.4.7

Perintah Kepemilikan

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

Dalam etc / apache2 / apache2.conf berkas

ServerName 192.168.0.2

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

Dalam etc / apache2 / port.conf berkas

NameVirtualHost *:80
Listen *:80

Host Virtual untuk satu situs web

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

Pengaturan apa yang harus saya lakukan di tempat mana? Tolong bantu...


Saya akan membuang ServerName 192.168.0.2baris sebagai direktif ServerName harus memiliki nama seperti www.server.com dan bukan nomor IP. Saya pikir ini bisa menyelesaikan masalah. Untuk ServerName Anda harus memasukkan nama server jika Anda memilikinya. ServerName memungkinkan hosting virtual berbasis nama, yang memungkinkan memiliki lebih banyak situs web pada IP yang sama.
tidak ada yang

@nobody, sudah dihapus dari file tetapi masih belum berhasil.
K Ahir

Jawaban:


7

1. Anda harus mengonfigurasi file / etc / hosts Anda seperti itu:

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...

Di mana test-site"localhost" kedua. Dan my-hostname"System hostname" didefinisikan dalam /etc/hostname.


2. Anda harus mendefinisikan dan mengaktifkan Virtual Host (VH):

Ada HTTP VH default. Itu ditempatkan di /etc/apache2/sites-available/. Nama filenya adalah 000-default.conf. Anda harus mengeditnya (Anda dapat mengganti nama, jika mau, atau membuat beberapa file .conf lainnya, berdasarkan itu) dan setelah itu Anda harus mengaktifkannya.

Anda dapat mengaktifkannya secara manual melalui pembuatan "tautan simbolik":

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

Atau Anda dapat menggunakan alat Apache2 yang disebut a2ensite , yang membuatnya sama:

sudo a2ensite 000-default.conf

Anggap ada 3 Host Virtual , SSL yang diaktifkan, dan domain pribadi terdaftar (SOS.info sebagai contoh):

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

Dan satu yang dibuat untuk keperluan topik ini:

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

Konten dari 2 VH Pertama adalah:

$ 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>

Yang ini mengalihkan semua permintaan HTTP ke 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>

Ini adalah HTTPS VH.

Konten kedua file ini dapat diposting dalam satu file, tetapi dalam hal ini manajemennya ( a2ensite/ a2dissite) akan lebih sulit.


Virtual Host ketiga adalah yang dibuat untuk tujuan kita :

$ 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. Dengan konfigurasi ini Anda harus mengakses:

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

Pada contoh utama Anda harus mengakses dan :

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

Cobalah untuk membuka situs di browser web atau coba (di terminal) dengan perintah berikut:

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

Tentu saja, Anda perlu memiliki beberapa index.htmlhalaman di DocumentRoot mereka :)



Saya akan meninggalkan catatan berikutnya dengan alasan pedantry :)


4. Anda perlu mengkonfigurasi `/ etc / apache2 / apache2.conf` dengan benar.

Ii adalah ide bagus untuk meluangkan waktu untuk meningkatkan keamanan server Anda. Manual ini berisi tentang konfigurasi keamanan: 1 dan 2 . Di sini Anda bisa mendapatkan sertifikat SSL gratis. Situs-situs ini akan membantu Anda memeriksa kemajuan Anda: 1 dan 2 .

Menurut /etc/apache2/apache2.conffile keamanan manual di atas harus terlihat seperti:

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. Atur Firewall.

Untuk mengizinkan / menolak akses eksternal ke server web Anda, Anda dapat menggunakan UFW (Uncomplicated Firewall):

sudo ufw allow http
sudo ufw allow https

Untuk mengizinkan hanya tcppenggunaan protokol:

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

Anda dapat menggunakan dan nomor port secara langsung:

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

Untuk berjaga-jaga jika Anda dapat memuat "tabel aturan":

sudo ufw reload

Anda dapat menggunakan dan antarmuka GUI UFW, yang disebut gufw .

sudo apt update
sudo apt install gufw
gufw &

Pilih Officeprofilnya. Ini akan mengatur: Status:ON, Incoming:Denydan Outgoing:Allowdan menambahkan aturan Anda.


6. Jika Anda memiliki router jangan lupa untuk meneruskan beberapa port:

Jika Anda memiliki router dan Anda ingin server web Anda dapat diakses dari Internet , jangan lupa untuk menambahkan penerusan porta. Sesuatu seperti ini .


File 000-default.conf sudah ada di folder / etc / apache2 / sites-enabled /. Jadi haruskah saya masih mengaktifkannya menggunakan perintah di atas? Tolong beritahu saya.
K Ahir

Jika sudah ada di sana Anda tidak perlu menggunakannya.
pa4080

Mungkin Anda akan menemukan alasan kesalahan ini pada /var/log/apache2/error.log.
pa4080

Saya telah memperbarui komentar saya.
pa4080

Mendapatkan pesan kesalahan ini ... [Jumat 12 Agustus 17: 18: 37.224182 2016] [mpm_prefork: notice] [pid 4335] AH00169: tertangkap SIGTERM, ditutup [Jumat 12 Agustus 17: 18: 40.679317 2016] [mpm_prefork: notice] [pid 4571] AH00163: Apache / 2.4.7 (Ubuntu) PHP / 5.5.9-1ubuntu4.19 dikonfigurasi - melanjutkan operasi normal [Jumat 12 Agustus 17: 18: 40.679382 2016] [inti: pemberitahuan] [pid 4571] AH00094 : Baris perintah: '/ usr / sbin / apache2'
K Ahir

3

Silakan ubah kepemilikan direktori tempat Anda menyajikan file dari menggunakan perintah:

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

Maaf tidak menyebutkan dalam pertanyaan saya, tetapi saya sudah menetapkan kepemilikan untuk grup dan pengguna tertentu untuk folder / var / www.
K Ahir

0

Saya seharusnya menautkan Anda ke jawaban ini di mana menyelesaikan masalah saya.

Pertama-tama, tambahkan izin ke folder:

sudo chmod -R 775 /var/www

Kemudian tambahkan teks ini:

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

Sampai akhir file ini:

/etc/apache2/sites-available/000-default.conf
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.