随机 403 禁止错误(Apache 2.4)

随机 403 禁止错误(Apache 2.4)

我的 Apache 2.4(CentOS 7)服务器托管多个网站。有时,当我访问任何网站文件(主要是 php 脚本)时,我会收到 403 禁止访问(您无权访问此服务器上的文件 X)错误。按 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。知道是什么原因造成的吗?

答案1

我遇到了同样的问题,我不确定下面的原因是否总是导致这个错误(特别是以问题中描述的方式)但对我来说就是这种情况,所以我只是想分享我的想法。

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。这意味着代码没问题。但是,另一方面,如果我能等几秒钟再试一次,它就会正常工作。

/var/log/apache2/modsec_audit.log我安装了 mod-security 和 mod-evasive,因此出现此错误后,我在文件中发现了最后几行。

--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

因此,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 protected]
   DOSWhitelist   127.0.0.1
</ifmodule>

正如我们从上面的链接中了解到的

MODEV_DOSPageCount - 这是每个页面间隔内对同一页面(或 URI)的请求数量的阈值。一旦超出该间隔的阈值,客户端的 IP 地址将被添加到阻止列表中。

MODEV_DOSPageInterval - 页数阈值的间隔;默认为 1 秒间隔。

因此,根据默认选项,如果我在 1 秒内对同一个 url 发出 2 次请求,它会显示 403 错误,这就是发生在我身上的事情:ASA 我将数字增加到 20,但我无法复制错误消息。

在另一方面

MODEV_DOSBlockingPeriod 阻塞期是客户端被添加到阻塞列表后被阻塞的时间(以秒为单位)。在此期间,来自客户端的所有后续请求都将导致 403(禁止)并且计时器将被重置(例如再重置 10 秒)。由于计时器会针对每个后续请求重置,因此没有必要设置较长的阻塞期;如果发生 DoS 攻击,此计时器将继续重置

因此,正如我们所看到的,经过DOSBlockingPeriod一段时间后,该 IP 将从黑名单中删除;我猜这是因为日志中没有被禁止的 IP,而且,几秒钟后单击 F5 时,它可以正常工作,因为阻止期已经过去。

我还使用较长的阻塞期和较小的页数值对此进行了测试,主要分别设置 1000 和 1。在 2-3 个 ajax 请求之后,它开始显示 403 并且几秒钟后并没有消失。

希望这对某人有帮助。

答案2

你刚刚从 2.2 升级到 2.4 吗?试试从 2.2 升级到 2.4

答案3

刚刚遇到了同样的问题 - 除了 mod_evasive 没有安装。我 100% 确定它没有安装或启用。

解决方案是安装 libapache2-mod-evasive 然后禁用它。也许它正在合并到 Apache 核心中?

服务器版本:Apache/2.4.18 (Ubuntu) 服务器建立时间:2017-07-27T14:34:01

相关内容