转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]
如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~
背景说明
最近我的网站在被人疯狂刷流量,导致正常访问都不行,没办法只好找找怎么给他限制一下。

apache自带有一个防刷模块mod_evasive,它是"轻度防御",适合防止刷流量/秒刷请求,不是专门防 DDoS 的完整方案。不过也能缓解一下了,毕竟轻量不臃肿。
开启模块
1、安装模块
bash
sudo apt update
sudo apt install libapache2-mod-evasive
2、启用模块
bash
sudo a2enmod evasive
sudo systemctl restart apache2
3、创建日志目录
bash
sudo mkdir /var/log/mod_evasive
sudo chown www-data:www-data /var/log/mod_evasive
4、配置 mod_evasive
bash
sudo vim /etc/apache2/mods-available/evasive.conf
配置示例:
bash
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 30
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 600
DOSEmailNotify [email protected]
DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP"
DOSLogDir "/var/log/mod_evasive"
</IfModule>
参数说明:
参数 说明 DOSPageCount
同一个 IP 在多少秒内访问同一个 URL 超过几次就触发(默认建议 2~5) DOSSiteCount
同一个 IP 在多少秒内访问整个站点总次数限制 DOSPageInterval
页面请求间隔时间(秒) DOSSiteInterval
站点请求间隔时间(秒) DOSBlockingPeriod
触发封锁后禁止访问时间(秒) DOSEmailNotify
可选:触发时通知管理员 DOSSystemCommand
可选:触发时执行系统命令(比如 iptables 封禁) DOSLogDir
日志目录(必须存在)
我的服务器是2核2G,带宽为4M。我用的配置是:
bash<IfModule mod_evasive20.c> DOSHashTableSize 3097 # 单 IP 每秒访问同一页面超过 3 次就触发(适用于刷图片、下载) DOSPageCount 3 DOSPageInterval 1 # 单 IP 每秒对整个站点访问总次数限制为 20(足够浏览页面) DOSSiteCount 20 DOSSiteInterval 1 # 触发封锁后封禁 600 秒(10 分钟) DOSBlockingPeriod 600 # 日志目录(需要提前创建) DOSLogDir "/var/log/mod_evasive" # 可选:邮件通知(改成你自己的邮箱) # DOSEmailNotify [email protected] # 封禁命令(也可以注释掉,仅限拒绝请求) DOSSystemCommand "sudo iptables -I INPUT -s %s -j DROP" </IfModule>
5、重启 Apache 生效
bash
sudo systemctl restart apache2
效果展示
效果还是有一点的,至少带宽不会被一直占着了,肉眼可见的流量拦截:
