Suricata 入侵检测防御系统部署教程
Suricata 是由 OISF(Open Information Security Foundation)开发的高性能网络入侵检测和防御引擎。它支持 IDS(入侵检测)和 IPS(入侵防御)两种模式,能够实时分析网络流量并根据规则检测恶意行为。本文将详细介绍如何在搬瓦工 VPS 上部署和配置 Suricata。
一、Suricata 简介
Suricata 具有以下核心特性:
- 多线程架构:充分利用多核 CPU,处理高带宽流量。
- 协议识别:自动识别 HTTP、TLS、DNS、SSH 等应用层协议。
- 文件提取:可以从网络流量中提取文件进行分析。
- EVE JSON 日志:输出结构化的 JSON 日志,便于后续分析。
- 兼容 Snort 规则:可以直接使用大部分 Snort 规则。
二、系统要求
- 操作系统:Ubuntu 20.04+、Debian 11+、CentOS 7+。
- 内存:至少 1GB,建议 2GB 以上(规则越多需要的内存越大)。
- CPU:至少 1 核,建议 2 核以上。
- 磁盘:至少 1GB 用于规则和日志。
三、安装 Suricata
3.1 Ubuntu/Debian 安装
apt update
apt install software-properties-common -y
add-apt-repository ppa:oisf/suricata-stable -y
apt update
apt install suricata -y
3.2 CentOS 安装
yum install epel-release -y
yum install suricata -y
3.3 验证安装
suricata --build-info
suricata -V
四、基础配置
Suricata 的主配置文件位于 /etc/suricata/suricata.yaml,需要根据实际环境进行调整。
4.1 配置网络接口
首先确认 VPS 的网络接口名称:
ip addr show
编辑配置文件,设置监听接口(通常为 eth0 或 ens3):
# /etc/suricata/suricata.yaml 中的关键配置
af-packet:
- interface: eth0
cluster-id: 99
cluster-type: cluster_flow
defrag: yes
use-mmap: yes
tpacket-v3: yes
4.2 配置 HOME_NET
设置需要保护的内网地址范围:
vars:
address-groups:
HOME_NET: "[YOUR_VPS_IP/32]"
EXTERNAL_NET: "!$HOME_NET"
将 YOUR_VPS_IP 替换为搬瓦工 VPS 的实际 IP 地址。
4.3 配置日志输出
outputs:
- eve-log:
enabled: yes
filetype: regular
filename: eve.json
types:
- alert:
payload: yes
payload-printable: yes
- http:
extended: yes
- dns:
- tls:
extended: yes
- files:
force-magic: no
- ssh
- flow
五、规则管理
5.1 使用 suricata-update 更新规则
# 更新规则
suricata-update
# 查看可用规则源
suricata-update list-sources
# 启用 ET/Open 规则集
suricata-update enable-source et/open
# 再次更新以下载新规则
suricata-update
5.2 自定义规则
创建自定义规则文件:
cat > /etc/suricata/rules/local.rules << 'EOF'
# 检测 SSH 暴力破解
alert ssh any any -> $HOME_NET 22 (msg:"SSH brute force attempt"; flow:to_server,established; threshold:type both, track by_src, count 5, seconds 60; sid:1000001; rev:1;)
# 检测端口扫描
alert tcp any any -> $HOME_NET any (msg:"Possible port scan"; flags:S; threshold:type both, track by_src, count 20, seconds 10; sid:1000002; rev:1;)
EOF
5.3 验证规则
suricata -T -c /etc/suricata/suricata.yaml -v
如果输出中没有错误信息,说明规则加载正常。
六、IDS 模式运行
IDS 模式下 Suricata 只监控和告警,不会主动阻断流量:
systemctl enable suricata
systemctl start suricata
systemctl status suricata
查看告警日志:
tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'
如果没有安装 jq,先安装:
apt install jq -y
七、IPS 模式配置
IPS 模式下 Suricata 可以主动阻断恶意流量。需要配合 nftables 使用:
7.1 配置 nftables 将流量转发到 Suricata
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; }
nft add rule inet filter input queue num 0 bypass
7.2 修改 Suricata 配置启用 IPS
在 suricata.yaml 中启用 nfqueue 模式:
nfq:
mode: accept
repeat-mark: 1
repeat-mask: 1
route-queue: 2
fail-open: yes
7.3 以 IPS 模式启动
suricata -c /etc/suricata/suricata.yaml -q 0
注意:启用 IPS 模式前务必测试规则,错误的规则可能导致正常流量被阻断。建议先在 IDS 模式下运行一段时间,确认规则无误后再切换。
八、性能调优
# 在 suricata.yaml 中调整线程配置
threading:
set-cpu-affinity: yes
cpu-affinity:
- management-cpu-set:
cpu: [ 0 ]
- receive-cpu-set:
cpu: [ 0 ]
- worker-cpu-set:
cpu: [ "all" ]
mode: "exclusive"
对于搬瓦工 VPS,如果只有 1-2 个 CPU 核心,可以使用默认线程配置。多核方案可以根据实际情况分配。
九、日志分析
# 统计告警类型
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
# 查看 HTTP 请求日志
cat /var/log/suricata/eve.json | jq 'select(.event_type=="http")' | head -50
十、常见问题
Suricata 启动后没有告警
检查网络接口配置是否正确,确认 Suricata 在正确的接口上监听:
cat /var/log/suricata/suricata.log | grep -i "interface"
内存占用过高
减少加载的规则数量,或在配置文件中调整内存限制:
detect:
profile: low
custom-values:
toclient-groups: 2
toserver-groups: 25
日志文件过大
配置日志轮转:
cat > /etc/logrotate.d/suricata << 'EOF'
/var/log/suricata/*.log /var/log/suricata/*.json {
daily
rotate 7
compress
missingok
notifempty
postrotate
systemctl reload suricata
endscript
}
EOF
总结
Suricata 是一款功能强大的网络入侵检测与防御引擎,能够为搬瓦工 VPS 提供实时的网络安全监控。通过合理配置规则和日志分析,可以及时发现和阻断各类网络攻击。建议搭配 CrowdSec 联防使用,形成多层防御体系。选购搬瓦工 VPS 请查看全部方案,购买时使用优惠码 NODESEEK2026 可享受折扣。如有问题可通过搬瓦工官网提交工单。