七层协议攻防实战从HTTP慢速攻击到DNS隧道检测
目录
七层协议攻防实战:从HTTP慢速攻击到DNS隧道检测
一、七层协议攻击类型与特征
攻击类型 | 协议 | 特征 |
---|---|---|
HTTP慢速攻击 | HTTP | 低速率发送不完整请求 |
DNS隧道 | DNS | 异常长域名、高频率TXT查询 |
API滥用攻击 | HTTP | 高频调用关键接口(如短信发送) |
WebSocket洪水 | WebSocket | 海量小消息耗尽服务器资源 |
二、HTTP协议深度防护
1. 慢速攻击防御(Nginx配置)
http {
# 限制请求头和体的读取时间
client_header_timeout 10s;
client_body_timeout 10s;
# 限制请求速率
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/s;
server {
location / {
limit_req zone=api_limit burst=200;
# 限制最小传输速率(100字节/秒)
client_body_in_file_only on;
client_body_temp_path /dev/shm/;
client_max_body_size 1m;
limit_rate_after 1k;
limit_rate 100;
}
}
}
2. 请求特征过滤(OpenResty Lua脚本)
location /api {
access_by_lua_block {
local headers = ngx.req.get_headers()
-- 拦截无User-Agent请求
if not headers["User-Agent"] then
ngx.exit(ngx.HTTP_FORBIDDEN)
end
-- 拦截非常规HTTP方法
local method = ngx.req.get_method()
if not ({GET=true, POST=true})[method] then
ngx.exit(ngx.HTTP_NOT_ALLOWED)
end
}
}
三、DNS协议定制防护
1. DNS隧道检测(Python深度学习)
import tensorflow as tf
import numpy as np
# 特征:域名长度、熵值、子域名数量
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation='relu', input_shape=(3,)),
tf.keras.layers.Dense(1, activation='sigmoid')
])
def predict_dns_tunnel(domain):
features = [
len(domain),
entropy(domain),
domain.count('.')
]
return model.predict(np.array([features]))[0] > 0.9
def entropy(s):
p, lns = tf.unique(tf.strings.bytes_split(s))
return -tf.reduce_sum(p * tf.math.log(p))
2. DNS查询限频(Bind配置)
options {
rate-limit {
responses-per-second 50;
window 5;
qps-scale 100;
};
};
zone "example.com" {
type master;
file "db.example.com";
# 限制单个客户端查询频率
rate-limit {
responses-per-second 10;
window 3;
};
};
四、WebSocket协议防护
1. 消息频率限制(Node.js示例)
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', (ws) => {
let messageCount = 0;
setInterval(() => messageCount = 0, 1000); // 每秒重置计数
ws.on('message', (data) => {
if (++messageCount > 100) {
ws.close(1008, '消息频率超限');
return;
}
// 正常处理消息
});
});
2. 协议头校验(Go语言实现)
func handleWebSocket(w http.ResponseWriter, r *http.Request) {
// 校验Origin头
if r.Header.Get("Origin") != "https://example.com" {
http.Error(w, "Invalid Origin", http.StatusForbidden)
return
}
// 校验协议版本
if !strings.Contains(r.Header.Get("Sec-WebSocket-Version"), "13") {
http.Error(w, "Unsupported Version", http.StatusUpgradeRequired)
return
}
// 升级连接...
}
五、防御工具链与监控体系
- 应用层防火墙
:
ModSecurity(自定义规则示例):
SecRule REQUEST_URI "@contains /api/send_sms" \ "id:1001,phase:2,deny,log,msg:'SMS API滥用'"
- 日志分析平台
:
- ELK Stack(检测异常请求模式)
- Grafana(可视化实时QPS)
- 云WAF集成
:
- AWS WAF(速率限制规则)
- Cloudflare Workers(边缘JS挑战)
六、防御效果验证方法
压力测试工具 :
# 模拟HTTP慢速攻击 slowhttptest -c 1000 -u https://example.com -r 10 # 发送畸形WebSocket帧 wsdump.py --fragment 1000 ws://example.com
防御验证指标 :
- 攻击期间CPU占用率 < 70%
- 正常请求成功率 > 99.9%
- 攻击IP自动封禁时间 < 5秒