На моем сервере 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.