一、Suricata 简介
Suricata 是一个高性能的网络威胁检测引擎,支持:
实时入侵检测(IDS)
入侵防御(IPS)
网络安全管理
PCAP 处理
二、安装 Suricata
Ubuntu/Debian 系统
# 添加 Suricata 官方仓库
sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt update
# 安装 Suricata
sudo apt install suricata
# 验证安装
suricata --build-info
CentOS/RHEL/Fedora
# 启用 EPEL 仓库(CentOS/RHEL)
sudo yum install epel-release
# 安装 Suricata
sudo yum install suricata
# 或者使用 COPR 仓库获取最新版本
sudo dnf copr enable @oisf/suricata-7
sudo dnf install suricata
三、初始配置
1. 网络接口配置
# 查看网络接口
ip addr show
sudo ifconfig -a
# 配置 Suricata 使用的网卡(编辑配置文件)
sudovim /etc/suricata/suricata.yaml
2. 主要配置文件修改
# 设置监控的网卡
vars:
address-groups:
HOME_NET: "[192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12]"
EXTERNAL_NET: "!$HOME_NET"
interface: eth0 # 修改为你的实际网卡名称
3. 更新规则
# 下载最新的规则集
sudo suricata-update
# 查看可用的规则源
sudo suricata-update list-sources
# 启用特定规则源
sudo suricata-update enable-source et/open
四、基础命令
1. 启动和停止服务
# Systemd 系统
sudo systemctl start suricata
sudo systemctl stop suricata
sudo systemctl restart suricata
sudo systemctl status suricata
sudo systemctl enable suricata # 开机自启
# 直接运行(测试模式)
sudo suricata -c /etc/suricata/suricata.yaml -i eth0
2. 运行模式
# IDS 模式(默认)
sudo suricata -c /etc/suricata/suricata.yaml -i eth0
# IPS 模式(需要 NFQ 配置)
sudo suricata -c /etc/suricata/suricata.yaml --nfq
# 守护进程模式
sudo suricata -c /etc/suricata/suricata.yaml -i eth0 --daemon
# 指定日志目录
sudo suricata -c /etc/suricata/suricata.yaml -i eth0 --logdir /var/log/suricata/
3. 测试和验证
# 测试配置文件
sudo suricata -T-c /etc/suricata/suricata.yaml -v
# 查看运行信息
sudo suricata -c /etc/suricata/suricata.yaml --build-info
sudo suricata -c /etc/suricata/suricata.yaml --list-app-layer-protos
sudo suricata -c /etc/suricata/suricata.yaml --list-keywords
4. 规则管理
# 更新规则
sudo suricata-update
# 强制更新
sudo suricata-update --force
# 测试单个规则
sudo suricata -c /etc/suricata/suricata.yaml -S test.rules -l /var/log/suricata/
# 查看已加载规则
grep-r"alert" /var/lib/suricata/rules/
五、日志分析
1. 主要日志文件
# 快速警报日志
tail -f /var/log/suricata/fast.log
# EVE JSON 格式日志(推荐)
tail -f /var/log/suricata/eve.json
# 统计信息
tail -f /var/log/suricata/stats.log
2. 常用日志分析命令
# 查看最新警报
tail -100 /var/log/suricata/fast.log
# 统计警报数量
grep-c"\[\*\*\]" /var/log/suricata/fast.log
# 查看特定类型的警报
grep-i"sql" /var/log/suricata/fast.log
# 使用 jq 分析 JSON 日志
sudo apt install jq
cat /var/log/suricata/eve.json | jq '.alert.signature' | head -20
# 实时监控
tail -f /var/log/suricata/eve.json | jq 'select(.alert)'
六、性能优化
1. 多线程配置
# 编辑 suricata.yaml
max-pending-packets: 1024
detect-thread-ratio: 1.0
# CPU 关联设置
cpu-affinity:
- management-cpu-set:
cpu: [ 0 ] # 管理线程使用的 CPU
- receive-cpu-set:
cpu: [ 1 ] # 接收线程使用的 CPU
- worker-cpu-set:
cpu: [ 2-7 ] # 工作线程使用的 CPU
2. 内存优化
# 增加流内存
stream:
memcap: 64mb
checksum-validation: yes
# 增加检测缓冲区
detect-engine:
- profile: medium
七、实用脚本示例
1. 自动化部署脚本
#!/bin/bash
# deploy_suricata.sh
# 安装 Suricata
install_suricata() {
echo"正在安装 Suricata..."
sudo apt update
sudo apt install -y suricata suricata-update
# 停止服务进行配置
sudo systemctl stop suricata
# 备份原始配置
sudocp /etc/suricata/suricata.yaml /etc/suricata/suricata.yaml.backup
}
# 配置 Suricata
configure_suricata() {
echo"配置 Suricata..."
# 获取第一个非本地网卡
INTERFACE=$(ip link show | grep -E "^[0-9]+:" | grep -v lo | head -1 | cut -d: -f2 | tr -d ' ')
# 更新配置文件
sudosed-i"s/interface: eth0/interface: $INTERFACE/" /etc/suricata/suricata.yaml
sudosed-i"s/HOME_NET: \"\[192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12\]\"/HOME_NET: \"\[192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12\]\"/" /etc/suricata/suricata.yaml
# 更新规则
sudo suricata-update
echo"Suricata 已配置在接口 $INTERFACE"
}
# 启动服务
start_suricata() {
echo"启动 Suricata 服务..."
sudo systemctl daemon-reload
sudo systemctl start suricata
sudo systemctl enable suricata
# 检查状态
sudo systemctl status suricata --no-pager
}
main() {
install_suricata
configure_suricata
start_suricata
echo"安装完成!"
echo"检查日志: tail -f /var/log/suricata/fast.log"
}
main
2. 监控脚本
#!/bin/bash
# monitor_suricata.sh
LOG_DIR="/var/log/suricata"
ALERT_LOG="$LOG_DIR/fast.log"
EVE_LOG="$LOG_DIR/eve.json"
monitor_alerts() {
echo"监控 Suricata 警报..."
echo"按 Ctrl+C 退出"
tail -f"$ALERT_LOG" | while read line; do
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo"[$timestamp] $line"
done
}
show_stats() {
echo"=== Suricata 统计 ==="
echo"最近10分钟警报数:"
find"$LOG_DIR"-name"fast.log"-type f -execgrep-c"$(date -d '10 minutes ago' '+%Y-%m-%d')" {} \;
echo-e"\n当前连接数:"
if [ -f"$LOG_DIR/stats.log" ]; then
tail -5"$LOG_DIR/stats.log" | grep-i"flow"
fi
}
check_service() {
if systemctl is-active --quiet suricata; then
echo"✅ Suricata 服务运行正常"
else
echo"❌ Suricata 服务未运行"
fi
}
case "$1"in
monitor)
monitor_alerts
;;
stats)
show_stats
;;
status)
check_service
;;
*)
echo"用法: $0 {monitor|stats|status}"
exit1
;;
esac
八、故障排除
常见问题解决
# 1. 检查配置文件语法
sudo suricata -c /etc/suricata/suricata.yaml -T
# 2. 检查权限问题
sudochown-R suricata:suricata /var/log/suricata/
sudochmod-R755 /var/log/suricata/
# 3. 查看详细错误日志
sudo journalctl -u suricata -f
sudo tail -f /var/log/suricata/suricata.log
# 4. 测试规则加载
sudo suricata -c /etc/suricata/suricata.yaml --dump-config | grep-A5-B5"rule-files"
# 5. 验证网络接口
sudo ethtool -i eth0 # 查看网卡信息
sudo suricata --list-runmodes