CentOS LAMP 防护 DDoS 的实用方案
一 分层防御思路
- 边缘与网络层:优先把流量交给CDN/WAF/云清洗,利用其全球节点与清洗能力吸收大流量;在本地边界用iptables/firewalld做连接与速率限制,减轻内核与应用压力。
- 主机与传输层:优化Apache MPM 与 KeepAlive,限制并发与空闲连接,降低资源被占满的风险。
- 应用与数据库层:启用WAF(如 ModSecurity+OWASP CRS)识别恶意请求,配合Fail2Ban自动封禁恶意来源;对MySQL限制远程访问、强口令与必要权限。
- 监控与响应:持续监控与日志分析,异常时联动上游清洗或ISP处置;定期更新与打补丁,保持策略与规则库最新。
二 关键配置步骤
- 安装并启用 EPEL(CentOS 7 示例)
- 安装 EPEL 仓库:sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
- 验证:sudo yum repolist | grep epel
- 安装与启用 mod_evasive(Apache 专用抗 DoS/DDoS 模块)
- 安装:sudo yum install mod_evasive -y
- 确认模块加载:sudo httpd -M | grep evasive(应见 evasive20_module)
- 常用配置(/etc/httpd/conf.d/mod_evasive.conf):
- DOSEmailNotify:设置告警邮箱(如 admin@example.com)
- DOSWhitelist:加入可信 IP 白名单
- 参考阈值:DOSPageCount 2、DOSSiteCount 50、DOSPageInterval/DOSSiteInterval 1(每秒统计,超过即拉黑一段时间)
- 安装与启用 ModSecurity + OWASP CRS(WAF)
- 安装:sudo yum install mod_security -y
- 部署 CRS(示例):
- mkdir -p /etc/httpd/crs-tecmint && cd $_
- wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master
- tar xzf master && mv SpiderLabs-owasp-modsecurity-crs-* owasp-modsecurity-crs
- cp owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example owasp-modsecurity-crs/modsecurity_crs_10_setup.conf
- 在主配置中引入(/etc/httpd/conf/httpd.conf 或 /etc/httpd/conf.modules.d/security.conf):
- Include crs-tecmint/owasp-modsecurity-crs/modsecurity_crs_10_setup.conf
- Include crs-tecmint/owasp-modsecurity-crs/base_rules/*.conf
- 基础开关(/etc/httpd/modsecurity.d/local.conf):
- SecRuleEngine On
- SecRequestBodyAccess On
- SecResponseBodyAccess On
- SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream
- SecDataDir /tmp
- 配置 Fail2Ban(自动封禁暴力来源)
- 安装:sudo yum install fail2ban -y && sudo systemctl enable --now fail2ban
- 建议为 Apache 创建本地规则(/etc/fail2ban/jail.local 或 jail.d/apache.local):
- [apache]
- enabled = true
- filter = apache-auth
- action = iptables[name=HTTP, port=http,protocol=tcp]
- logpath = /var/log/httpd/error_log
- maxretry = 5
- bantime = 3600
- 边界防火墙限速与连接限制(iptables 示例)
- 限制单 IP 的新建连接速率(每秒 20 个,突发 50)
- iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
- iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 1 --hitcount 20 -j DROP
- 限制单 IP 并发连接数(最多 100)
- iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT --reject-with tcp-reset
- 说明:firewalld 可用 rich-rule 实现类似策略,生产环境建议结合业务压测微调阈值。
三 Apache 与 MySQL 优化要点
- Apache(MPM 与连接)
- 采用event MPM(高并发更友好),合理设置 MaxRequestWorkers(由内存与业务决定)、KeepAlive On/Off 与 KeepAliveTimeout(如 2–5 秒),减少长连接占用;必要时启用请求体限制与超时控制。
- MySQL
- 仅允许可信网段访问(bind-address、skip-networking 视部署而定),使用强密码与最小权限账户;对慢查询与异常会话设置告警与限制,避免被应用层滥用拖垮数据库。
四 监控 响应与兜底
- 监控与日志
- 实时观察带宽、连接数、CPU/内存、Apache 访问/错误日志;为 Fail2Ban、WAF 与系统日志配置集中化收集与告警,便于快速定位攻击特征与来源。
- 大规模攻击处置
- 启用CDN/WAF 的清洗与速率限制能力,必要时切换至维护/验证码页面;与ISP联动进行上游清洗或黑洞路由;攻击缓解后逐步恢复策略,避免二次冲击。
- 持续加固
- 定期更新系统与组件(内核、Apache、PHP、MySQL、规则库),复核防火墙与 WAF 规则,演练应急预案,确保恢复流程可用。