Назад | Перейти на главную страницу

Случайная ошибка 403 Forbidden (Apache 2.4)

На моем сервере Apache 2.4 (CentOS 7) размещено несколько веб-сайтов. Иногда я получаю ошибку 403 Forbidden (у вас нет разрешения на доступ к файлу X на этом сервере) при доступе к любому из файлов веб-сайтов (в основном скриптам php). Нажатие F5 на несколько секунд разрешит проблему и загрузит страницу в обычном режиме. У файлов правильные разрешения. У меня также включен mod_evasive, но в журнале не отображается какой-либо заблокированный IP-адрес в это время.

 Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 cloudflare_module (shared)
 access_compat_module (shared)
 actions_module (shared)
 alias_module (shared)
 allowmethods_module (shared)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_anon_module (shared)
 authn_core_module (shared)
 authn_dbd_module (shared)
 authn_dbm_module (shared)
 authn_file_module (shared)
 authn_socache_module (shared)
 authz_core_module (shared)
 authz_dbd_module (shared)
 authz_dbm_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_owner_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cache_module (shared)
 cache_disk_module (shared)
 data_module (shared)
 dbd_module (shared)
 deflate_module (shared)
 dir_module (shared)
 dumpio_module (shared)
 echo_module (shared)
 env_module (shared)
 expires_module (shared)
 ext_filter_module (shared)
 filter_module (shared)
 headers_module (shared)
 include_module (shared)
 info_module (shared)
 log_config_module (shared)
 logio_module (shared)
 mime_magic_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 remoteip_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 slotmem_plain_module (shared)
 slotmem_shm_module (shared)
 socache_dbm_module (shared)
 socache_memcache_module (shared)
 socache_shmcb_module (shared)
 status_module (shared)
 substitute_module (shared)
 suexec_module (shared)
 unique_id_module (shared)
 unixd_module (shared)
 userdir_module (shared)
 version_module (shared)
 vhost_alias_module (shared)
 dav_module (shared)
 dav_fs_module (shared)
 dav_lock_module (shared)
 lua_module (shared)
 mpm_prefork_module (shared)
 proxy_module (shared)
 lbmethod_bybusyness_module (shared)
 lbmethod_byrequests_module (shared)
 lbmethod_bytraffic_module (shared)
 lbmethod_heartbeat_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_connect_module (shared)
 proxy_express_module (shared)
 proxy_fcgi_module (shared)
 proxy_fdpass_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_scgi_module (shared)
 ssl_module (shared)
 systemd_module (shared)
 cgi_module (shared)
 php5_module (shared)
 evasive20_module (shared)

Выход apachectl -M выше. Есть идеи, что могло вызвать это?

У меня была именно эта проблема, я не уверен, что причина, указанная ниже, всегда вызывает эту ошибку (особенно в том, что описано в вопросе), но это было для меня, поэтому я просто хотел поделиться своими мыслями.

Debian 7 wheezy (7.7), apache 2.2.2

Я создавал функцию, когда пользователь должен изменить статус сообщения как прочитанный / непрочитанный, при нажатии на «ссылку», когда ajax отправляется на сервер, поэтому во время тестирования - быстро нажимая на эту ссылку, чтобы увидеть, работает ли она хорошо (так что это не будет 2 одновременных запроса ajax) Я получил эту ошибку

Forbidden

You don't have permission to access /messages on this server.

Странно то, что до этого было несколько успешных запросов ajax с нормальным путем, включая доменное имя, например http://example.com/messages/changeStatus/11. Значит, код в порядке. Но, с другой стороны, если бы я мог просто подождать несколько секунд и попробовать еще раз, все сработало бы нормально.

У меня были установлены mod-security и mod-evasive, поэтому после этой ошибки я нашел эти последние строки из /var/log/apache2/modsec_audit.log файл.

--ba0f4035-E--
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /messages/changeStatus/24
on this server.</p>
</body></html>

--ba0f4035-H--
Apache-Error: [file "mod_evasive20.c"] [line 246] [level 3] client denied by server configuration: /home/user_name/www/example/messages, referer: http://example.com/messages
Stopwatch: 1421177262896100 4724 (- - -)
Stopwatch2: 1421177262896100 4724; combined=10, p1=0, p2=0, p3=2, p4=0, p5=7, sr=0, sw=1, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.6.6 (http://www.modsecurity.org/).
Server: Apache/2.2.22 (Debian) PHP/5.4.36-0+deb7u1 mod_ssl/2.2.27 OpenSSL/1.0.1h

--ba0f4035-Z--

Проделав еще несколько поисков, я обнаружил ошибку журнала в этой статье. https://www.atomicorp.com/wiki/index.php/Mod_evasive

Итак, причиной является уклонение от мода, потому что его параметры по умолчанию слишком чувствительны, в основном в /etc/apache2/mods-available/mod-evasive.conf файл по умолчанию у меня были эти параметры

<ifmodule mod_evasive20.c>
   DOSHashTableSize 3097
   DOSPageCount  2
   DOSSiteCount  50
   DOSPageInterval 1
   DOSSiteInterval  1
   DOSBlockingPeriod  10
   DOSLogDir   /var/log/mod_evasive
   DOSEmailNotify  EMAIL@DOMAIN.com
   DOSWhitelist   127.0.0.1
</ifmodule>

как мы узнаем из приведенной выше ссылки

MODEV_DOSPageCount - это пороговое значение для количества запросов одной и той же страницы (или URI) за интервал страницы. Как только пороговое значение для этого интервала будет превышено, IP-адрес клиента будет добавлен в список блокировки.

и

MODEV_DOSPageInterval - интервал порога количества страниц; по умолчанию интервалы в 1 секунду.

Итак, согласно параметрам по умолчанию, если бы я сделал 2 запроса для одного и того же URL-адреса в течение 1 секунды, это показало бы ошибку 403, и это было что-то, что случилось со мной: ASA я увеличил число до 20, я не смог уже воспроизвести сообщение об ошибке .

с другой стороны

MODEV_DOSBlockingPeriod Период блокировки - это количество времени (в секундах), на которое клиент будет заблокирован, если он будет добавлен в список блокировки. В течение этого времени все последующие запросы от клиента будут приводить к ошибке 403 (Запрещено) и сбросу таймера (например, еще 10 секунд). Поскольку таймер сбрасывается при каждом последующем запросе, нет необходимости в длительном периоде блокировки; в случае DoS-атаки этот таймер будет сбрасываться

Итак, как видим, после DOSBlockingPeriod по прошествии времени ip будет удален из черного списка; как я предполагаю, это причина того, что в журналах нет заблокированных IP-адресов, а также то, что при нажатии F5 через несколько секунд он работает нормально, поскольку заблокированный период прошел.

Я также протестировал это с длительным периодом блокировки и небольшими значениями количества страниц, в основном установив 1000 и 1 соответственно. и после 2-3 запросов ajax он начал показывать 403 и не исчезал через несколько секунд.

Надеюсь, это кому-то поможет.

Просто была такая же проблема - за исключением того, что mod_evasive не был установлен. Я на 100% уверен, что он не был установлен или включен.

Решением было установить libapache2-mod-evasive и затем отключить его. Может быть, его объединяют в ядро ​​Apache?

Версия сервера: Apache / 2.4.18 (Ubuntu) Сервер построен: 2017-07-27T14: 34: 01

Вы только что обновились до 2.4 с 2.2? Пытаться Обновление до 2.4 с 2.2.