You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snort IPS脚本部分IP未拦截问题排查求助

问题:UFW无法拦截部分Snort高优先级告警IP

我用bash脚本搭建服务,通过UFW拦截Snort告警中优先级1和2的IP,但部分IP未被拦截。相关信息如下:

脚本代码

#!/bin/bash
LOG_FILE="/var/log/snort/alert"
while true; do
  tail -fn0 "$LOG_FILE" | while read -r line; do
    if echo "$line" | grep -E "Priority: 1|Priority: 2"; then
      IP=$(echo "$line" | grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+")
      if [ -n "$IP" ]; then
        ufw deny from "$IP"
        echo "$(date): Blocked IP $IP" >> /var/log/ufw_block.log
      fi
    fi
  done
  sleep 10
done

运行日志

2024-05-20 14:30:00: Blocked IP 192.168.1.100
2024-05-20 14:35:00: Blocked IP 10.0.0.5
(未被拦截的IP无对应日志记录)

Snort优先级1告警示例

[Priority: 1] {TCP} 172.16.0.20:443 -> 192.168.2.3:8080
05/20-14:40:00.123456 [Priority: 1] ET EXPLOIT Possible Remote Code Execution Attempt

排查方向

  • IP提取逻辑偏差:脚本用grep -oE会提取告警行中所有IP,若告警同时包含源IP(攻击IP)和目标IP(本地IP),可能误拦截本地IP而漏掉攻击源。可调整正则精准提取源IP,比如:
    IP=$(echo "$line" | grep -oE "\{[^}]+\} ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)" | cut -d' ' -f2)
    
  • 权限不足:脚本未以root运行时,ufw deny命令会静默失败。检查ufw_block.log是否有未被拦截IP的记录,确认脚本执行权限,建议用root运行或给脚本添加sudo权限。
  • 日志格式不匹配:部分Snort告警的优先级字段可能有格式差异(比如大小写、多余空格),用grep "Priority: [12]" /var/log/snort/alert搜索未被拦截的告警,确认这些行能否被脚本的grep -E匹配到。
  • 日志轮转导致读取中断:若Snort日志用logrotate轮转,tail -fn0可能丢失轮转后的新日志。可改用inotifywait监控文件变化,或在脚本中加入日志重新读取逻辑。
  • UFW规则优先级冲突:执行ufw status numbered查看规则列表,若未被拦截的IP存在允许规则且顺序在拒绝规则之前,会导致拦截失效,需调整规则顺序或删除对应允许规则。
  • 脚本循环异常:内层while read可能因tail输出中断而停止,可给tail加--follow=name参数,确保跟踪文件本身而非文件描述符,避免日志轮转后脚本停止读取新内容。

内容的提问来源于stack exchange,提问作者D J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 02:31:13