WAF 工作在 HTTP 层,只看 Web 请求。但网络攻击远不止 Web——端口扫描、暴力破解、恶意软件通信、横向移动——这些都需要在网络层进行全流量检测。IDS(Intrusion Detection System,入侵检测系统)和 IPS(Intrusion Prevention System,入侵防御系统)是在网络流量中识别恶意行为的核心工具。
一、IDS 与 IPS 的工程差异
1.1 部署模式
IDS 和 IPS 的核心区别不在检测能力,而在部署位置和处理方式:
IDS(旁路检测) IPS(串联阻断)
流量 流量
│ │
├───→ 交换机镜像口 │
│ │ ↓
↓ ↓ ┌──────────┐
目标主机 IDS │ IPS │
│ │ 检测+阻断 │
只检测、告警 └─────┬────┘
不影响流量 │
↓
目标主机
工程权衡对比:
| 维度 | IDS(检测模式) | IPS(防御模式) |
|---|---|---|
| 部署方式 | 旁路(TAP / SPAN) | 串联(Inline) |
| 对流量影响 | 零 | 增加延迟(微秒–毫秒级) |
| 误报后果 | 告警噪音 | 阻断合法流量(业务中断) |
| 漏报后果 | 攻击未被发现 | 攻击未被发现 |
| 故障影响 | IDS 宕机不影响业务 | IPS 宕机可能中断流量 |
| 性能要求 | 可容忍丢包 | 不能丢包 |
| 适用阶段 | 初期部署、调优期 | 规则成熟后 |
实际工程中,通常先以 IDS 模式部署和调优规则,确认误报率可控后再切换到 IPS 模式。Suricata 同时支持两种模式。
1.2 检测方法论
入侵检测有两大类方法:
基于签名的检测(Signature-based):将流量与已知攻击特征(签名)进行匹配。类似杀毒软件的病毒库——精度高但只能检测已知攻击。
基于异常的检测(Anomaly-based):建立正常流量的基线,偏离基线的行为被标记为异常。可以检测未知攻击,但误报率高、基线建立困难。
基于签名 基于异常
已知攻击特征库 正常行为基线
↓ ↓
流量 → 模式匹配 流量 → 统计分析
↓ ↓
匹配 → 告警 偏离 → 告警
优点:精度高、可解释 优点:能检测未知攻击
缺点:无法检测 0-day 缺点:误报率高
二、Suricata 架构与部署
2.1 为什么选择 Suricata
Suricata 是目前最主流的开源 IDS/IPS 引擎。相比老牌 Snort,它的核心优势是多线程架构:
| 特性 | Snort 2.x | Snort 3.x | Suricata |
|---|---|---|---|
| 线程模型 | 单线程 | 多线程 | 多线程 |
| 规则兼容 | Snort 格式 | Snort 格式(改进) | 兼容 Snort + 扩展 |
| 应用层协议解析 | 有限 | 改进 | 丰富(HTTP/TLS/DNS/SSH/SMB…) |
| 文件提取 | 有限 | 支持 | 原生支持 |
| 输出格式 | Unified2 | 多种 | Eve JSON(推荐) |
| Lua 脚本 | 有限 | 支持 | 原生支持 |
| 社区规则 | ET 规则 | ET + Snort 规则 | ET 规则(默认) |
2.2 Suricata 的多线程架构
┌──────────────────────────────────┐
│ Suricata 多线程架构 │
└──────────────────────────────────┘
网络流量 ──→ ┌──────────────┐
│ 抓包线程 │ AF_PACKET / Netmap / DPDK
│ (Capture) │ 每个网卡接口一组
└──────┬───────┘
│
┌──────┴───────┐
│ Flow Worker │ 多个 Worker 线程
│ 线程池 │ 每个线程独立处理一组流
├──────────────┤
│ • 解码 │
│ • 流追踪 │
│ • 协议解析 │
│ • 签名匹配 │
│ • 告警生成 │
└──────┬───────┘
│
┌──────┴───────┐
│ 输出线程 │
│ (Output) │ Eve JSON / Unified2 / 文件提取
└──────────────┘
Flow 分配机制:同一条流(五元组相同)的所有包被分配到同一个 Worker 线程。这避免了跨线程的状态同步,同时利用了 CPU 缓存局部性。
2.3 安装与基础配置
# Ubuntu 22.04 安装 Suricata
apt-get install -y software-properties-common
add-apt-repository -y ppa:oisf/suricata-stable
apt-get update
apt-get install -y suricata suricata-update
# 查看版本
suricata --build-info | head -5核心配置文件:
# /etc/suricata/suricata.yaml 关键配置
# 网络定义
vars:
address-groups:
HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
EXTERNAL_NET: "!$HOME_NET"
DNS_SERVERS: "$HOME_NET"
HTTP_SERVERS: "$HOME_NET"
port-groups:
HTTP_PORTS: "80"
SHELLCODE_PORTS: "!80"
SSH_PORTS: "22"
# 抓包引擎(推荐 AF_PACKET)
af-packet:
- interface: eth0
threads: auto # 自动匹配 CPU 核数
cluster-id: 99
cluster-type: cluster_flow # 按流分配到线程
defrag: yes
use-mmap: yes # 使用 mmap 减少拷贝
ring-size: 200000 # 环形缓冲区大小
buffer-size: 32768
# 多线程配置
threading:
set-cpu-affinity: yes # 启用 CPU 亲和
cpu-affinity:
- management-cpu-set:
cpu: [0]
- receive-cpu-set:
cpu: [1]
- worker-cpu-set:
cpu: [2, 3, 4, 5, 6, 7]
mode: exclusive
# 输出配置
outputs:
- eve-log:
enabled: yes
filetype: regular
filename: eve.json
types:
- alert:
payload: yes # 包含触发 payload
payload-printable: yes # 可打印格式
http-body: yes # 包含 HTTP body
http-body-printable: yes
- http:
extended: yes # 完整 HTTP 日志
- dns
- tls:
extended: yes
- files:
force-magic: yes # 文件类型检测
force-hash: [md5, sha256]
- flow
- stats:
totals: yes
threads: yes2.4 规则更新
# 使用 suricata-update 管理规则
suricata-update
# 启用 ET Open 规则(默认)
suricata-update enable-source et/open
# 启用其他规则源
suricata-update enable-source oisf/trafficid
suricata-update enable-source ptresearch/attackdetection
# 查看可用规则源
suricata-update list-sources
# 更新规则后重载 Suricata(不中断服务)
suricatasc -c reload-rules
# 定时更新(crontab)
# 0 */6 * * * /usr/bin/suricata-update && /usr/bin/suricatasc -c reload-rules三、Suricata 规则编写
3.1 规则语法
Suricata 兼容 Snort 规则格式,并在此基础上做了扩展:
# 规则基本格式
action protocol source_ip source_port -> dest_ip dest_port (options)
# 各部分说明:
# action: alert | pass | drop | reject | rejectsrc | rejectdst | rejectboth
# protocol: tcp | udp | icmp | ip | http | dns | tls | ssh | ftp | smtp ...
# 方向: ->(单向)| <>(双向)
# options: 关键词=值; 组成的检测逻辑
示例规则集合:
# 1. 检测 SSH 暴力破解
alert ssh $EXTERNAL_NET any -> $HOME_NET 22 (\
msg:"SSH Brute Force Attempt"; \
flow:to_server,established; \
threshold: type both, track by_src, count 5, seconds 60; \
classtype:attempted-admin; \
sid:1000001; rev:1;)
# 2. 检测可疑的 DNS 查询(DGA 域名特征)
alert dns $HOME_NET any -> any any (\
msg:"Suspicious DNS Query - Possible DGA Domain"; \
dns.query; \
pcre:"/^[a-z]{15,30}\.(com|net|org|info)$/i"; \
threshold: type threshold, track by_src, count 10, seconds 300; \
classtype:trojan-activity; \
sid:1000002; rev:1;)
# 3. 检测 HTTP 中的 Web Shell 上传
alert http $EXTERNAL_NET any -> $HTTP_SERVERS any (\
msg:"Web Shell Upload Detected"; \
flow:to_server,established; \
http.method; content:"POST"; \
http.uri; content:"/upload"; \
file.data; content:"<?php"; \
file.data; content:"eval("; distance:0; \
classtype:web-application-attack; \
sid:1000003; rev:1;)
# 4. 检测 TLS 证书中的可疑 CN(常见恶意软件特征)
alert tls $HOME_NET any -> $EXTERNAL_NET any (\
msg:"Suspicious TLS Certificate - Self-Signed with random CN"; \
flow:established,to_server; \
tls.cert_subject; \
pcre:"/CN=[a-f0-9]{32,}/i"; \
classtype:trojan-activity; \
sid:1000004; rev:1;)
# 5. 检测 ICMP 隧道(大于正常大小的 ICMP 包)
alert icmp $HOME_NET any -> any any (\
msg:"Possible ICMP Tunnel - Oversized ICMP Packet"; \
dsize:>512; \
itype:8; \
threshold: type both, track by_src, count 20, seconds 60; \
classtype:misc-activity; \
sid:1000005; rev:1;)
3.2 应用层关键词
Suricata 的最大优势之一是丰富的应用层协议解析关键词:
# HTTP 关键词
http.method; # HTTP 方法
http.uri; # 请求 URI(归一化后)
http.uri.raw; # 请求 URI(原始)
http.host; # Host 头
http.request_header; # 请求头
http.response_header; # 响应头
http.request_body; # 请求体
http.response_body; # 响应体
http.stat_code; # 响应状态码
http.content_type; # Content-Type
http.user_agent; # User-Agent
file.data; # 上传文件内容
# DNS 关键词
dns.query; # DNS 查询域名
dns.opcode; # 操作码
# TLS 关键词
tls.version; # TLS 版本
tls.subject; # 证书 Subject
tls.issuerdn; # 证书颁发者
tls.sni; # SNI(Server Name Indication)
tls.cert_serial; # 证书序列号
tls.ja3.hash; # JA3 指纹(客户端)
tls.ja3s.hash; # JA3S 指纹(服务端)
# SSH 关键词
ssh.proto; # SSH 协议版本
ssh.software; # SSH 软件标识
3.3 JA3/JA3S TLS 指纹
JA3 是通过 TLS ClientHello 中的参数生成的客户端指纹。相同的 TLS 库/应用通常产生相同的 JA3 hash,即使 IP 地址变化。这在恶意软件检测中非常有价值:
JA3 指纹计算:
MD5(TLSVersion + Ciphersuites + Extensions +
EllipticCurves + EllipticCurvePointFormats)
例如 Trickbot 恶意软件的 JA3 hash:
72a589da586844d7f0818ce684948eea
正常 Chrome 浏览器的 JA3 hash:
473cd7cb9faa642487833865d516e578
基于 JA3 的检测规则:
# 检测已知恶意软件的 JA3 指纹
alert tls $HOME_NET any -> $EXTERNAL_NET any (\
msg:"Known Malware JA3 Fingerprint - Trickbot"; \
flow:established,to_server; \
ja3.hash; \
content:"72a589da586844d7f0818ce684948eea"; \
classtype:trojan-activity; \
sid:1000010; rev:1;)
# 检测非浏览器 TLS 连接到标准 HTTPS 端口
# 排除已知合法 JA3 hash
alert tls $HOME_NET any -> $EXTERNAL_NET 443 (\
msg:"Non-Browser TLS Connection to HTTPS Port"; \
flow:established,to_server; \
ja3.hash; \
content:!"473cd7cb9faa642487833865d516e578"; \
content:!"b32309a26951912be7dba376398abc3b"; \
threshold: type threshold, track by_src, count 50, seconds 300; \
classtype:policy-violation; \
sid:1000011; rev:1;)
3.4 Lua 脚本扩展
当 Suricata 内置关键词无法满足检测需求时,可以使用 Lua 脚本实现复杂逻辑:
-- /etc/suricata/lua/detect_dns_tunnel.lua
-- 检测 DNS 隧道:查询名的信息熵过高
function init(args)
local needs = {}
needs["dns.rrname"] = tostring(true)
return needs
end
function match(args)
local rrname = tostring(args["dns.rrname"])
if rrname == nil then return 0 end
-- 计算域名标签的香农熵
local label = rrname:match("^([^.]+)")
if label == nil or #label < 10 then return 0 end
local freq = {}
for i = 1, #label do
local c = label:sub(i, i)
freq[c] = (freq[c] or 0) + 1
end
local entropy = 0
for _, count in pairs(freq) do
local p = count / #label
entropy = entropy - p * math.log(p) / math.log(2)
end
-- 正常域名熵值通常 < 3.5
-- DNS 隧道编码数据的熵值通常 > 4.0
if entropy > 4.0 and #label > 20 then
return 1
end
return 0
end引用 Lua 脚本的规则:
alert dns $HOME_NET any -> any any (\
msg:"DNS Tunnel Detected - High Entropy Query"; \
lua:detect_dns_tunnel.lua; \
classtype:trojan-activity; \
sid:1000020; rev:1;)
四、流量基线与异常检测
4.1 建立流量基线
异常检测的前提是理解”正常”流量。以下是建立网络流量基线的方法论:
# 使用 Suricata 的 stats 输出建立基线
# Eve JSON 中 event_type: stats 的数据
# 关键基线指标
# 1. 每秒数据包数(PPS)
# 2. 每秒字节数(BPS)
# 3. 每秒新建 TCP 流数
# 4. DNS 查询速率
# 5. HTTP 请求速率
# 6. 各协议流量占比
# 从 Suricata stats 中提取基线数据
cat /var/log/suricata/eve.json | \
python3 -c "
import sys, json
for line in sys.stdin:
try:
ev = json.loads(line)
if ev.get('event_type') == 'stats':
stats = ev.get('stats', {})
cap = stats.get('capture', {})
decoder = stats.get('decoder', {})
flow = stats.get('flow', {})
print(f\"Timestamp: {ev.get('timestamp')}\")
print(f\" Packets: {cap.get('kernel_packets', 0)}\")
print(f\" Drops: {cap.get('kernel_drops', 0)}\")
print(f\" TCP: {decoder.get('tcp', 0)}\")
print(f\" UDP: {decoder.get('udp', 0)}\")
print(f\" Flows: {flow.get('tcp', 0)} TCP, {flow.get('udp', 0)} UDP\")
print()
except:
pass
" | head -604.2 异常检测模型
# 基于统计的异常检测示例
# 使用移动平均 + 标准差的方法
import json
import sys
from collections import deque
import math
class AnomalyDetector:
def __init__(self, window_size=60, threshold_sigma=3):
self.window = deque(maxlen=window_size)
self.threshold_sigma = threshold_sigma
def update(self, value):
self.window.append(value)
if len(self.window) < 10:
return False, 0 # 数据不足
mean = sum(self.window) / len(self.window)
variance = sum((x - mean) ** 2 for x in self.window) \
/ len(self.window)
std = math.sqrt(variance)
if std == 0:
return False, 0
z_score = (value - mean) / std
is_anomaly = abs(z_score) > self.threshold_sigma
return is_anomaly, z_score
# 监控 DNS 查询速率
dns_detector = AnomalyDetector(window_size=120, threshold_sigma=3)
for line in sys.stdin:
try:
ev = json.loads(line)
if ev.get('event_type') == 'stats':
dns_count = ev['stats'].get('app_layer', {}) \
.get('flow', {}).get('dns_tcp', 0) + \
ev['stats'].get('app_layer', {}) \
.get('flow', {}).get('dns_udp', 0)
is_anomaly, z_score = dns_detector.update(dns_count)
if is_anomaly:
print(f"ANOMALY: DNS query rate z-score={z_score:.2f}"
f" value={dns_count}"
f" at {ev.get('timestamp')}")
except:
pass4.3 常见异常检测场景
| 检测场景 | 基线指标 | 异常判定 | 可能原因 |
|---|---|---|---|
| DNS 隧道 | DNS 查询速率、查询名长度 | 查询速率突增 + 查询名异常长 | 数据外泄 |
| 端口扫描 | 每 IP 目标端口数 | 短时间访问 >20 端口 | 侦察活动 |
| 暴力破解 | 每 IP 认证失败次数 | 1 分钟内 >10 次失败 | 账户攻击 |
| C&C 通信 | 出站连接的时间规律性 | 周期性连接到同一目标 | 恶意软件 |
| 数据外泄 | 出站流量大小 | 非业务时段的大量上传 | 数据泄露 |
| ARP 欺骗 | ARP 响应频率 | 短时间大量 ARP 响应 | 中间人攻击 |
五、Eve JSON 日志分析
5.1 Eve JSON 格式
Suricata 的 Eve JSON 是其最核心的输出格式——一个 JSON Lines 文件,每行一个事件。事件类型包括 alert、http、dns、tls、flow、stats 等。
// alert 事件示例
{
"timestamp": "2025-01-15T10:23:45.123456+0800",
"event_type": "alert",
"src_ip": "198.51.100.5",
"src_port": 45678,
"dest_ip": "192.168.1.10",
"dest_port": 80,
"proto": "TCP",
"alert": {
"action": "allowed",
"gid": 1,
"signature_id": 2024897,
"rev": 3,
"signature": "ET WEB_SERVER SQL Injection Attempt",
"category": "Web Application Attack",
"severity": 1
},
"http": {
"hostname": "example.com",
"url": "/search?q=1'+OR+1=1--",
"http_method": "GET",
"http_user_agent": "Mozilla/5.0",
"status": 200,
"length": 4523
},
"payload": "R0VUIC9zZWFyY2g/cT0...",
"payload_printable": "GET /search?q=1' OR 1=1--...",
"flow_id": 1234567890,
"pcap_cnt": 42
}5.2 日志分析实战
# 告警统计——按签名分组
cat /var/log/suricata/eve.json | \
jq -r 'select(.event_type=="alert") | .alert.signature' | \
sort | uniq -c | sort -rn | head -20
# 按源 IP 统计告警数
cat /var/log/suricata/eve.json | \
jq -r 'select(.event_type=="alert") | .src_ip' | \
sort | uniq -c | sort -rn | head -20
# 按严重级别统计
cat /var/log/suricata/eve.json | \
jq -r 'select(.event_type=="alert") | .alert.severity | tostring' | \
sort | uniq -c | sort -rn
# 查看特定 IP 的所有告警
cat /var/log/suricata/eve.json | \
jq 'select(.event_type=="alert" and .src_ip=="198.51.100.5")' | head -50
# TLS 证书信息提取
cat /var/log/suricata/eve.json | \
jq -r 'select(.event_type=="tls") |
[.dest_ip, .tls.sni // "N/A", .tls.subject // "N/A",
.tls.ja3.hash // "N/A"] | @tsv' | head -20
# DNS 查询统计——找出查询最多的域名
cat /var/log/suricata/eve.json | \
jq -r 'select(.event_type=="dns" and .dns.type=="query") |
.dns.rrname' | sort | uniq -c | sort -rn | head -305.3 SIEM 集成
Suricata ──→ Eve JSON ──→ ┌─────────────┐
│ Filebeat │ ← 日志采集
└──────┬──────┘
│
┌──────┴──────┐
│ Logstash / │ ← 解析与丰富
│ Ingest Node │
└──────┬──────┘
│
┌──────┴──────┐
│ Elastic- │ ← 存储与索引
│ search │
└──────┬──────┘
│
┌──────┴──────┐
│ Kibana / │ ← 可视化与告警
│ Grafana │
└─────────────┘
Filebeat 配置:
# /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/suricata/eve.json
json.keys_under_root: true
json.add_error_key: true
output.elasticsearch:
hosts: ["http://elasticsearch:9200"]
index: "suricata-%{+yyyy.MM.dd}"
# Suricata 模块(推荐,自动处理字段映射)
# filebeat modules enable suricata六、性能调优与容量规划
6.1 性能瓶颈分析
# 检查 Suricata 是否有丢包
cat /var/log/suricata/eve.json | \
jq 'select(.event_type=="stats") |
{timestamp,
kernel_packets: .stats.capture.kernel_packets,
kernel_drops: .stats.capture.kernel_drops,
drop_rate: ((.stats.capture.kernel_drops // 0) * 100.0 /
((.stats.capture.kernel_packets // 1) | if . == 0 then 1 else . end))}' | \
tail -5
# 丢包率 > 1% 需要关注
# 丢包率 > 5% 需要立即优化常见瓶颈与优化:
| 瓶颈 | 表现 | 优化措施 |
|---|---|---|
| CPU 不足 | 丢包率高、Worker 线程 CPU 饱和 | 增加 Worker 线程、减少规则数 |
| 内存不足 | 流表溢出、内存 OOM | 增加内存、调整流超时 |
| 抓包丢包 | kernel_drops 增长 | 增大 ring-size、使用 AF_PACKET mmap |
| 规则过多 | 签名匹配耗时长 | 禁用无关规则、优化规则顺序 |
| 磁盘 I/O | 日志写入延迟 | 使用 SSD、异步写入 |
6.2 关键调优参数
# /etc/suricata/suricata.yaml 性能调优
# 流管理
flow:
memcap: 256mb # 流表内存上限
hash-size: 65536 # 哈希表大小(2^n)
prealloc: 10000 # 预分配流条目
# 流超时(减小以降低内存使用)
flow-timeouts:
default:
new: 30
established: 300
closed: 0
bypassed: 100
emergency-new: 10
emergency-established: 100
emergency-closed: 0
# 协议解析层内存限制
app-layer:
protocols:
http:
memcap: 64mb
request-body-limit: 131072 # 只检查前 128KB
response-body-limit: 131072
dns:
memcap: 16mb
tls:
memcap: 32mb
encryption-handling: bypass # TLS 握手后绕过检测
smtp:
enabled: no # 不需要时禁用
ftp:
enabled: no
# 签名引擎调优
detect:
profile: high # high / medium / low / custom
sgh-mpm-context: auto
inspection-recursion-limit: 3000
# 规则分组和预过滤
# Suricata 自动将规则按协议/端口分组
# 使用 prefilter 加速匹配
prefilter:
default: mpm # Multi-Pattern Matcher6.3 容量规划参考
经验法则:
- 1 Gbps 线速检测 ≈ 4 核 CPU + 8 GB 内存
- 10 Gbps 线速检测 ≈ 16 核 CPU + 32 GB 内存
- 40 Gbps 线速检测 ≈ 需要 DPDK/Netmap 抓包模式
内存估算:
- 每条活跃流 ≈ 1–4 KB
- 10 万并发流 ≈ 400 MB
- 规则集(ET Open 约 30,000 条)≈ 500 MB 编译后
- 协议解析缓冲 ≈ 根据 memcap 设置
磁盘估算(Eve JSON):
- 每条告警日志 ≈ 1–2 KB
- 完整 HTTP 日志 ≈ 500 字节/请求
- 1 Gbps 流量全日志 ≈ 50–200 GB/天
- 建议使用日志轮转 + 30 天保留
6.4 高可用部署
┌───────────────────────┐
│ 网络 TAP / SPAN │
│ (流量镜像) │
└────────┬──────────────┘
│
┌────────┴──────────┐
│ 负载均衡 TAP │
│ (按流分发) │
└──┬────────────┬───┘
│ │
┌────────┴───┐ ┌────┴────────┐
│ Suricata 1 │ │ Suricata 2 │
│ (主) │ │ (备/扩展) │
└─────┬──────┘ └──────┬──────┘
│ │
┌─────┴────────────────┴─────┐
│ Elasticsearch │
│ (集中日志存储与分析) │
└────────────────────────────┘
七、IDS/IPS 运维检查清单
| 检查项 | 频率 | 方法 |
|---|---|---|
| 规则更新 | 每日 | suricata-update + reload-rules |
| 丢包率检查 | 每小时 | 监控 kernel_drops |
| 告警分诊 | 每日 | 按严重级别和类型分组分析 |
| 误报审核 | 每周 | 抽样检查 severity 1 告警 |
| 规则有效性测试 | 每月 | 回放已知攻击 pcap |
| 性能基线对比 | 每月 | 对比 PPS、CPU、内存趋势 |
| 规则集瘦身 | 季度 | 禁用 0 命中规则 |
| 签名覆盖评估 | 季度 | 对照 MITRE ATT&CK 矩阵 |
# 查看规则命中统计(识别无用规则)
cat /var/log/suricata/eve.json | \
jq -r 'select(.event_type=="alert") | .alert.signature_id' | \
sort | uniq -c | sort -rn > /tmp/rule_hits.txt
# 获取所有已加载规则的 SID
grep -oP 'sid:\K\d+' /var/lib/suricata/rules/*.rules | \
sort -u > /tmp/all_sids.txt
# 找出 0 命中的规则(候选禁用)
comm -23 /tmp/all_sids.txt \
<(awk '{print $2}' /tmp/rule_hits.txt | sort -u) | \
wc -l
echo "条规则在过去一段时间内零命中"参考文献
- OISF, “Suricata User Guide,” suricata.readthedocs.io.
- OISF, “Suricata Rule Documentation,” suricata.readthedocs.io/en/latest/rules/.
- Albin, E., and Rowe, N.C., “A Realistic Experimental Comparison of the Suricata and Snort Intrusion-Detection Systems,” IEEE WAINA, 2012.
- Salesforce Engineering, “Open Sourcing JA3: SSL/TLS Client Fingerprinting,” engineering.salesforce.com, 2017.
- Proofpoint, “Emerging Threats Open Ruleset,” rules.emergingthreats.net.
- MITRE ATT&CK, “Network-Based Detection Techniques,” attack.mitre.org.
- Elastic, “Suricata Module for Filebeat,” elastic.co/guide/en/beats/filebeat.
- Stamus Networks, “Suricata Performance Tuning,” stamus-networks.com.
上一篇: WAF 工程:规则设计、误报控制与绕过防御 下一篇: VPN 技术工程对比:IPSec vs WireGuard vs OpenVPN
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【网络工程】DDoS 防御架构:容量型、协议型与应用层攻击
DDoS 攻击分为容量型、协议型和应用层三大类,防御策略截然不同。本文从攻击分类学出发,系统讲解 SYN Flood 的 SYN Cookie 防御、UDP 反射放大的 BGP Flowspec 清洗、HTTP Flood 的速率限制与行为分析,以及 Anycast 清洗中心的工作原理,构建从边缘到源站的多层 DDoS 防御体系。
【网络工程】VPN 技术工程对比:IPSec vs WireGuard vs OpenVPN
VPN 是企业网络互联和远程访问的核心技术。本文从 IPSec 的 IKE/ESP/AH 协议栈、WireGuard 的 Cryptokey Routing 设计、OpenVPN 的 TLS 隧道模型,到三者在性能、安全、运维复杂度上的工程对比,系统讲解 VPN 技术的选型与部署实践。
网络工程索引
汇总本站网络工程系列文章,覆盖分层模型、以太网、IP、TCP、DNS、TLS、HTTP/2/3、CDN、BGP 与故障诊断。
【网络工程】QUIC 生态与工程部署:从实验到生产
QUIC 已经不是实验性协议——HTTP/3 标准化后,CDN、浏览器和主流服务端框架都在推进 QUIC 支持。本文从工程视角对比主流 QUIC 库的成熟度和性能特征,讲解 CDN/负载均衡器的 QUIC 适配方案、从 TCP 迁移到 QUIC 的渐进路径、QUIC 调试工具链,以及生产环境的部署陷阱和性能调优实践。