Заборонена помилка 403 при спробі доступу до веб-сервера Apache 2.4.7 у браузері


9

Коли я отримую доступ до веб-сервера Apache за допомогою localhost з того ж ПК із веб-сервером, він показує сторінку за замовчуванням 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, його вже видалено з файлу, але успіху досі немає.
К Ахір

Відповіді:


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другий «локальний господар». І 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/

Або ви можете використовувати інструмент 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 ВГ :

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

Ii - це гарна ідея витратити якийсь час на підвищення безпеки вашого сервера. Ці посібники стосуються конфігурації безпеки: 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 (Нескладний брандмауер):

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

Можна використовувати і інтерфейс GUI інтерфейсу UFW, який називається gufw .

sudo apt update
sudo apt install gufw
gufw &

Виберіть Officeпрофіль. Він буде встановлювати: Status:ON, Incoming:Denyі Outgoing:Allowдодати свої правила.


6. Якщо у вас є маршрутизатор, не забудьте переслати деякі порти:

Якщо у вас є маршрутизатор і ви хочете, щоб ваш веб-сервер був доступний з Інтернету , не забудьте додати трохи переадресації портів. Що - щось на зразок цього .


Файл 000-default.conf вже є в папці / etc / apache2 / enabled-sites /. Тож чи варто все-таки ввімкнути його за допомогою вищевказаної команди? Будь ласка, дай мені знати.
К Ахір

Якщо він вже є, вам не потрібно їх використовувати.
pa4080

Можливо, ви знайдете причини цієї помилки в /var/log/apache2/error.log.
pa4080

Я оновив свій коментар.
pa4080

Отримання цього повідомлення про помилку ... [Пт. 12 серпня 17: 18: 37.224182 2016] [mpm_prefork: message] [pid 4335] AH00169: зловлений SIGTERM, вимкнення [пт. 12 серпня 17: 18: 40.679317 2016] [mpm_prefork: повідомлення] [pid 4571] AH00163: Apache / 2.4.7 (Ubuntu) PHP / 5.5.9-1ubuntu4.19 налаштовано - відновлення нормальних операцій [пт. 12 серпня 17: 18: 40.679382 2016] [core: message] [pid 4571] AH00094 : Командний рядок: '/ usr / sbin / apache2'
K Ahir

3

Будь ласка, змініть право власності на каталог, де ви обслуговуєте свої файли, використовуючи команду:

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

Вибачте, що не згадую в своєму запитанні, але я вже призначив власність конкретній групі та користувачу для папки / var / www.
К Ахір

0

Я повинен зв’язати вас з цією відповіддю, де вирішилася моя проблема.

Перш за все, додайте дозволи в папку:

sudo chmod -R 775 /var/www

Потім додайте цей текст:

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

В кінці цього файлу:

/etc/apache2/sites-available/000-default.conf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.