作为刚毕业的运维新手,入职第7天就捅了个大篓子——公司的电商订单系统突然崩了,客服电话被打爆。慌乱中试了各种方法都没用,最后靠一款免费WAF力挽狂澜。今天把这段“救命”经历复盘,给和我一样的运维新手避坑。
一、新手运维的惊魂时刻:订单系统崩了
那天早上刚到公司,监控系统就疯狂告警:6台Apache服务器CPU全飙到99%,订单接口响应时间从200ms涨到3秒,用户下单后显示“支付失败”,但钱已经扣了。更糟的是,我连问题出在哪都不知道。
老运维请假了,我只能自己查日志,执行tail -f /var/log/httpd/access_log后直接看傻了:每分钟有1000+次相同IP的请求,全是访问“/api/order/pay”接口,参数里带着“amount=-100”这种异常金额。
我试着拉黑这个IP,结果没过10分钟,又换了10个不同IP来攻击。手动拉黑根本赶不上,领导已经在催第3次了,我急得手心全是汗。
二、绝境中的转机:免费WAF救场
就在我快放弃时,想起入职培训时老运维提过“雷池WAF”,说它免费又好用。我赶紧搜官网,发现它支持Apache集群,而且有一键部署脚本。抱着死马当活马医的心态,我开始部署,没想到真的救了场。
三、运维新手也能搞定的Apache集群防护方案
我们的环境是CentOS 7.6+Apache 2.4集群(6台节点),负载均衡器是Nginx。全程不用改Apache配置,40分钟完成全集群防护,新手跟着做就行。
1. 核心思路:1主5从架构
选1台服务器当主节点,部署WAF控制台管理规则;另外5台从节点只部署WAF代理,通过共享目录同步主节点规则,这样不用每台节点都配置一遍。
2. 主节点部署:15分钟完成
# 1. 安装Docker和NFS(共享规则用)
yum install -y nfs-utils && curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 2. 启动服务并设置开机自启
systemctl start docker nfs-server && systemctl enable docker nfs-server
# 3. 创建共享目录
mkdir -p /data/waf/rules && chmod 777 /data/waf/rules
# 4. 部署主节点WAF
docker run -d --name leichi-master -p 80:80 -p 443:443 -v /data/waf/rules:/etc/leichi/rules --restart=always leichi/waf:community
部署完成后,登录WAF控制台(服务器IP),添加网站并配置规则:针对“/api/order/pay”接口,设置“金额不能小于0”和“单IP每分钟请求不超过20次”。
3. 从节点部署:10分钟/台,规则自动同步
所有从节点执行相同命令,以其中一台为例:
# 1. 安装Docker和NFS客户端
yum install -y nfs-utils && curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 2. 启动服务并挂载主节点共享目录
systemctl start docker && systemctl enable docker
mount 192.168.0.10:/data/waf/rules /data/waf/rules # 192.168.0.10是主节点IP
# 3. 部署从节点WAF(只启动代理模式)
docker run -d --name leichi-slave -p 80:80 -p 443:443 -v /data/waf/rules:/etc/leichi/rules --restart=always leichi/waf:community --proxy-mode
4. 负载均衡配置:3分钟让流量经过WAF
修改Nginx负载均衡器配置,把请求转发到WAF集群,而不是直接到Apache:
upstream waf_cluster {
server 192.168.0.10:80; # 主节点WAF
server 192.168.0.11:80; # 从节点1
server 192.168.0.12:80; # 从节点2
server 192.168.0.13:80; # 从节点3
server 192.168.0.14:80; # 从节点4
server 192.168.0.15:80; # 从节点5
}
server {
listen 80;
server_name order.xxx.com;
location / {
proxy_pass http://waf_cluster;
proxy_set_header Host $host;
}
}
执行nginx -s reload生效,整个防护架构就搭好了。
四、救场效果:5分钟恢复系统,领导当场表扬
部署完成后5分钟,监控数据就恢复正常:
- CPU占用从99%降到38%,所有服务器恢复正常;
- 异常请求拦截率100%,日志里全是“金额异常拦截”“高频请求拦截”的记录;
- 订单接口响应时间变回190ms,用户下单恢复正常,客服电话也不响了。
领导过来检查时,看到系统稳定运行,问我怎么搞定的。我说用了免费的雷池WAF,他都很惊讶:“免费工具能有这效果?”后来老运维回来,也说我这波操作很专业。
五、运维新手的防护心得:别把简单问题复杂化
作为入职才7天的新手,我总结了3个心得,希望能帮到同样的新人:
- 遇到攻击别慌,先查日志定位问题,异常IP、异常参数这些都是关键线索;
- 集群防护不用硬刚复杂配置,选支持主从同步的工具,能省一半时间;
- 免费工具不丢人,像雷池这种经过实战验证的开源WAF,比自己瞎配规则靠谱多了。
现在我已经把这套方案整理成文档,公司新上的项目都用这个防护。如果你也是运维新手,遇到类似的攻击问题,不妨试试这个方法,说不定能救你一次。