Ubuntu Tomcat 防 DDoS 实用方案
一 分层防护思路
- 在网络边界/云侧优先开启防护:使用CDN或Anti-DDoS 高防IP/流量清洗隐藏源站、吸收大流量并做协议层清洗,这是应对大流量/带宽耗尽型攻击的最有效手段。源站在接入 CDN 后,需在 Tomcat 正确获取X-Forwarded-For等头部以记录真实客户端 IP。对于云上业务,可结合ELB/原生防护联动,丢弃未监听协议与端口的流量,降低源站压力。
- 在主机与系统层做连接与协议栈加固:启用SYN Cookie、调优TCP 队列与重试、限制ICMP/Ping、必要时对异常来源做速率限制与封禁。
- 在Tomcat 层减少攻击面与资源占用:删除默认应用、禁用AJP与自动部署、限制管理端访问、降权运行、升级版本;同时针对应用层 DoS(如慢速 POST、暴力登录、滥用 HTTP 方法)进行专项配置与代码层防护。
二 网络与系统层加固
- 边界与云侧
- 启用CDN或高防IP/流量清洗,对外仅暴露 CDN/高防节点,源站仅与清洗中心或 CDN 回源通信;在控制台开启默认或自定义策略并配置告警。
- 源站 Tomcat 获取真实 IP:在反向代理/CDN 开启X-Forwarded-For,Tomcat 通过请求属性读取并用于日志与访问控制。
- 主机与内核
- 开启SYN Cookie并调优队列与重试,缓解SYN Flood:
- net.ipv4.tcp_syncookies = 1
- net.ipv4.tcp_max_syn_backlog = 4096
- net.ipv4.tcp_synack_retries = 2
- net.ipv4.tcp_syn_retries = 2
- 限制ICMP与异常握手/扫描流量,降低噪声与放大风险:
- iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
- iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
- iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
- 调整TIME_WAIT复用与回收,缓解连接耗尽(注意不同内核版本对 tw_recycle 的兼容差异,必要时仅启用 tw_reuse):
- net.ipv4.tcp_fin_timeout = 30
- net.ipv4.tcp_keepalive_time = 1200
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_max_tw_buckets = 5000
- net.ipv4.ip_local_port_range = 1024 65000
- 动态封禁高频异常来源:结合fail2ban或DDoS Deflate对异常 IP 自动封禁,缩短攻击窗口。
三 Tomcat 服务与应用层加固
- 减少攻击面
- 删除webapps下默认应用:docs、examples、ROOT、host-manager、manager。
- 禁用AJP连接器(如 AJP/8009 未使用),避免不必要协议暴露与历史漏洞面。
- 关闭自动部署:server.xml 中设置 autoDeploy=“false”、deployOnStartup=“false”。
- 降权运行:创建非 root专用用户启动 Tomcat,严格目录权限。
- 升级至最新稳定版,及时修补已知漏洞。
- 管理端与认证
- 限制manager/host-manager访问(仅内网 IP 或禁用),修改tomcat-users.xml使用强密码且仅授予必要角色。
- 防止暴力破解:配置FailedLoginAttempts或采用 Tomcat 的LockoutRealm在一定失败次数后自动锁定来源。
- 应用层 DoS 专项
- 禁用不需要的 HTTP 方法(如 PUT、DELETE、OPTIONS、TRACE、HEAD):在应用的 web.xml 或全局 conf/web.xml 的 security-constraint 中限制。
- 缓解Slow HTTP DoS:缩短连接器超时,例如将 connectionTimeout 调整为 8000 ms(默认常见为 20000 ms)。
- 会话与 Cookie:为会话 Cookie 设置 HttpOnly,降低被脚本窃取风险。
- 统一异常处理:配置 error-page(如 403/404/500)避免泄露堆栈与敏感信息。
四 监控 响应与演练
- 监控与告警
- 在 Tomcat 启用访问日志并输出X-Forwarded-For,结合fail2ban或脚本对异常 IP/UA/速率进行自动封禁与告警。
- 使用 netstat/ss 与日志分析识别异常连接与来源,例如统计连接数 Top N 的 IP,作为封禁与取证依据。
- 处置流程
- 发现异常时,先在边界/云侧开启或调高清洗策略,临时封禁攻击网段;在主机侧通过iptables限速/封禁,观察业务恢复情况。
- 攻击缓解后复盘规则阈值、日志与告警链路,补齐短板(如漏放行白名单、阈值过低/过高)。
- 演练与容量规划
- 定期进行压力测试与攻防演练,验证连接数、线程池、超时、WAF/防火墙规则的有效性,并据此调整内核参数、Tomcat 线程与连接器配置,确保在峰值时仍有冗余容量。