Перейти к содержимому

Доступ запрещён и код 403 - кто отдал отказ

Посетитель видит «403 Forbidden» или «Доступ запрещён» вместо страницы сайта, файла или раздела управления. Отказ приходит с двух разных уровней, и путать их нельзя: запрет ставит либо веб-сервер, либо сама платформа. Разбираем причины по убыванию частоты, начиная с того, кто именно этот отказ выдал.

С чего начать

Смотрим, кто именно отдал отказ:

Окно терминала
curl -sI https://example.com/zakrytyy-razdel/ | head -4 # код ответа и строка Server
curl -s https://example.com/zakrytyy-razdel/ | head -20 # тело ответа: чей это шаблон
# подвал с именем и версией сервера означает отказ веб-сервера
# отказ в шаблоне сайта означает, что запрос дошёл до платформы

Проверка делит причины ровно пополам и сразу снимает главный вопрос разбора. Веб-сервер печатает собственную страницу, где в подвале стоят его имя и версия. Платформа отвечает уже из PHP и почти всегда рисует отказ шаблоном сайта.

Сверяем ответ с журналами веб-сервера:

Окно терминала
grep -iE 'forbidden|denied' /var/log/nginx/error.log | tail -20
grep -i 'Forbidden' /var/log/httpd/error_log | tail -20
# «access forbidden by rule» - сработало правило запрета в конфиге
# «directory index of ... is forbidden» - нет индексного файла в каталоге

Запись в журнале веб-сервера закрывает вопрос об авторе отказа окончательно. Пустой журнал при коде 403 означает, что запрос дошёл до обработчика PHP. Тогда причину ищем в настройках платформы, а не в конфигах сервера.

Ищем подброшенные файлы запретов:

Окно терминала
find /home/bitrix/www -name '.htaccess' -newermt '-30 days' -ls
grep -rn 'Deny from all' /home/bitrix/www/*/.htaccess 2>/dev/null
# файл .htaccess в каждом разделе сайта - это след взлома, а не поставка

Файлы запретов внутри разделов проекта поставка не создаёт: их кладёт взломщик. Признак характерный, и разбор в этом случае переходит от отказа к чистке сайта.

Снимаем самоблокировку по адресу:

Окно терминала
ls /home/bitrix/www/bitrix/modules/ | grep ipcheck_disable # имя берут из настроек
touch /home/bitrix/www/bitrix/modules/ipcheck_disable_0123456789abcdef0123456789abcdef
# пустой файл-флажок снимает ограничение доступа в админку по адресу
# после входа удаляем свой адрес из стоп-листа и сам файл-флажок

Файл-флажок готовят заранее, ещё до включения ограничения по адресу, и его имя записывают. Без него самоблокировка снимается только правкой базы либо доступом к файлам сервера.

Сверяем права на файлы раздела:

Окно терминала
stat -c '%U:%G %a %n' /home/bitrix/www/upload/ /home/bitrix/www/index.php
grep -m1 '^user' /etc/nginx/nginx.conf # рабочий пользователь веб-сервера
# штатные права: файлы 0644, каталоги 0755, владелец - пользователь сайта

Права проверяют вместе с именем пользователя, от которого запущен веб-сервер. Каталог с правами 0755 у чужого владельца всё равно даст отказ на чтение.

Причины

  1. Запрет в правилах веб-сервера или закрытый листинг каталога примерно 27% случаев

    ПризнакСтраницу рисует сам веб-сервер, его имя и версия видны в подвале ответа.

    ПроверкаЧитаем журнал веб-сервера: там пишется и правило запрета, и закрытый листинг каталога.

    Что делатьУбираем лишнее правило запрета, а каталогу без листинга возвращаем его индексный файл.

  2. Адрес посетителя попал в стоп-лист проактивной защиты примерно 22% случаев

    ПризнакСайт не пускает с одного адреса, а с телефона открывается сразу.

    ПроверкаСмотрим стоп-лист и журнал вторжений: там записан адрес и повод для блокировки.

    Что делатьУдаляем адрес из стоп-листа и смотрим, какое правило фильтра дало это срабатывание.

  3. Включено ограничение доступа в админку по адресу примерно 18% случаев

    ПризнакПубличная часть работает, а раздел управления отдаёт отказ с любой страницы.

    ПроверкаПроверяем список разрешённых адресов в настройках защиты административной части и свой текущий адрес.

    Что делатьСнимаем ограничение заранее подготовленным файлом-флажком в каталоге модулей, затем правим список адресов.

  4. Домен не указан в списке хостов проактивной защиты примерно 14% случаев

    ПризнакПо основному имени сайт работает, а по адресу сервера отказывает.

    ПроверкаОткрываем журнал вторжений и ищем событие об ограничении по имени хоста запроса.

    Что делатьДобавляем все рабочие домены сайтов, включая вариант с www, на страницу хостов.

  5. Права на файл или каталог закрыты от процесса веб-сервера примерно 11% случаев

    ПризнакОтказ приходит на отдельные файлы: картинки, стили и скрипты раздела управления.

    ПроверкаСверяем права и владельца: файлы 0644, каталоги 0755, владелец - пользователь сайта.

    Что делатьВозвращаем штатные права и владельца, а в конфиге сервера сверяем имя рабочего пользователя.

  6. Платформа закрыла раздел файловыми правами примерно 8% случаев

    ПризнакОтказ нарисован шаблоном сайта, и приходит он только части групп пользователей.

    ПроверкаИщем файл прав в этом разделе и смотрим права групп на его путь.

    Что делатьПравим права раздела в управлении структурой сайта либо прямо в файле прав.

Частые вопросы

Почему Битрикс не пускает на некоторые страницы админки?

Чаще всего в разделах лежат подброшенные файлы запретов, закрывающие выполнение PHP. Это типичный след взлома: проект сверяют с эталоном поставки, чистят и закрывают уязвимость, через которую файлы попали на сервер.

Сменили адрес сервера, и сайт стал отдавать Forbidden Access denied. Что смотреть?

Список хостов проактивной защиты и ограничение доступа в админку по адресу. После переезда старые настройки перестают совпадать с новыми именами и адресами, и запрос блокируется ещё до отрисовки страницы.

Как вернуть себе доступ, если защита забанила администратора?

Создают пустой файл-флажок с именем ipcheck_disable и набором из 32 символов в каталоге модулей. Имя берут из настроек защиты. После входа удаляют свой адрес из стоп-листа и сразу удаляют сам файл-флажок.

Почему сайт открывается по имени, а по адресу сервера и с www отдаёт Forbidden?

На странице «Хосты/домены» указан только один домен, а остальные имена считаются недопустимыми. В журнал вторжений при этом пишется событие об ограничении по хосту. Добавляют все рабочие домены сайтов.

Можно ли заменить статичную страницу 403 на свою?

Страницу отказа рисует веб-сервер, поэтому её меняют в конфиге сервера, а не в шаблоне сайта. В веб-окружении Битрикса это отдельный статичный файл, общий для всех сайтов пула.

Смежное

Первоисточник