Snort 2.x无法生成FTP连接及RETR命令告警问题排查
Snort 2.x FTP告警规则失效问题排查与修复
问题原因分析
1. FTP连接检测规则缺陷
- 原规则未限定协议为TCP(FTP基于TCP传输),使用
any协议会导致Snort无法精准匹配目标流量。 - 未指定TCP连接建立的核心标志位
SYN,规则会匹配所有到21端口的TCP流量,而非仅连接发起阶段的握手包,进而因匹配范围过大或优先级问题未触发告警。
2. RETR命令检测规则缺陷
- 直接匹配
content:"RETR"无法覆盖真实FTP命令格式:FTP命令以RETR(带空格)开头并跟随文件名,原规则的内容匹配无法命中完整命令字符串。 - 未利用已启用的
ftp_telnet预处理器提供的ftp_cmd专用关键字,直接匹配原始流量易受协议解析干扰,导致匹配失效。
修改后的有效规则
1. FTP连接建立检测规则
精准匹配TCP SYN包(连接发起请求),同时指定服务器IP缩小匹配范围:
alert tcp any any -> 192.168.211.130 21 ( msg:"FTP CONNECTION ESTABLISHED"; flags:S; sid:1000001; rev:2; )
flags:S:仅触发TCP连接发起阶段的告警,避免无效流量干扰。- 指定服务器IP:过滤无关的21端口流量,提升规则精准度。
2. FTP RETR下载命令检测规则
借助ftp_telnet预处理器的ftp_cmd关键字直接匹配解析后的FTP命令:
alert tcp any any -> 192.168.211.130 21 ( msg:"FTP FILE DOWNLOAD (RETR) DETECTED"; ftp_cmd:RETR; nocase; sid:2000001; rev:2; )
ftp_cmd:RETR:直接调用预处理器解析出的FTP命令,无需手动匹配原始字符串,准确率更高。nocase:兼容大小写不敏感的命令输入(如retr)。
额外验证步骤
- 确认自定义规则文件已被
snort.conf包含,添加类似配置:include $RULE_PATH/custom_ftp_rules.rules(替换为你的规则文件路径)。 - 启动Snort时添加
-v参数查看实时流量:sudo snort -i eth0 -c /etc/snort/snort.conf -A console -v,确认FTP流量被正常捕获。 - 检查Snort默认日志目录
/var/log/snort/,查看是否有告警日志生成,避免控制台输出遗漏。
内容的提问来源于stack exchange,提问作者Het Jain
相关产品推荐
相关产品推荐

