在遇到恶意请求或者流量过大的问题时,通过在Apache服务器上限制访问频率,可以有效的的防止ddos攻击或者资源耗尽的问题。香港服务器Apache配置模块用来实现访问频率限制的大致有三种,分别是mod_ratelimit、mod_security和mod_evasive。
mod_ratelimit是Apache官方的一个模块,主要用于限制带宽,但也可以用来控制请求速率,配置相对简单,适合基础需求。如果你只是需要简单的频率限制,mod_ratelimit可能足够。
mod_evasive更专注于防御DoS攻击,能根据IP地址限制并发请求和频率,功能更全面。如果你需要更全面的防护,mod_evasive会更合适。
mod_security作为WAF,功能强大,可以通过规则实现复杂的频率限制,但配置可能更复杂。如果已经有使用mod_security的经验,可能更倾向于用它的规则来实现。
在基于Debian的系统上,安装这些模块可能需要使用apt-get命令,而在CentOS上则是yum命令,下面我们将针对这3种方法来详细介绍。
方法一、使用mod_ratelimit
启用mod_ratelimit,确保模块已加载。(在Ubuntu/Debian系统重默认可能未启用):
sudo a2enmod ratelimit
sudo systemctl restart apache2
配置虚拟主机或目录规则,在Apache配置文件(如 /etc/apache2/sites-available/000-default.conf)中添加:
<VirtualHost *:80>
# 限制特定目录(例如 /api/)的请求频率
<Location "/api/">
SetOutputFilter RATE_LIMIT
# 限制每秒最多 10 个请求,突发允许 20 个
RateLimit 10 20
</Location>
</VirtualHost>
RateLimit [平均速率]/[突发速率]:例如 10 20 表示平均每秒 10 个请求,突发允许 20 个。
重启Apache,命令如下:
sudo systemctl restart apache2
方法二、使用 mod_evasive
安装 mod_evasive
Ubuntu/Debian:
sudo apt install libapache2-mod-evasive
sudo a2enmod evasive
CentOS/RHEL:
sudo yum install mod_evasive
配置模块参数,编辑配置文件(如 /etc/apache2/mods-enabled/evasive.conf):
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2 # 同一页面每秒最大请求数
DOSSiteCount 50 # 同一 IP 对全站每秒最大请求数
DOSPageInterval 1 # 页面计数时间间隔(秒)
DOSSiteInterval 1 # 全站计数时间间隔(秒)
DOSBlockingPeriod 60 # 违规 IP 被封禁的时间(秒)
DOSEmailNotify admin@example.com # 触发时发送邮件通知(可选)
</IfModule>
重启 Apache
sudo systemctl restart apache2
测试,使用工具(如 ab)模拟请求:
ab -n 100 -c 10 http://your-domain.com/api/
查看日志 /var/log/apache2/mod_evasive.log 确认拦截记录。
方法三、使用 mod_security
通过 ModSecurity 的规则限制请求频率(需安装 OWASP Core Rule Set)。
安装 ModSecurity
sudo apt install libapache2-mod-security2
sudo a2enmod security2
配置频率限制规则在 ModSecurity 规则文件(如 /etc/modsecurity/modsecurity.conf)中添加:
SecRuleEngine On
SecAction "id:1000,phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},setvar:ip.requests=+1"
SecRule IP:REQUESTS "@gt 10" "id:1001,phase:5,deny,status:429,log,msg:'请求频率过高'"
@gt 10:限制每秒最多 10 个请求。
status:429:返回 HTTP 429(Too Many Requests)。
重启Apache
sudo systemctl restart apache2
注意事项:
合理设置阈值,根据业务需求调整频率限制,避免误伤正常用户。
日志监控,定期检查 Apache 日志(/var/log/apache2/access.log)和模块日志(如 mod_evasive)。
合法流量处理,对搜索引擎或 API 合作伙伴设置白名单:
除了上述讲到的三种方法之外,其实我们还有其他工具可以使用,比如Fail2Ban,通过结合Apache日志可以自动封禁恶意IP,这种更适合动态防御。在比较复杂的场景下,可以结合ModSecurity或Fail2Ban来限制访问频率,防御恶意请求,从而提升香港服务器稳定性。