当前位置:首页>Linux>Linux 部署 Suricata 和基础命令

Linux 部署 Suricata 和基础命令

  • 2026-10-21 13:28:53
Linux 部署 Suricata 和基础命令

一、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

最新文章

随机文章