三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

TongWeb7实战:构筑Web应用防火墙,精准防御慢速攻击与Host头篡改

TongWeb7实战:构筑Web应用防火墙,精准防御慢速攻击与Host头篡改

1. 慢速攻击防御实战:从原理到配置

第一次遇到慢速攻击时,我盯着监控图表看了半天——CPU和内存占用率缓慢爬升,连接数却异常稳定。这种"温水煮青蛙"式的攻击比暴力DDoS更难察觉,等发现时服务器已经濒临崩溃。慢速攻击的精妙之处在于它完美利用了HTTP协议的特性:攻击者建立连接后,像挤牙膏一样以极慢的速度发送数据,一个字节能拖上几分钟,而服务器却要一直维持这个连接。

TongWeb7的防御机制设计得很聪明,它通过三个关键参数构建了立体防护:

  1. complete.message.timeout.seconds(默认0):这个时间阈值就像给每个请求装上沙漏。我通常设置为30秒——普通API请求根本用不了这么久,但恶意连接就会现出原形。曾经有个电商项目,设置20秒后成功拦截了80%的慢速攻击。

  2. max.attack.times(默认3):相当于"事不过三"原则。某次金融系统迁移时,我们发现正常用户偶尔也会超时,就把容忍次数调到5次,既防住了攻击又避免了误伤。

  3. blacklist.expired.hours(默认12):黑名单不是永久监狱。有次运维同事误把自己IP加黑,这个自动释放机制避免了半夜紧急处理。

配置示例(tongweb.xml片段):

<property> <name>complete.message.timeout.seconds</name> <value>30</value> </property> <property> <name>max.attack.times</name> <value>5</value> </property>

注意:在负载均衡环境下,需要在前端设备做防御配置。我有次在Nginx层漏配了这个,结果TongWeb7拦截的全是负载均衡器的IP,闹了个大乌龙。

2. Host头攻击防御:看不见的域名劫持

去年帮一家支付平台做安全审计时,发现他们的JSP页面有这样一行代码:

<% String baseUrl = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath(); %>

攻击者只要篡改Host头,就能让所有基于这个URL的请求跳转到钓鱼网站。TongWeb7的主机名白名单功能就像给服务器装了门禁系统:

  1. 精确匹配模式:适合固定域名场景。比如配置"api.example.com"后,任何其他Host头都会被拒绝。

  2. 通配符模式:适合多子域名环境。像".example.com"可以匹配所有子域名,但要注意不能写成""这样完全放行。

配置示例:

<host-header> <enabled>true</enabled> <whitelist> <value>api.example.com</value> <value>*.test.example.com</value> </whitelist> </host-header>

实测发现,启用这个功能后系统开销几乎可以忽略不计。有次紧急上线忘了配置白名单,导致移动端APP全部请求被拒,这个教训让我现在每次部署都先检查这份名单。

3. 阈值调优实战指南

安全防护不是开关按钮,而是精细的平衡艺术。根据多年经验,我总结出这些黄金法则:

慢速攻击参数调优表

业务类型超时阈值容忍次数适用场景
金融交易系统15-20s3-5次短连接高安全要求
内容管理系统30-60s5-10次含大文件上传
IoT设备接入120s+10次+低速网络环境

调试时建议先用监控工具(如Prometheus)建立基线:

  1. 统计正常请求的完成时间分布
  2. 观察最大并发连接数
  3. 记录异常请求特征

有次给视频平台做配置,发现用户上传4K视频时总会触发防御。最后把超时阈值设为300秒,同时开启连接数限制,完美解决问题。

4. 架构适配与故障排查

在复杂架构中部署时,这些经验可能会救你一命:

多层架构配置要点

  • 反向代理层:必须在Nginx/Apache处开启proxy_set_header Host $host;
  • 微服务网关:Spring Cloud Gateway需要配置preserveHostHeader=true
  • 容器环境:Kubernetes Ingress要设置allow-http: "false"

常见故障排查流程:

  1. 检查access.log中的503响应
  2. 确认黑名单IP是否预期内
  3. 测试时用curl模拟攻击:
# 慢速攻击测试 curl -X POST -H "Content-Length: 1000000" -d "1=1" http://example.com --limit-rate 100 # Host头测试 curl -H "Host: evil.com" http://actual.ip.address

最近遇到个典型案例:某系统迁移到K8s后频繁出现403错误,最后发现是Ingress Controller的Host重写规则与TongWeb7的白名单冲突。这类问题需要从整个请求链路来排查。

← 返回列表