当前位置:网站首页 >  攻略

手把手搭建基于Suricata的入侵防御系统

时间:2026年06月11日 01:32:39 来源:易频IT社区

核心组件与部署架构

本指南基于Suricata构建入侵防御系统(IPS),它能在网络层实时检测并阻断攻击。你需要准备一台运行Ubuntu 22.04 LTS的服务器(至少2核CPU、4GB内存)作为IPS主机,并确保其具备至少两个网络接口。一个接口(如ens192)连接外部网络(互联网/WAN),另一个接口(如ens224)连接内部网络(LAN)。系统需部署在内外网之间的关键路径上,以串联或旁路镜像方式分析所有流量。

系统环境准备与Suricata安装

以root用户或通过sudo更新系统并安装编译依赖。

更新系统并安装依赖

执行以下命令:

apt update && apt upgrade -y
apt install -y libpcre3 libpcre3-dbg libpcre3-dev \
build-essential autoconf automake libtool libpcap-dev \
libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev \
libcap-ng-dev libcap-ng0 make libmagic-dev \
libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev \
libnfnetlink0 libjansson-dev libjansson4 pkg-config
下载并编译安装Suricata

从Suricata官方网站下载最新的稳定版源码包。使用wget命令获取并解压。

wget https://www.openinfosecfoundation.org/download/suricata-7.0.2.tar.gz
tar -xzf suricata-7.0.2.tar.gz
cd suricata-7.0.2

配置编译选项,启用NFQueue(用于阻断)、Lua支持(用于高级检测)等关键功能。

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
--enable-nfqueue --enable-lua
make
make install-full

make install-full命令会同时安装默认规则集。安装完成后,更新共享库链接。

ldconfig
验证安装

运行以下命令检查Suricata版本及关键功能是否启用。

suricata --build-info | grep -E "(NFQueue|Lua)"

输出中应包含“NFQueue support: yes”和“Lua support: yes”。

网络配置与IPS模式激活

配置网络接口为混杂模式,使其能捕获所有流经的流量。

ip link set ens192 promisc on
ip link set ens224 promisc on

编辑Suricata的主配置文件/etc/suricata/suricata.yaml。以下是必须修改的关键部分。

设置监控网络接口

找到`af-packet`部分,根据你的接口名修改。

af-packet:
- interface: ens192
cluster-id: 99
cluster-type: cluster_flow
defrag: yes
use-mmap: yes
tpacket-v3: yes
- interface: ens224
cluster-id: 98
cluster-type: cluster_flow
defrag: yes
use-mmap: yes
tpacket-v3: yes
配置IPS(阻断)模式

找到`nfq`配置部分,取消注释并修改。以下配置将来自两个接口的流量送入Netfilter队列,Suricata处理后再放行或丢弃。

nfq:
mode: accept
repeat-mark: 1
repeat-mask: 1
bypass-mark: 2
bypass-mask: 2
queues:
- queue: 0
bypass: no
- queue: 1
bypass: no
设置规则路径

确保规则文件路径设置正确。

default-rule-path: /var/lib/suricata/rules
rule-files:
- suricata.rules

配置iptables与NFQUEUE联动

使用iptables将需要检测的流量重定向到Suricata监听的NFQUEUE。以下命令将经过IPS主机转发的TCP和UDP流量(这是最常见的情况)送入队列0和1。

iptables -I FORWARD -i ens192 -o ens224 -j NFQUEUE --queue-num 0 --queue-bypass
iptables -I FORWARD -i ens224 -o ens192 -j NFQUEUE --queue-num 1 --queue-bypass

为了让配置在重启后生效,安装iptables-persistent。

apt install -y iptables-persistent

在安装过程中提示保存当前规则时,选择“是”。

规则管理与策略配置

Suricata依赖规则进行检测。使用Suricata-update工具管理规则。

初始化并更新规则集

手把手搭建基于Suricata的入侵防御系统

suricata-update enable-source oisf/trafficid
suricata-update enable-source et/open
suricata-update

此命令会从Emerging Threats(ET)等源下载最新的社区规则集到/var/lib/suricata/rules/suricata.rules

配置阻断动作

编辑/etc/suricata/suricata.yaml,找到`action-order`部分,确保`drop`动作的优先级高于`pass`。

action-order:
- drop
- pass
- reject

在规则文件中,将需要执行阻断的规则的action从`alert`改为`drop`。例如,使用sed命令批量修改,将ET规则集中关于已知扫描活动的规则改为阻断。

sed -i 's/alert tcp any any -> any any (msg:"ET SCAN Potential SSH Scan"; flow:established,to_server; flags:S,12; threshold: type both, track by_src, count 5, seconds 60; reference:url,doc.emergingthreats.net/2001977; classtype:attempted-recon; sid:2001977; rev:5;)/drop tcp any any -> any any (msg:"ET SCAN Potential SSH Scan"; flow:established,to_server; flags:S,12; threshold: type both, track by_src, count 5, seconds 60; reference:url,doc.emergingthreats.net/2001977; classtype:attempted-recon; sid:2001977; rev:5;)/g' /var/lib/suricata/rules/suricata.rules

注意: 在生产环境中,建议创建本地规则文件(如local.rules)并在`suricata.yaml`中引用,而不是直接修改主规则文件。修改后需重启Suricata。

启动、测试与验证

启动Suricata服务

以IPS模式启动Suricata,指定配置文件并开启详细日志。

suricata -c /etc/suricata/suricata.yaml -q 0 -q 1 --runmode workers

参数说明:`-q 0 -q 1`指定处理的NFQUEUE编号,`--runmode workers`使用多工作者模式提升性能。

可以将其配置为systemd服务以实现开机自启。创建服务文件/etc/systemd/system/suricata-ips.service

[Unit]
Description=Suricata Intrusion Prevention System
After=network.target
[Service]
ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml -q 0 -q 1 --runmode workers
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

启用并启动服务。

systemctl daemon-reload
systemctl enable --now suricata-ips.service
功能测试验证

1. 检查服务状态与日志

systemctl status suricata-ips.service
tail -f /var/log/suricata/suricata.log

观察日志中是否有“所有捕获线程就绪”等信息,并无持续报错。

2. 触发测试规则:在内网的一台机器上,尝试对外部地址进行快速的端口扫描(例如使用`nmap -sS -p 22 <某个外部IP>`模拟SSH扫描)。然后立即检查Suricata的快速日志(fast.log)。

tail -f /var/log/suricata/fast.log

你应该能看到一条包含“ET SCAN Potential SSH Scan”且动作(action)为“DROP”的日志条目。

3. 验证网络阻断:在发起扫描的内网机器上,再次尝试连接目标主机的22端口,连接应被立即拒绝或超时,证明IPS已生效。

日常维护与性能调优

1. 规则更新:设置每日定时任务更新规则。

crontab -e
添加以下行,每天凌晨2点更新规则并重载Suricata
0 2    /usr/bin/suricata-update && systemctl reload suricata-ips

2. 性能监控:使用Suricata自带的统计工具。

suricatasc -c "dump-counters"

关注`detect.alerts`(警报数)、`flow.memuse`(流表内存使用)和`detect.alert_percent`(检测线程CPU使用率)。

3. 关键配置调优:根据网络流量调整/etc/suricata/suricata.yaml中的参数。

  • max-pending-packets: 增大此值(如65536)可应对流量突发。
  • runmode: 在高吞吐场景下,确认使用`workers`模式。
  • stream.memcapflow.memcap: 根据系统内存调整流管理内存上限。

4. 日志轮转:安装并配置logrotate,防止日志占满磁盘。创建/etc/logrotate.d/suricata文件。

/var/log/suricata/.log {
daily
rotate 7
compress
delaycompress
missingok
postrotate
systemctl reload suricata-ips 2>/dev/null || true
endscript
}

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图