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
2
3
4
5
6
# 查看所有网卡的识别状态(重点看enp6s18、enp6s19是否存在)
ip link show

# 若网卡未启用(状态为DOWN),执行以下命令启用
sudo ip link set enp6s18 up
sudo ip link set enp6s19 up

正常状态:执行ip link show后,enp6s18、enp6s19行末尾显示“UP,LOWER_UP”。

/etc/network/interfaces

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
root@SafeLine:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interfaceauto
auto enp6s18
iface enp6s18 inet6 auto

auto enp6s19
iface enp6s19 inet static
address 192.168.0.252
netmask 255.255.255.0
# gateway 192.168.0.1
post-up sysctl -w net.ipv6.conf.enp6s19.disable_ipv6=1

2.2 确认网络环境信息(重中之重)

以下信息直接决定后续配置成败,必须根据实际网络环境确认,不可直接使用示例值:

  • enp6s19所在内网的正确网关地址(不一定是192.168.0.1)
  • 内网子网掩码(通常为255.255.255.0,即/24网段)
  • 可用的DNS服务器地址(建议填写公网DNS或内网DNS)

执行以下命令查看当前网络信息,辅助确认:

1
2
3
4
5
# 查看当前路由表(确认内网网关)
ip route show

# 查看当前DNS配置
cat /etc/resolv.conf
1
2
3
4
root@SafeLine:~# ip route show
169.254.222.0/24 dev safeline-ce proto kernel scope link src 169.254.222.1
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.0.0/24 dev enp6s19 proto kernel scope link src 192.168.0.252
1
2
3
4
5
6
7
8
9
10
11
root@SafeLine:~# ip -6 route show
2408:8256:3380:b7ca::/64 dev enp6s18 proto kernel metric 256 expires 7167sec pref medium
fe80::/64 dev safeline-ce proto kernel metric 256 pref medium
fe80::/64 dev vethe79c489 proto kernel metric 256 pref medium
fe80::/64 dev vethba2f508 proto kernel metric 256 pref medium
fe80::/64 dev vethc9f58cf proto kernel metric 256 pref medium
fe80::/64 dev veth734d2d5 proto kernel metric 256 pref medium
fe80::/64 dev vethdd65138 proto kernel metric 256 pref medium
fe80::/64 dev vethf81c58c proto kernel metric 256 pref medium
fe80::/64 dev enp6s18 proto kernel metric 256 pref medium
default via fe80::ae33:28ff:fe4f:a570 dev enp6s18 proto ra metric 1024 expires 1767sec mtu 1492 hoplimit 64 pref high
1
2
3
nameserver 2001:4860:4860::8888
nameserver 2606:4700:4700::1111
nameserver 192.168.0.1

2.3 安装必要工具

安装后续配置所需的基础工具(curl、docker等),确保命令可正常执行:

1
2
3
4
sudo apt update  # 更新软件源
sudo apt install -y curl wget tcpdump net-tools docker.io docker-compose

# docker.io docker-compose 已安装

安装完成后,可执行“docker –version”确认Docker是否安装成功。

三、网络配置(步骤详解)

本章节配置enp6s18(IPv6 DHCP)和enp6s19(IPv4静态IP),配置文件采用Debian官方推荐的interfaces.d目录,便于管理和后续修改。

3.1 配置enp6s18(IPv6 DHCP,公网入站网卡)

enp6s18作为公网入站网卡,采用IPv6 DHCP模式,无需手动配置IP,由运营商或公网路由器自动分配:

1
2
auto enp6s18
iface enp6s18 inet6 auto

3.2 配置enp6s19(IPv4静态IP,内网出站网卡)

重点提醒:以下配置中的address、gateway、dns-nameservers,必须替换为你的实际内网信息,不可直接复制!

1
2
3
4
5
6
7
8
9
auto enp6s19
iface enp6s19 inet static
address 192.168.0.252
netmask 255.255.255.0
gateway 192.168.0.1
# 关键点:设置一个很大的 metric 值(默认通常是 0 或 100)
# 数字越大,优先级越低。2048 确保它不会干扰主出口。
metric 2048
post-up sysctl -w net.ipv6.conf.enp6s19.disable_ipv6=1

3.3 重启网络服务并验证

配置完成后,重启网络服务使配置生效,然后验证网卡IP是否配置成功:

1
2
3
4
5
6
# 重启网络服务(Debian 13推荐使用此命令)
sudo systemctl restart networking

# 验证enp6s18、enp6s19配置(查看IP是否正确分配)
ip addr show enp6s18 # 查看enp6s18的IPv6地址
ip addr show enp6s19 # 查看enp6s19的IPv4静态IP

验证标准:enp6s19显示配置的静态IP(如192.168.0.252),enp6s18显示IPv6地址(格式如240e:xxx:xxx:xxx::xxx)。

若配置失败,执行以下命令查看日志,排查错误原因:

1
journalctl -u networking -f

3.4 测试网络连通性

确认enp6s19可正常连通内网网关和外网,避免后续路由配置失败:

1
2
3
4
5
# 测试enp6s19与内网网关的连通性(替换为你的实际网关)
ping -I enp6s19 192.168.0.1

# 测试enp6s19的外网连通性(通过网关访问公网)
ping -I enp6s19 8.8.8.8

若ping不通,按以下顺序排查:

  1. 检查enp6s19的物理网线是否插好,交换机/路由器端口是否启用
  2. 确认网关地址填写正确,内网路由是否正常
  3. 检查内网防火墙是否拦截了ping请求

四、策略路由配置(核心步骤)

策略路由是实现“雷池WAF解密后流量强制从enp6s19出站”的核心,通过自定义路由表,指定特定源IP的流量走enp6s19网关,确保流量可被Suricata监控。

4.1 创建自定义路由表

创建编号为100、名称为custom的路由表,用于专门管理WAF流量的转发规则:

1
2
3
4
5
# 添加路由表100(写入/etc/iproute2/rt_tables文件,永久生效)
echo "100 custom" | sudo tee -a /etc/iproute2/rt_tables

# 验证路由表是否添加成功
cat /etc/iproute2/rt_tables

验证标准:执行cat命令后,可看到一行“100 custom”。

4.2 配置路由表100

为自定义路由表100添加默认路由,指定所有通过该路由表的流量,都通过enp6s19网关出站:

1
2
3
4
5
# 添加默认路由(替换为你的enp6s19网关)
sudo ip route add default via 192.168.0.1 dev enp6s19 table 100

# 验证路由表100的配置
sudo ip route show table 100

验证标准:执行sudo ip route show table 100后,显示“default via 192.168.0.1 dev enp6s19”。

4.3 创建持久化路由脚本

系统重启后,手动添加的路由规则会丢失,因此创建启动脚本,确保系统重启后自动配置路由表100:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建路由持久化脚本(在网络接口启动后执行)
sudo tee /etc/network/if-up.d/persistent-routing << 'EOF'
#!/bin/bash
# 等待网络接口完全启动(避免脚本执行过早导致失败)
sleep 2
# 为路由表100添加默认路由(替换为你的enp6s19网关)
ip route add default via 192.168.0.1 dev enp6s19 table 100
# 策略路由规则暂不添加:雷池容器未启动时,其IP未知,需手动添加
# ip rule add from 172.17.0.2 lookup 100
echo "路由表100已配置,策略规则需雷池容器启动后手动添加"
EOF

# 给脚本添加执行权限(否则无法自动执行)
sudo chmod +x /etc/network/if-up.d/persistent-routing

关键说明:策略路由规则(ip rule)无法在系统启动时自动添加,因为雷池容器未启动时,其实际使用的IP未知,需等容器启动后手动添加(详见第六章6.5节)。

五、Docker环境准备

雷池WAF采用Docker容器部署,需先完成Docker环境的安装和基础配置,确保容器可正常拉取和运行。

5.1 安装Docker(若未安装)

若2.3节已安装Docker,可跳过此步骤;若未安装,执行以下命令一键安装:

1
2
3
4
5
6
7
8
9
# 一键安装Docker(官方脚本,适配Debian系统)
curl -fsSL https://get.docker.com | sudo sh

# 启动Docker服务,并设置开机自启
sudo systemctl enable docker
sudo systemctl start docker

# 验证Docker安装成功
docker --version

验证标准:执行docker –version后,显示Docker版本信息(如Docker version 26.0.0, build 2ae903e)。

5.2 配置Docker镜像加速(可选,推荐)

默认Docker镜像源为国外,拉取雷池镜像速度较慢,配置国内镜像加速,提升拉取效率:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建Docker配置目录(若不存在)
sudo mkdir -p /etc/docker

# 写入镜像加速配置
sudo tee /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn", # 中科大镜像源
"https://hub-mirror.c.163.com" # 网易镜像源
]
}
EOF

# 重启Docker服务,使加速配置生效
sudo systemctl restart docker

六、雷池WAF部署

雷池WAF采用host网络模式部署(与宿主机共享网络栈),简化网络配置,确保能正常接收enp6s18的公网流量,同时转发流量至enp6s19。

6.1 创建雷池数据目录

创建雷池数据存储目录,用于持久化保存WAF配置、日志、证书等数据,避免容器删除后数据丢失:

1
2
sudo mkdir -p /opt/safeline  # 创建目录
sudo chmod 755 /opt/safeline # 设置目录权限,确保容器可读写

6.2 拉取雷池镜像

拉取雷池社区版(safeline-ce)最新镜像:

1
docker pull chaitin/safeline-ce:latest

若拉取速度极慢,检查5.2节的镜像加速配置是否生效。

6.3 启动雷池容器(host网络模式)

先停止并删除可能存在的旧容器,再启动新容器,确保容器环境干净:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 停止旧容器(若存在)
docker stop safeline 2>/dev/null || true

# 删除旧容器(若存在)
docker rm safeline 2>/dev/null || true

# 启动新容器(host网络模式,开机自启)
docker run -d \
--name safeline \
--network host \ # 关键:使用host网络,与宿主机共享IP和端口
--restart unless-stopped \ # 容器异常退出时自动重启
-v /opt/safeline:/opt/safeline \ # 挂载数据目录,持久化数据
chaitin/safeline-ce

# 查看容器运行状态
docker ps

# 查看容器启动日志(排查启动失败问题)
docker logs safeline

验证标准:执行docker ps后,safeline容器状态为“Up”;查看日志无报错信息。

6.4 获取雷池容器IP(用于策略路由)

由于雷池采用host网络模式,容器与宿主机共享网络栈,因此雷池进程使用的IP就是宿主机的IP(重点是enp6s19的静态IP):

1
2
# 查看雷池进程监听的IP和端口(默认管理端口9443)
sudo netstat -tulpn | grep 9443

正常情况:雷池会监听所有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
2
3
4
5
# 以enp6s19的静态IP为源IP,匹配所有流量,使用路由表100(走enp6s19网关)
sudo ip rule add from 192.168.0.252 lookup 100

# 验证策略规则是否添加成功
ip rule list

验证标准:执行ip rule list后,显示类似“32766: from 192.168.0.252 lookup 100”的规则。

情况2:雷池监听特定IP(如127.0.0.1,特殊情况)

1
2
# 替换为雷池实际监听的IP
sudo ip rule add from 127.0.0.1 lookup 100

6.6 验证策略路由生效

执行以下命令,确认策略路由已生效,流量从enp6s19出站:

1
2
# 测试:从enp6s19的IP访问外网,查看路由路径
ip route get 8.8.8.8 from 192.168.0.252

生效标准:输出结果中包含“via 192.168.0.1 dev enp6s19 table 100”,说明流量会通过enp6s19网关出站。

6.7 配置雷池WAF(Web界面)

雷池启动后,通过Web界面完成初始化配置,包括管理员账号、监听端口、证书、转发规则等。

  1. 访问管理界面:浏览器访问 https://[宿主机IP]:9443(宿主机IP为enp6s19的静态IP,如192.168.0.252),首次访问会提示“不安全连接”,忽略警告继续访问(未配置SSL证书前正常)。

  2. 初始化配置:按照向导完成管理员账号设置(用户名、密码),建议设置复杂密码,提升安全性。

  3. 关键配置项(核心,决定流量转发是否正常):

    1. 监听端口:添加业务端口(如443),用于接收公网HTTPS流量(enp6s18入站);保留9443端口作为管理端口。
    2. 转发地址:将解密后的HTTP流量,转发至后端业务服务(如127.0.0.1:80,若后端服务在其他机器,填写对应IP和端口)。
    3. 证书配置:上传SSL证书(推荐使用Let’s Encrypt免费证书),或通过雷池自动申请证书,确保HTTPS流量可正常解密。
  4. 保存配置:配置完成后点击保存,雷池会自动应用配置,无需重启容器。

七、Suricata安装与配置

Suricata部署在宿主机,监听enp6s19网卡,捕获雷池转发的HTTP流量,实现入侵检测、流量日志记录,便于后续审计和故障排查。

7.1 安装Suricata

1
2
sudo apt update
sudo apt install -y suricata suricata-update

suricata:核心程序;suricata-update:用于更新Suricata的入侵检测规则库。

7.2 配置Suricata监听enp6s19

先备份原始配置文件,再修改关键参数,确保Suricata正确监听enp6s19网卡并记录HTTP日志。

1
2
3
4
5
# 备份原始配置文件(避免修改出错,便于回滚)
sudo cp /etc/suricata/suricata.yaml /etc/suricata/suricata.yaml.bak

# 编辑配置文件(使用nano编辑器,简单易操作)
sudo nano /etc/suricata/suricata.yaml

在nano编辑器中,修改以下关键配置项(按Ctrl+W搜索关键词,快速定位):

  1. af-packet部分(网卡监听配置):

    1
    2
    3
    4
    5
    6
    7
    8
    af-packet:
    - interface: enp6s19
    cluster-id: 99
    cluster-type: cluster_flow
    defrag: yes
    tpacket-v3: yes # 开启 V3 批处理
    use-mmap: yes # 开启内存映射
    ring-size: 2048 # 根据内存情况可适当调大
  2. 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
    46
    outputs:
    - 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: no
  3. logging部分(可选,优化日志格式):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    logging:
    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
2
3
4
5
# 更新规则库(首次安装必须执行)
sudo suricata-update

# 查看规则库目录(确认规则已更新)
ls -la /var/lib/suricata/rules/

规则库默认存储在/var/lib/suricata/rules/目录下,核心规则文件为suricata.rules。

7.4 启动Suricata服务

先测试配置文件语法是否正确,再启动服务并设置开机自启:

1
2
3
4
5
6
7
8
9
10
11
12
# 测试配置文件语法(无报错即正常)
sudo suricata -T -c /etc/suricata/suricata.yaml

# 启动Suricata服务,设置开机自启
sudo systemctl enable suricata
sudo systemctl start suricata

# 查看服务运行状态
sudo systemctl status suricata

# 查看Suricata系统日志(排查启动失败问题)
sudo tail -f /var/log/suricata/suricata.log

验证标准:服务状态为“active (running)”,日志中无“error”相关信息。

1
2
3
root@SafeLine:~# ps aux | grep suricata
root 3070214 0.9 2.1 712616 85528 ? Ssl 17:44 0:09 /usr/bin/suricata -D --af-packet -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid
root 3077177 0.0 0.0 9424 2312 pts/0 S+ 18:00 0:00 grep suricata

7.5 验证Suricata监听

确认Suricata已正常监听enp6s19网卡,且能捕获流量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看Suricata进程(确认进程正在运行)
ps aux | grep suricata

root@SafeLine:~# ps aux | grep suricata
root 3070214 0.9 2.1 712616 85528 ? Ssl 17:44 0:09 /usr/bin/suricata -D --af-packet -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid
root 3077177 0.0 0.0 9424 2312 pts/0 S+ 18:00 0:00 grep suricata


# 查看Suricata监听端口(默认无固定端口,监听网卡流量)
sudo netstat -tulpn | grep suricata

# 查看enp6s19网卡是否有流量(抓包测试)
sudo tcpdump -i enp6s19 -n -c 10 # 捕获10个enp6s19的数据包

# 查看HTTP日志(确认能捕获HTTP流量)
sudo tail -f /var/log/suricata/eve.json | grep http

验证标准:执行tcpdump能看到enp6s19有数据包;执行grep http能看到HTTP请求日志(如method、url、status等信息)。

八、完整验证流程

配置完成后,需按以下步骤逐一验证,确保整个流程(网络→WAF→路由→Suricata)正常运行,无异常卡点。

8.1 网络连通性验证

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 确认两张网卡都有正确IP
ip addr show enp6s18
ip addr show enp6s19

# 2. 测试enp6s19与内网、外网的连通性
ping -I enp6s19 192.168.0.1 # 内网网关
ping -I enp6s19 8.8.8.8 # 外网

# 3. 测试策略路由是否生效
ip rule list # 确认策略规则存在
ip route show table 100 # 确认路由表100配置正常
ip route get 8.8.8.8 from 192.168.0.252 # 确认流量走enp6s19

8.2 雷池服务验证

1
2
3
4
5
6
7
8
# 1. 查看容器状态(确保Up状态)
docker ps

# 2. 查看雷池容器日志(无报错)
docker logs safeline

# 3. 测试雷池管理界面可访问
curl -k https://localhost:9443 # -k忽略SSL证书警告

验证标准:curl命令返回雷池登录页面的HTML内容,说明管理界面正常。

8.3 流量路径验证(核心验证)

模拟外部访问,确认流量从enp6s18入站→雷池解密→enp6s19出站→Suricata捕获,流程完整:

  1. 打开新终端,在enp6s19网卡抓包,监听HTTP流量(80端口): sudo tcpdump -i enp6s19 -n port 80
  2. 打开另一个终端,模拟外部访问雷池监听的业务端口(如443): curl -k https://[宿主机IP]:443 # 宿主机IP为enp6s19的静态IP
  3. 观察抓包终端:能看到enp6s19有HTTP流量(来自雷池转发的请求)。
  4. 查看Suricata HTTP日志:能捕获到对应的HTTP请求记录。 sudo tail -f /var/log/suricata/eve.json | grep http

验证标准:抓包终端有流量,Suricata日志有HTTP记录,说明流量路径正常。

8.4 策略路由生效验证(补充验证)

进一步确认策略路由生效,流量未从enp6s18出站:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 方法1:使用traceroute查看路由路径(从enp6s19 IP出站)
traceroute -s 192.168.0.252 8.8.8.8

# 方法2:使用mtr查看实时路由(更直观)
mtr -s 192.168.0.252 8.8.8.8

# 方法3:同时在enp6s18、enp6s19抓包,观察流量出站网卡
# 终端1:抓enp6s18流量
sudo tcpdump -i enp6s18 -n host 8.8.8.8
# 终端2:抓enp6s19流量
sudo tcpdump -i enp6s19 -n host 8.8.8.8
# 终端3:发起请求
curl -k https://[宿主机IP]:443

验证标准:enp6s19抓包有流量,enp6s18抓包无流量,说明策略路由生效,流量仅从enp6s19出站。

九、常见问题排查

配置过程中若出现异常,按以下步骤排查,覆盖90%以上的常见问题。

9.1 策略路由不生效(最常见)

症状:雷池解密后的流量未从enp6s19出站,Suricata看不到流量,或流量从enp6s18出站。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 排查步骤:
# 1. 检查策略规则是否存在
ip rule list

# 2. 检查路由表100配置是否正常
ip route show table 100

# 3. 确认雷池实际使用的源IP(关键)
docker exec safeline ip addr show # 查看容器内IP(host模式与宿主机一致)
sudo netstat -tulpn | grep safeline # 查看雷池进程监听IP

# 4. 重新添加策略规则(若源IP不匹配)
sudo ip rule del from 192.168.0.252 lookup 100 # 删除旧规则
sudo ip rule add from [雷池实际IP] lookup 100 # 添加新规则

9.2 雷池无法访问外网

症状:雷池容器无法拉取镜像、无法申请SSL证书,或无法转发流量至后端服务。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 排查步骤:
# 1. 测试容器内网络连通性
docker exec safeline ping 8.8.8.8

# 2. 检查容器网络模式(必须为host)
docker inspect safeline | grep NetworkMode

# 3. 检查宿主机iptables是否拦截流量
sudo iptables -L -n

# 4. 检查Docker网络配置
docker network ls
docker network inspect bridge

解决方案:若iptables拦截,开放enp6s19出站权限;若网络模式错误,重新启动容器(指定–network host)。

9.3 Suricata看不到流量

症状:Suricata服务正常运行,但eve.json日志中无HTTP记录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 排查步骤:
# 1. 检查Suricata服务是否正常运行
sudo systemctl status suricata

# 2. 检查监听网卡配置(必须为enp6s19)
grep "interface:" /etc/suricata/suricata.yaml

# 3. 检查enp6s19是否有流量(确认流量路径正确)
sudo tcpdump -i enp6s19 -n -c 5

# 4. 检查日志目录权限(确保Suricata能写入日志)
ls -la /var/log/suricata/

# 5. 重启Suricata服务(配置修改后未重启)
sudo systemctl restart suricata

9.4 系统重启后配置丢失

症状:系统重启后,策略路由规则消失,或雷池、Suricata服务未自动启动。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 排查步骤:
# 1. 检查路由持久化脚本是否执行
cat /var/log/syslog | grep persistent-routing

# 2. 手动执行脚本,测试是否能正常配置路由表
sudo /etc/network/if-up.d/persistent-routing

# 3. 检查雷池、Suricata是否设置开机自启
sudo systemctl is-enabled docker
sudo systemctl is-enabled suricata

# 4. 手动添加策略规则(容器启动后)
sudo ip rule add from 192.168.0.252 lookup 100

解决方案:若服务未开机自启,执行sudo systemctl enable 服务名;策略规则需在容器启动后手动添加(可写入雷池容器启动脚本)。

十、维护与监控

配置完成后,需定期进行维护和监控,确保系统稳定运行,及时发现并处理异常。

10.1 日常监控命令

1
2
3
4
5
6
7
8
9
10
11
12
# 查看雷池容器资源占用(CPU、内存)
docker stats safeline

# 实时查看Suricata系统日志
sudo tail -f /var/log/suricata/suricata.log

# 查看Suricata流量统计(请求数、检测到的异常等)
sudo suricatasc -c stats

# 查看系统网络状态(端口监听、连接数)
netstat -tulpn
ss -tulpn # 比netstat更高效

10.2 定期维护任务

  1. 更新Suricata规则库(每天1次,确保能识别最新攻击): sudo suricata-update
  2. 清理旧日志(每周1次,避免日志占用过多磁盘空间): sudo find /var/log/suricata -name "*.log" -mtime +7 -delete ``sudo find /var/log/suricata -name "*.json" -mtime +7 -delete
  3. 更新雷池镜像(每月1次,获取最新功能和安全修复): docker pull chaitin/safeline-ce:latestdocker stop safeline docker rm safeline ``docker run -d --name safeline --network host --restart unless-stopped -v /opt/safeline:/opt/safeline chaitin/safeline-ce
  4. 更新系统补丁(每月1次,提升系统安全性): sudo apt update && sudo apt upgrade -y

10.3 备份配置

定期备份核心配置和数据,避免配置丢失或故障后无法恢复:

1
2
3
4
5
6
7
8
9
# 1. 备份网络配置(interfaces.d目录)
sudo tar czf /backup/network-config-$(date +%Y%m%d).tar.gz /etc/network/

# 2. 备份Suricata配置和规则
sudo cp /etc/suricata/suricata.yaml /backup/
sudo tar czf /backup/suricata-rules-$(date +%Y%m%d).tar.gz /var/lib/suricata/rules/

# 3. 备份雷池数据(配置、证书、日志)
sudo tar czf /backup/safeline-data-$(date +%Y%m%d).tar.gz /opt/safeline/

注:需先创建/backup目录(sudo mkdir /backup),建议将备份文件同步至其他设备,提升安全性。

十一、安全注意事项

本配置涉及公网入站流量,需做好安全加固,避免被攻击或未授权访问。

11.1 防火墙配置

配置iptables防火墙,限制不必要的端口访问,仅开放业务所需端口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 允许enp6s18入站443端口(HTTPS业务流量)
sudo iptables -A INPUT -i enp6s18 -p tcp --dport 443 -j ACCEPT

# 允许enp6s18入站9443端口(雷池管理界面,建议仅允许内网IP访问)
# sudo iptables -A INPUT -i enp6s18 -s 192.168.0.0/24 -p tcp --dport 9443 -j ACCEPT

# 允许enp6s19出站所有流量(转发至后端服务)
sudo iptables -A OUTPUT -o enp6s19 -j ACCEPT

# 允许回环接口(127.0.0.1)访问
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

# 拒绝其他所有入站流量(默认拒绝,提升安全性)
sudo iptables -A INPUT -j DROP

注:雷池管理界面(9443)建议限制内网IP访问,避免公网直接访问。

11.2 服务加固

  • 雷池管理界面:设置复杂管理员密码,定期更换;条件允许时,限制访问IP。
  • Suricata配置:将suricata.yaml文件权限设置为600(仅root可读写),避免配置被篡改。
  • Docker安全:定期更新Docker镜像和Docker引擎,避免容器漏洞;禁止容器使用特权模式。
  • 系统安全:禁用root用户远程登录,创建普通用户并赋予sudo权限;开启SSH密钥登录,关闭密码登录。

十二、附录:完整配置脚本

以下是自动化配置脚本框架,可根据实际环境修改参数后执行,快速完成基础配置(网络、路由、Docker),后续手动部署雷池和Suricata。

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/bin/bash
set -e # 脚本执行出错时,立即退出

# 配置参数(根据实际环境修改!!!)
enp6s19_IP="192.168.0.252" # 你的enp6s19静态IP
enp6s19_GATEWAY="192.168.0.1" # 你的enp6s19网关
enp6s19_NETMASK="255.255.255.0" # 你的内网子网掩码
DNS_SERVERS="8.8.8.8 114.114.114.114" # 可用的DNS服务器

echo "开始配置PVE双网卡环境(Debian 13)..."

# 1. 配置enp6s18(IPv6 DHCP)
echo "配置enp6s18(IPv6 DHCP)..."
sudo tee /etc/network/interfaces.d/enp6s18 << EOF
auto enp6s18
iface enp6s18 inet6 dhcp
accept_ra 2
EOF

# 2. 配置enp6s19(IPv4静态IP)
echo "配置enp6s19(IPv4静态IP)..."
sudo tee /etc/network/interfaces.d/enp6s19 << EOF
auto enp6s19
iface enp6s19 inet static
address $enp6s19_IP
netmask $enp6s19_NETMASK
gateway $enp6s19_GATEWAY
dns-nameservers $DNS_SERVERS
EOF

# 3. 重启网络服务
echo "重启网络服务..."
sudo systemctl restart networking

# 4. 配置策略路由(自定义路由表100)
echo "配置策略路由..."
echo "100 custom" | sudo tee -a /etc/iproute2/rt_tables
sudo ip route add default via $enp6s19_GATEWAY dev enp6s19 table 100

# 5. 创建路由持久化脚本
echo "创建路由持久化脚本..."
sudo tee /etc/network/if-up.d/persistent-routing << EOF
#!/bin/bash
sleep 2
ip route add default via $enp6s19_GATEWAY dev enp6s19 table 100
echo "路由表100已配置,策略规则需容器启动后手动添加"
EOF
sudo chmod +x /etc/network/if-up.d/persistent-routing

# 6. 安装Docker(若未安装)
if ! command -v docker &> /dev/null; then
echo "安装Docker..."
curl -fsSL https://get.docker.com | sudo sh
fi

# 7. 启动Docker服务并设置开机自启
sudo systemctl enable docker
sudo systemctl start docker

echo "基础配置完成!请继续手动部署雷池WAF和Suricata。"
echo "重要提醒:雷池容器启动后,必须执行以下命令添加策略路由规则:"
echo "sudo ip rule add from $enp6s19_IP lookup 100"
echo "后续请参考手册,完成雷池Web配置和Suricata配置。"

脚本使用说明

  1. 将脚本保存为setup-network.sh(如:sudo nano setup-network.sh)。
  2. 修改脚本开头的配置参数(enp6s19_IP、enp6s19_GATEWAY等),替换为你的实际环境信息。
  3. 给脚本添加执行权限:chmod +x setup-network.sh。
  4. 执行脚本:sudo ./setup-network.sh。
  5. 脚本执行完成后,按手册第六章、第七章,手动部署雷池和Suricata。

十三、总结

本手册涵盖了PVE虚拟机双网卡+雷池WAF+Suricata监控的完整配置流程,核心要点总结如下:

  1. 网络配置:enp6s18(IPv6 DHCP)负责公网入站,enp6s19(IPv4静态IP)负责内网出站,必须确保网卡配置正确、网络连通。
  2. 策略路由:通过自定义路由表100和策略规则,强制雷池解密后的流量从enp6s19出站,是实现流量监控的核心。
  3. 容器部署:雷池采用host网络模式,简化网络配置,确保能正常接收公网流量并转发。
  4. 监控配置: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/ 目录下的配置文件内容

PVE虚拟机双网卡+雷池WAF+Suricata监控 完整配置手册
https://hesc.info/post/pve-virtual-machine-dual-network-card-leichi-waf-suricata-monitoring-complete-configuration-z1u41x9.html
作者
需要哈气的纸飞机
发布于
2026年4月11日
许可协议