17. 为Linux设置IPS/内联模式¶
17.1. 使用Netfilter设置IPS¶
本指南将讨论如何使用 iptables
在第三层 内联模式 下运行Suricata。
首先,确保编译Suricata时启用了NFQ支持。具体步骤请参考 Ubuntu安装指南 。关于NFQ和 iptables
的更多信息,请参阅 suricata-yaml-nfq 。
要检查Suricata是否启用了NFQ支持,可以运行以下命令:
suricata --build-info
确保输出中包含NFQ。
要以NFQ模式运行Suricata,需要使用 -q
选项指定队列号:
sudo suricata -c /etc/suricata/suricata.yaml -q 0
17.1.1. Iptables配置¶
首先,明确需要将哪些流量发送到Suricata。有两种选择:
经过本机的流量
本机生成的流量


如果Suricata运行在网关上用于保护后端设备(第一种场景),需处理 转发 流量。 如果用于保护本机(第二种场景),则处理 主机 流量(见图2)。 两种模式也可以组合使用。
网关场景下最简单的规则是将所有转发流量发送到Suricata:
sudo iptables -I FORWARD -j NFQUEUE
主机场景下的基础规则如下:
sudo iptables -I INPUT -j NFQUEUE
sudo iptables -I OUTPUT -j NFQUEUE
默认队列号为0,也可手动指定。例如,仅检查TCP流量或特定端口的流量:
sudo iptables -I INPUT -p tcp -j NFQUEUE
sudo iptables -I OUTPUT -p tcp -j NFQUEUE
或针对端口80的流量:
sudo iptables -I INPUT -p tcp --sport 80 -j NFQUEUE
sudo iptables -I OUTPUT -p tcp --dport 80 -j NFQUEUE


验证规则是否正确:
sudo iptables -vnL
输出中可查看数据包统计(示例见图)。

上述命令适用于IPv4,IPv6需将 iptables
替换为 ip6tables
。也可同时检查两种流量。
多网卡场景的配置示例:
sudo iptables -I FORWARD -i eth0 -o eth1 -j NFQUEUE
sudo iptables -I FORWARD -i eth1 -o eth0 -j NFQUEUE
停止Suricata时需清除所有规则以恢复网络:
sudo iptables -F
17.1.2. NFtables配置¶
NFtables配置更简洁,支持混合防火墙与IPS规则。例如在 filter 表中创建专用链:
nft> add chain filter IPS { type filter hook forward priority 10;}
转发所有流量到Suricata:
nft> add rule filter IPS queue
仅处理eth0与eth1间的流量:
nft> add rule filter IPS iif eth0 oif eth1 queue
nft> add rule filter IPS iif eth1 oif eth0 queue
17.1.3. NFQUEUE高级选项¶
NFQUEUE支持负载均衡等高级功能。 nftables
配置示例如下( iptables
同样适用):
nft add rule filter IPS queue num 3-5 options fanout,bypass
启动Suricata时需指定多个队列:
suricata -q 3 -q 4 -q 5
选项说明: - fanout:按CPU核心分配队列提升性能 - bypass:无监听程序时放行流量(但会失去拦截功能)
17.2. 设置第二层IPS¶
17.2.1. AF_PACKET IPS模式¶
AF_PACKET支持IPS/Tap模式,无需 iptables
配置。需指定两个网卡并通过 copy-* 参数建立关联:
af-packet:
- interface: eth0
copy-mode: ips
copy-iface: eth1
- interface: eth1
copy-mode: ips
copy-iface: eth0
注意事项: - 双端MTU需一致 - 禁用GRO/LRO/TSO等分片卸载功能 - stream.inline 需设为 auto 或 yes
copy-mode 可选值: - ips:支持丢包动作 - tap:仅镜像流量
多线程优化建议使用eBPF负载均衡(需配置 cluster-type: cluster_ebpf 并指定BPF文件路径)。
17.2.2. DPDK IPS模式¶
配置类似AF_PACKET,需成对设置网卡参数:
dpdk:
interfaces:
- interface: 0000:3b:00.1
copy-mode: ips
copy-iface: 0000:3b:00.0
- interface: 0000:3b:00.0
copy-mode: ips
copy-iface: 0000:3b:00.1
关键要求: - 双端线程数/MTU相同 - 需配置CPU亲和性
17.2.3. Netmap IPS模式¶
支持物理网卡配对或单网卡主机栈模式。基础配置示例:
netmap:
- interface: enp6s0f0
copy-mode: ips
copy-iface: enp6s0f1
- interface: enp6s0f1
copy-mode: ips
copy-iface: enp6s0f0
主机栈模式(单网卡)配置:
- interface: enp60s0f0
copy-mode: ips
copy-iface: enp6s0f0^
注意事项: - 禁用分片卸载功能 - workers 模式下启用零拷贝
copy-mode 选项与AF_PACKET相同。