Запрещена ошибка 403 при попытке доступа к веб-серверу Apache 2.4.7 в браузере

9

Когда я получаю доступ к веб-серверу Apache, используя localhost с того же ПК веб-сервера, он показывает страницу по умолчанию Apache2 Ubuntu.

Но когда я получаю доступ к веб-серверу Apache, используя 192.168.0.2 , он выдает ошибку 403 Forbidden (Forbidden У вас нет разрешения на доступ к / на этом сервере).

Детали веб-сервера

  • 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

В и т.д. / apache2 / apache2.conf файл

ServerName 192.168.0.2

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

В и т.д. / 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второй "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/

Или вы можете использовать инструмент 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

Вы можете использовать и графический интерфейс UFW, называемый gufw .

sudo apt update
sudo apt install gufw
gufw &

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


6. Если у вас есть маршрутизатор, не забудьте перенаправить некоторые порты:

Если у вас есть маршрутизатор и вы хотите, чтобы ваш веб-сервер был доступен из Интернета , не забудьте добавить переадресацию портов. Что - то вроде этого .

pa4080
источник
Файл 000-default.conf уже находится в папке / etc / apache2 / sites-enabled /. Так я должен все еще включить это, используя вышеупомянутую команду? Пожалуйста, дайте мне знать.
К агир
Если он уже есть, вам не нужно его использовать.
pa4080
Может быть, вы найдете причины этой ошибки в /var/log/apache2/error.log.
pa4080
Я обновил свой комментарий.
pa4080
Получение этого сообщения об ошибке ... [Пт, 12 августа 17: 18: 37.224182 2016] [mpm_prefork: note] [pid 4335] AH00169: перехватил SIGTERM, завершает работу [Пт, 12 авг 17: 18: 40.679317 2016] [mpm_prefork: note] [pid 4571] AH00163: Apache / 2.4.7 (Ubuntu) PHP / 5.5.9-1ubuntu4.19 настроен - возобновление нормальной работы [Пт, 12 августа 17: 18: 40.679382 2016] [core: note] [pid 4571] AH00094 : Командная строка: '/ usr / sbin / apache2'
K Ahir
3

Пожалуйста, измените владельца каталога, в котором вы обслуживаете ваши файлы, используя команду:

sudo chown -R www-data:www:data <directory_where_you_serve_files_from>
Shady Programmer
источник
Извините, что не упомянул в моем вопросе, но я уже назначил владельца определенной группе и пользователю для папки / var / www.
К Агир
0

Я должен связать вас с этим ответом, где решена моя проблема.

Прежде всего, добавьте права доступа к папке:

sudo chmod -R 775 /var/www

Затем добавьте этот текст:

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

До конца этого файла:

/etc/apache2/sites-available/000-default.conf
Амир Фо
источник