Вопрос или проблема
Мне было поручено предоставить определенному IP доступ к одному из наших сайтов WordPress для разработчиков, который изначально был настроен только для внутреннего доступа.
Я уже настроил переадресацию портов, однако при доступе к сайту извне я получаю ошибку 403, доступ запрещен. Папка www настроена с правами 755, так что теоретически я бы думал, что у нас будет доступ, однако на практике это не работает. Я очень новичок в Linux, так что прошу вас проявить терпение, но если вам нужно, чтобы я опубликовал какие-либо конфигурационные файлы для диагностики моей проблемы, пожалуйста, дайте знать.
etc\apache2\sites-enabled\000-default.conf
<VirtualHost *:80>
# Директива ServerName устанавливает схему запроса, имя хоста и порт, которые
# сервер использует для самопознания. Это используется при создании
# редиректов URL. В контексте виртуальных хостов ServerName
# указывает, какое имя хоста должно появиться в заголовке Host: запроса, чтобы
# соответствовать этому виртуальному хосту. Для виртуального хоста по умолчанию (этого файла) это
# значение не является решающим, так как оно используется как последний
# хост в любом случае. Тем не менее, вы должны установить его для любого последующего виртуального хоста явно.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Доступные уровни журналирования: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# Также возможно настроить уровень журналирования для конкретных
# модулей, например.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# Для большинства конфигурационных файлов из conf-available/, которые
# включены или отключены на глобальном уровне, можно
# включить строку только для одного конкретного виртуального хоста. Например, следующая
# строка включает конфигурацию CGI только для этого хоста
# после того, как она была глобально отключена с помощью "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
ИЗМЕНЕНИЕ #1
Как было запрошено, вот фрагмент журналов доступа:
https://pastebin.com/8zDEkR32 (не смог опубликовать напрямую здесь из-за менее 10 сообщений на сайте, поэтому не могу опубликовать более 5 или около того URL в одном сообщении)
196.52.84.52 — один из внешних IP, с которого я пытаюсь получить доступ к веб-серверу.
ИЗМЕНЕНИЕ #2
Только что заметил это в error.log
https://pastebin.com/z3M9EgqA
Если сайт работает в внутренней сети, вам нужно проверить несколько вещей.
-
Проверьте ваши iptables, возможно, внешний IP-адрес заблокирован.
-
Возможно, конфигурация apache2 по умолчанию разрешает доступ только из внутренней сети.
Для проблемы #1 вы можете позволить внешнему IP-адресу получить доступ к серверу на порту 80.
Для проблемы #2 вы можете попробовать добавить некоторый дополнительный код после DocumentRoot /var/www/html.
DocumentRoot /var/www/html
<Directory />
Allow from all
</Directory>
Я нашел проблему. Поскольку я только недавно присоединился к этой организации, все мои настройки были по умолчанию в моем FTP-клиенте. После того как я заметил, что “Показать скрытые файлы” было отключено, я не смог увидеть файл .htaccess. После открытия файла стало очевидно, что мне нужно добавить запись здесь, чтобы разрешить доступ к сайту.
Ответ или решение
Ошибка 403, с которой вы столкнулись при доступе к веб-сайту извне, указывает на то, что доступ к ресурсу запрещён. Эта проблема может возникнуть по ряду причин. Рассмотрим их подробно, а также пути решения.
1. Проверка конфигурации Apache
Ваша конфигурация Apache имеет важные элементы, которые мы должны проверить. Например, ваш файл конфигурации 000-default.conf
выглядит следующим образом:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Первое, что стоит проверить, это наличие ограничений доступа. Убедитесь, что нет директив Require all denied
или подобного рода, которые могли бы ограничивать доступ извне. Добавьте следующие строки после DocumentRoot
, чтобы разрешить доступ всем:
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
2. Проверка файла .htaccess
Как вы и определили, важно проверить наличие и содержимое файла .htaccess
. Если этот файл запрещает доступ, он может вызвать ошибку 403. Откройте файл .htaccess
в директории /var/www/html
и убедитесь, что там нет запрещающих записей. Если вы обнаружите записи вроде Deny from all
, необходимо изменить их на:
Allow from all
или удалить эти записи вовсе.
3. Проверка прав доступа к файлам и папкам
Несмотря на то что права доступа к папке установлены на 755, важно проверить, что владелец файла и группа также настроены корректно. Если сервер Apache работает от пользователя www-data
, как обычно в Ubuntu, убедитесь, что www-data
является владельцем каталогов и файлов:
sudo chown -R www-data:www-data /var/www/html
4. Проверка настроек брандмауэра
Проверьте, не блокирует ли ваш брандмауэр доступ извне. Используйте следующую команду для проверки правил iptables:
sudo iptables -L -n
Если вы видите, что access на порт 80 блокируется, вы можете разрешить доступ:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
5. Логи Apache
Логи могут дать больше информации о причине ошибки. Разделите их для дальнейшего анализа. Ошибки, указанные в error.log
, могут дать вам дополнительную информацию о причинах отказа в доступе.
6. Перезапуск сервера
После всех изменений не забудьте перезапустить Apache, чтобы применить новые настройки:
sudo systemctl restart apache2
Заключение
Сложив все вышеперечисленные действия вместе, вы должны устранить проблему с ошибкой 403 и позволить доступ указанному внешнему IP к вашему WordPress сайту. Если проблема всё ещё сохраняется, не стесняйтесь делиться логами и конфигурациями для дальнейшей диагностики. Помните, что безопасная настройка и контроль доступа являются ключевыми элементами для поддержания интегритета вашего веб-сайта.