PVE虚拟机双网卡+雷池WAF+Suricata监控 完整配置手册
PVE虚拟机双网卡+雷池WAF+Suricata监控 完整配置手册
本文档提供从零开始的完整配置流程,涵盖PVE虚拟机双网卡配置、雷池WAF容器部署、Suricata流量监控,以及策略路由、故障排查、日常维护等核心内容,适配Debian 13系统,步骤详细可直接对照操作,重点标注关键参数和注意事项,兼顾新手友好性和生产环境实用性。
一、环境说明
1.1 系统环境
操作系统:Debian 13(推荐最小化安装,减少冗余服务)
网络拓扑:
- enp6s18:IPv6 DHCP模式,作为公网入站网卡,专门接收外部HTTPS业务流量
- enp6s19:IPv4静态IP(示例:192.168.0.252/24),作为内网出站网卡,负责流量转发至后端服务
- 网关:192.168.0.1(示例值,必须根据实际内网环境调整)
服务组件:
- 雷池WAF:基于Docker容器部署,核心作用是HTTPS流量解密、恶意请求拦截、流量转发
- Suricata:部署在宿主机,监听enp6s19网卡,捕获经过WAF解密后的HTTP流量,实现入侵检测和流量监控
1.2 流量路径(核心逻辑)
互联网IPv6流量 → enp6s18(公网入站) → 雷池WAF(HTTPS解密、安全过滤) → 策略路由强制转发 → enp6s19(内网出站) → Suricata(流量监控) → 后端业务服务
注:整个流程的核心是“双网卡分离”(公网入站与内网出站独立)和“策略路由控制”(确保WAF解密后的流量必走enp6s19),保障流量可监控、可审计。
二、前置检查与准备
前置操作是配置成功的基础,需逐一确认,避免后续步骤出现卡点。
2.1 确认网卡识别状态
登录Debian 13系统,执行以下命令,确认enp6s18和enp6s19网卡已被系统识别且状态为UP。
1 | |
正常状态:执行ip link show后,enp6s18、enp6s19行末尾显示“UP,LOWER_UP”。
/etc/network/interfaces
1 | |
2.2 确认网络环境信息(重中之重)
以下信息直接决定后续配置成败,必须根据实际网络环境确认,不可直接使用示例值:
- enp6s19所在内网的正确网关地址(不一定是192.168.0.1)
- 内网子网掩码(通常为255.255.255.0,即/24网段)
- 可用的DNS服务器地址(建议填写公网DNS或内网DNS)
执行以下命令查看当前网络信息,辅助确认:
1 | |
1 | |
1 | |
1 | |
2.3 安装必要工具
安装后续配置所需的基础工具(curl、docker等),确保命令可正常执行:
1 | |
安装完成后,可执行“docker –version”确认Docker是否安装成功。
三、网络配置(步骤详解)
本章节配置enp6s18(IPv6 DHCP)和enp6s19(IPv4静态IP),配置文件采用Debian官方推荐的interfaces.d目录,便于管理和后续修改。
3.1 配置enp6s18(IPv6 DHCP,公网入站网卡)
enp6s18作为公网入站网卡,采用IPv6 DHCP模式,无需手动配置IP,由运营商或公网路由器自动分配:
1 | |
3.2 配置enp6s19(IPv4静态IP,内网出站网卡)
重点提醒:以下配置中的address、gateway、dns-nameservers,必须替换为你的实际内网信息,不可直接复制!
1 | |
3.3 重启网络服务并验证
配置完成后,重启网络服务使配置生效,然后验证网卡IP是否配置成功:
1 | |
验证标准:enp6s19显示配置的静态IP(如192.168.0.252),enp6s18显示IPv6地址(格式如240e:xxx:xxx:xxx::xxx)。
若配置失败,执行以下命令查看日志,排查错误原因:
1 | |
3.4 测试网络连通性
确认enp6s19可正常连通内网网关和外网,避免后续路由配置失败:
1 | |
若ping不通,按以下顺序排查:
- 检查enp6s19的物理网线是否插好,交换机/路由器端口是否启用
- 确认网关地址填写正确,内网路由是否正常
- 检查内网防火墙是否拦截了ping请求
四、策略路由配置(核心步骤)
策略路由是实现“雷池WAF解密后流量强制从enp6s19出站”的核心,通过自定义路由表,指定特定源IP的流量走enp6s19网关,确保流量可被Suricata监控。
4.1 创建自定义路由表
创建编号为100、名称为custom的路由表,用于专门管理WAF流量的转发规则:
1 | |
验证标准:执行cat命令后,可看到一行“100 custom”。
4.2 配置路由表100
为自定义路由表100添加默认路由,指定所有通过该路由表的流量,都通过enp6s19网关出站:
1 | |
验证标准:执行sudo ip route show table 100后,显示“default via 192.168.0.1 dev enp6s19”。
4.3 创建持久化路由脚本
系统重启后,手动添加的路由规则会丢失,因此创建启动脚本,确保系统重启后自动配置路由表100:
1 | |
关键说明:策略路由规则(ip rule)无法在系统启动时自动添加,因为雷池容器未启动时,其实际使用的IP未知,需等容器启动后手动添加(详见第六章6.5节)。
五、Docker环境准备
雷池WAF采用Docker容器部署,需先完成Docker环境的安装和基础配置,确保容器可正常拉取和运行。
5.1 安装Docker(若未安装)
若2.3节已安装Docker,可跳过此步骤;若未安装,执行以下命令一键安装:
1 | |
验证标准:执行docker –version后,显示Docker版本信息(如Docker version 26.0.0, build 2ae903e)。
5.2 配置Docker镜像加速(可选,推荐)
默认Docker镜像源为国外,拉取雷池镜像速度较慢,配置国内镜像加速,提升拉取效率:
1 | |
六、雷池WAF部署
雷池WAF采用host网络模式部署(与宿主机共享网络栈),简化网络配置,确保能正常接收enp6s18的公网流量,同时转发流量至enp6s19。
6.1 创建雷池数据目录
创建雷池数据存储目录,用于持久化保存WAF配置、日志、证书等数据,避免容器删除后数据丢失:
1 | |
6.2 拉取雷池镜像
拉取雷池社区版(safeline-ce)最新镜像:
1 | |
若拉取速度极慢,检查5.2节的镜像加速配置是否生效。
6.3 启动雷池容器(host网络模式)
先停止并删除可能存在的旧容器,再启动新容器,确保容器环境干净:
1 | |
验证标准:执行docker ps后,safeline容器状态为“Up”;查看日志无报错信息。
6.4 获取雷池容器IP(用于策略路由)
由于雷池采用host网络模式,容器与宿主机共享网络栈,因此雷池进程使用的IP就是宿主机的IP(重点是enp6s19的静态IP):
1 | |
正常情况:雷池会监听所有IP(0.0.0.0:9443),此时策略路由的源IP应使用宿主机enp6s19的静态IP(如192.168.0.252)。
特殊情况:若雷池只监听特定IP(如127.0.0.1),需调整策略路由的源IP(此类情况极少,通常为配置错误)。
6.5 添加策略路由规则(关键步骤)
此步骤是确保“雷池解密后的流量从enp6s19出站”的核心,根据雷池实际监听的IP,添加策略规则:
情况1:雷池监听所有IP(0.0.0.0,默认情况)
1 | |
验证标准:执行ip rule list后,显示类似“32766: from 192.168.0.252 lookup 100”的规则。
情况2:雷池监听特定IP(如127.0.0.1,特殊情况)
1 | |
6.6 验证策略路由生效
执行以下命令,确认策略路由已生效,流量从enp6s19出站:
1 | |
生效标准:输出结果中包含“via 192.168.0.1 dev enp6s19 table 100”,说明流量会通过enp6s19网关出站。
6.7 配置雷池WAF(Web界面)
雷池启动后,通过Web界面完成初始化配置,包括管理员账号、监听端口、证书、转发规则等。
访问管理界面:浏览器访问
https://[宿主机IP]:9443(宿主机IP为enp6s19的静态IP,如192.168.0.252),首次访问会提示“不安全连接”,忽略警告继续访问(未配置SSL证书前正常)。初始化配置:按照向导完成管理员账号设置(用户名、密码),建议设置复杂密码,提升安全性。
关键配置项(核心,决定流量转发是否正常):
- 监听端口:添加业务端口(如443),用于接收公网HTTPS流量(enp6s18入站);保留9443端口作为管理端口。
- 转发地址:将解密后的HTTP流量,转发至后端业务服务(如127.0.0.1:80,若后端服务在其他机器,填写对应IP和端口)。
- 证书配置:上传SSL证书(推荐使用Let’s Encrypt免费证书),或通过雷池自动申请证书,确保HTTPS流量可正常解密。
保存配置:配置完成后点击保存,雷池会自动应用配置,无需重启容器。
七、Suricata安装与配置
Suricata部署在宿主机,监听enp6s19网卡,捕获雷池转发的HTTP流量,实现入侵检测、流量日志记录,便于后续审计和故障排查。
7.1 安装Suricata
1 | |
suricata:核心程序;suricata-update:用于更新Suricata的入侵检测规则库。
7.2 配置Suricata监听enp6s19
先备份原始配置文件,再修改关键参数,确保Suricata正确监听enp6s19网卡并记录HTTP日志。
1 | |
在nano编辑器中,修改以下关键配置项(按Ctrl+W搜索关键词,快速定位):
af-packet部分(网卡监听配置):
1
2
3
4
5
6
7
8af-packet:
- interface: enp6s19
cluster-id: 99
cluster-type: cluster_flow
defrag: yes
tpacket-v3: yes # 开启 V3 批处理
use-mmap: yes # 开启内存映射
ring-size: 2048 # 根据内存情况可适当调大outputs部分(日志输出配置,启用HTTP日志):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46outputs:
- eve-log:
enabled: yes
filetype: regular # 写入文件,方便 Splunk Forwarder 读取
filename: /var/log/suricata/eve.json
# 丰富元数据,便于 Splunk 进行多维分析
community-id: yes
metadata: yes
types:
# 1. 告警信息(Splunk 安全看板的核心)
- alert:
payload: yes # 记录触发规则的数据包
payload-printable: yes # 以可读文本显示负载
packet: yes # 包含数据包头
http-body: yes # 在告警中直接显示 HTTP 主体内容
tagged-packets: yes
# 2. HTTP 详细日志(你要求的扩展记录)
- http:
extended: yes # 记录 User-Agent, Host, Referer 等
extended-body-format: urlencoded
extended-body-data: both # 记录请求和响应的 Body
dump-all-headers: yes # 记录所有 HTTP 头部字段
# 3. DNS 日志(关联分析域名风险)
- dns:
query: yes
answer: yes
# 4. TLS/SSL 日志(分析加密流量,包含 SNI 和证书指纹)
- tls:
extended: yes
# 5. 流量统计(用于在 Splunk 中绘制流量趋势图)
- flow:
enabled: yes
# 6. 异常日志(记录协议解析异常,辅助排查隐藏攻击)
- anomaly:
enabled: yes
# 7. 系统统计(监控 Suricata 自身性能、丢包率)
- stats:
totals: yes
threads: nologging部分(可选,优化日志格式):
1
2
3
4
5
6
7
8
9logging:
default-log-format: "[%i] %t - (%f:%l) <%d> (%n) -- "
default-output: file
outputs:
- file:
enabled: yes
filename: /var/log/suricata/suricata.log
append: yes
level: info # 生产环境推荐 info;排查崩溃时可改用 debug
修改完成后,按Ctrl+O保存,Ctrl+X退出nano编辑器。
7.3 更新Suricata规则库
Suricata的入侵检测能力依赖规则库,需定期更新,确保能识别最新的攻击特征:
1 | |
规则库默认存储在/var/lib/suricata/rules/目录下,核心规则文件为suricata.rules。
7.4 启动Suricata服务
先测试配置文件语法是否正确,再启动服务并设置开机自启:
1 | |
验证标准:服务状态为“active (running)”,日志中无“error”相关信息。
1 | |
7.5 验证Suricata监听
确认Suricata已正常监听enp6s19网卡,且能捕获流量:
1 | |
验证标准:执行tcpdump能看到enp6s19有数据包;执行grep http能看到HTTP请求日志(如method、url、status等信息)。
八、完整验证流程
配置完成后,需按以下步骤逐一验证,确保整个流程(网络→WAF→路由→Suricata)正常运行,无异常卡点。
8.1 网络连通性验证
1 | |
8.2 雷池服务验证
1 | |
验证标准:curl命令返回雷池登录页面的HTML内容,说明管理界面正常。
8.3 流量路径验证(核心验证)
模拟外部访问,确认流量从enp6s18入站→雷池解密→enp6s19出站→Suricata捕获,流程完整:
- 打开新终端,在enp6s19网卡抓包,监听HTTP流量(80端口):
sudo tcpdump -i enp6s19 -n port 80 - 打开另一个终端,模拟外部访问雷池监听的业务端口(如443):
curl -k https://[宿主机IP]:443 # 宿主机IP为enp6s19的静态IP - 观察抓包终端:能看到enp6s19有HTTP流量(来自雷池转发的请求)。
- 查看Suricata HTTP日志:能捕获到对应的HTTP请求记录。
sudo tail -f /var/log/suricata/eve.json | grep http
验证标准:抓包终端有流量,Suricata日志有HTTP记录,说明流量路径正常。
8.4 策略路由生效验证(补充验证)
进一步确认策略路由生效,流量未从enp6s18出站:
1 | |
验证标准:enp6s19抓包有流量,enp6s18抓包无流量,说明策略路由生效,流量仅从enp6s19出站。
九、常见问题排查
配置过程中若出现异常,按以下步骤排查,覆盖90%以上的常见问题。
9.1 策略路由不生效(最常见)
症状:雷池解密后的流量未从enp6s19出站,Suricata看不到流量,或流量从enp6s18出站。
1 | |
9.2 雷池无法访问外网
症状:雷池容器无法拉取镜像、无法申请SSL证书,或无法转发流量至后端服务。
1 | |
解决方案:若iptables拦截,开放enp6s19出站权限;若网络模式错误,重新启动容器(指定–network host)。
9.3 Suricata看不到流量
症状:Suricata服务正常运行,但eve.json日志中无HTTP记录。
1 | |
9.4 系统重启后配置丢失
症状:系统重启后,策略路由规则消失,或雷池、Suricata服务未自动启动。
1 | |
解决方案:若服务未开机自启,执行sudo systemctl enable 服务名;策略规则需在容器启动后手动添加(可写入雷池容器启动脚本)。
十、维护与监控
配置完成后,需定期进行维护和监控,确保系统稳定运行,及时发现并处理异常。
10.1 日常监控命令
1 | |
10.2 定期维护任务
- 更新Suricata规则库(每天1次,确保能识别最新攻击):
sudo suricata-update - 清理旧日志(每周1次,避免日志占用过多磁盘空间):
sudo find /var/log/suricata -name "*.log" -mtime +7 -delete ``sudo find /var/log/suricata -name "*.json" -mtime +7 -delete - 更新雷池镜像(每月1次,获取最新功能和安全修复):
docker pull chaitin/safeline-ce:latestdocker stop safelinedocker rm safeline ``docker run -d --name safeline --network host --restart unless-stopped -v /opt/safeline:/opt/safeline chaitin/safeline-ce - 更新系统补丁(每月1次,提升系统安全性):
sudo apt update && sudo apt upgrade -y
10.3 备份配置
定期备份核心配置和数据,避免配置丢失或故障后无法恢复:
1 | |
注:需先创建/backup目录(sudo mkdir /backup),建议将备份文件同步至其他设备,提升安全性。
十一、安全注意事项
本配置涉及公网入站流量,需做好安全加固,避免被攻击或未授权访问。
11.1 防火墙配置
配置iptables防火墙,限制不必要的端口访问,仅开放业务所需端口:
1 | |
注:雷池管理界面(9443)建议限制内网IP访问,避免公网直接访问。
11.2 服务加固
- 雷池管理界面:设置复杂管理员密码,定期更换;条件允许时,限制访问IP。
- Suricata配置:将suricata.yaml文件权限设置为600(仅root可读写),避免配置被篡改。
- Docker安全:定期更新Docker镜像和Docker引擎,避免容器漏洞;禁止容器使用特权模式。
- 系统安全:禁用root用户远程登录,创建普通用户并赋予sudo权限;开启SSH密钥登录,关闭密码登录。
十二、附录:完整配置脚本
以下是自动化配置脚本框架,可根据实际环境修改参数后执行,快速完成基础配置(网络、路由、Docker),后续手动部署雷池和Suricata。
1 | |
脚本使用说明
- 将脚本保存为setup-network.sh(如:sudo nano setup-network.sh)。
- 修改脚本开头的配置参数(enp6s19_IP、enp6s19_GATEWAY等),替换为你的实际环境信息。
- 给脚本添加执行权限:chmod +x setup-network.sh。
- 执行脚本:sudo ./setup-network.sh。
- 脚本执行完成后,按手册第六章、第七章,手动部署雷池和Suricata。
十三、总结
本手册涵盖了PVE虚拟机双网卡+雷池WAF+Suricata监控的完整配置流程,核心要点总结如下:
- 网络配置:enp6s18(IPv6 DHCP)负责公网入站,enp6s19(IPv4静态IP)负责内网出站,必须确保网卡配置正确、网络连通。
- 策略路由:通过自定义路由表100和策略规则,强制雷池解密后的流量从enp6s19出站,是实现流量监控的核心。
- 容器部署:雷池采用host网络模式,简化网络配置,确保能正常接收公网流量并转发。
- 监控配置:Suricata监听enp6s19网卡,启用HTTP日志,实现流量捕获和入侵检测。
重要提醒:
- 所有IP地址、网关、子网掩码,必须根据你的实际网络环境修改,不可直接使用示例值。
- 策略路由中的源IP,需根据雷池实际监听的IP调整,确保流量转发路径正确。
- 建议先在测试环境验证完整流程,确认无问题后,再部署到生产环境。
- 定期备份配置、更新规则和补丁,做好安全加固,保障系统稳定运行。
若在配置过程中遇到问题,可提供以下信息以便快速诊断:
- ip addr、ip route、ip rule list 命令的输出结果
- docker ps、docker logs safeline 命令的输出结果
- journalctl -u suricata -f 命令的日志输出
- /etc/network/interfaces.d/ 目录下的配置文件内容