看看有没有用:
防火墙和IPS的自定义规则,跟snort规则文件格式是一致的。可以先搭建一个snort环境测试规则文件,测试无问题再直接导入我们的设备进行测试,可以减少语法错误导致来回导入规则文件的时间消耗。
‘
以Snort的一条IE规则为例:
alert tcp any 80 -> any any (msg:"BROWSER-IE Microsoft Internet Explorer CacheSize exploit attempt";flow: to_client;file_data;content:"recordset"; offset:14;depth:9;content:".CacheSize"; distance:0; within:100;pcre:"/CacheSize\s*=\s*/";byte_test:10,>,0x3ffffffe,0,relative,string;sid:10000004;rev:1;)
alert 是动作配置为告警,这个字段可以填写alert,reject,drop等
tcp是指协议,这个字段可以填写tcp,udp,ip,icmp
any 80 -> any any对应我们的安全域配置,这里是检测从任意ip、80端口返回到任意ip,任意端口的会话
msg:”BROWSER-IE Microsoft Internet Explorer CacheSize exploit attempt”是攻击名
Sid 指自定义的规则id
Rev指revision版本号。
alert tcp any 80 -> any any (msg:"BROWSER-IE Microsoft Internet Explorer CacheSize exploit attempt";flow: to_client;file_data;content:"recordset"; offset:14;depth:9;content:".CacheSize"; distance:0; within:100;pcre:"/CacheSize\s*=\s*/";byte_test:10,>,0x3ffffffe,0,relative,string;sid:10000004;rev:1;)
flow: to_client; 规则检测服务器返回给客户端的报文负载
file_data; 检测的是应答包负载,也就是html页面的内容。
content:”recordset”; offset:14;depth:9; 检测的是recordset字符串,从file_data负载的14个字节处开始查找,查9个字节深度,如果找到了recordset,表示命中,如果在此范围未查到,就表示未命中。
content:”.CacheSize”; distance:0; 在上一处content,也就是找到recordset之后的位置开始,偏移0字节,范围100字节,找到.CacheSize字符串(默认是大小写均可)
pcre:”/CacheSize\s*=\s*/”; 在报文内匹配正则表达式
alert tcp any 80 -> any any (msg:"BROWSER-IE Microsoft Internet Explorer CacheSize exploit attempt";flow: to_client;file_data;content:"recordset"; offset:14;depth:9;content:".CacheSize"; distance:0; within:100;pcre:"/CacheSize\s*=\s*/";byte_test:10,>,0x3ffffffe,0,relative,string;sid:10000004;rev:1;)
byte_test:10,>,0x3ffffffe,0,relative,string;相对从上一处匹配到的数据开始,偏移0,长度10提取字符串类型数据,转换成数值,跟 0x3fffffffe比较,提取的数据要比后者大。
将测好的规则文件,导入到我们的防火墙

参考资料:
snort_manual.pdf
Snort_rule_infographic.pdf
暂无评论
你的这条 alert 规则语法本身没有错误,可以用来记录日志;但它的动作是 alert(告警/允许),所以不能阻断恶意域名。要真正实现阻断,需要把 alert 改为 drop。
H3C 防火墙导入的自定义特征文件,就是 .rules 格式的文件,不是别的格式。你可以按照以下步骤操作,导入文件来覆盖系统中的旧的自定义规则:
创建 .rules 文件:在电脑上用记事本新建一个文件,把编写好的规则逐条写好,保存时将文件名设为 block_domain.rules(名字可以自己定),编码选择 UTF-8。
上传文件到防火墙:将 block_domain.rules 文件通过FTP或TFTP等方式上传到防火墙上。
执行导入命令:在防火墙的命令行中用 ips signature import snort tftp://你的电脑IP/block_domain.rules 导入。
验证导入结果:使用 display ips signature user-defined 命令,检查导入的自定义特征及其ID。
这里为你准备了几个更完善的阻断规则写法,可以参考:
UDP DNS请求阻断(基础版):
fast_pattern:only指令能提升性能。TCP DNS请求阻断(补充版):
同时匹配UDP与TCP的复合规则:
暂无评论
您这条规则存在关键性错误,会导致完全无法匹配目标域名,而且关于导入文件的问题也有常见的误解。下面直接说明问题并给出正确写法。
· 错写成了 |02||02| 是十六进制 0x02(STX 控制字符),而域名的点是 0x2E。
如果想用十六进制写点号,应该是 |2E|,或者直接写点 .。
DNS 请求报文里的域名不是直接以点号分隔的字符串,而是采用“标签长度 + 标签内容”的编码。
比如 ***.*** 经编码后字节流为:
你的 content:"***.***" 根本不会出现在数据流里。
fast_pattern:only 使用不当fast_pattern:only 表示仅将这一段内容作为“快速匹配”模式,其他内容将不被做为快速匹配。这里只有一段内容且匹配逻辑有问题,加了反而限制。
dns_query 关键字(强烈推荐)如果 H3C SecPath F1000-AI-25 的 IPS 引擎支持 dns_query(绝大多数基于 Snort 的系统都支持),直接匹配已解析的查询域名,简单可靠:
这种写法完全不用管底层编码,直接写域名本身即可,支持
nocase忽略大小写。
dns_query 支持时)需要按照 DNS 编码写出真实字节:
字节含义:
|06| —— 第 1 个标签长度 6 字节(lky213)
lky213 —— 明文字符
|02| —— 第 2 个标签长度 2 字节
02 —— 明文字符(数字 0 和 2)
|02| —— 第 3 个标签长度 2 字节
cn —— 明文字符
如要匹配更多域名,只需按同样格式改写。
两种方案都别忘了在 IPS 策略里把该特征的动作设置为“阻断/丢弃”,因为规则中写的是 alert 只是告警,实际阻断需要在策略动作中配置。
每个域名一条规则,只需改动 sid、msg 和 content。
用 dns_query 示例(如果支持):
用原始负载匹配示例:
恶意域名 ***.*** 编码为 04 65 76 69 6c 03 63 6f 6d 00,规则:
sid每条不能重复,范围通常在 1000000 之内自定义。
H3C SecPath F1000-AI-25 的自定义 IPS 特征并不强制要求 .rules 后缀,设备通常支持:
直接粘贴规则文本:在 Web 界面的“安全防护 → IPS → 自定义特征”中,可逐条粘贴上述规则,无需文件。
导入文本文件:将多条规则保存为纯文本文件(后缀可以是 .txt、.cfg 甚至无后缀),只要内容格式为标准 Snort 规则,在导入界面选择该文件上传即可。
部分版本可能要求特定封装格式:如果你看到的是 .dat 或 .sec 等文件,那通常是官方发布的特征库更新包,不是自定义入口。自定义特征导入一般就是纯文本。
操作建议:
先在记事本中写好所有规则,保存为 .txt 文件。
登录设备 Web → “安全防护 → IPS → 自定义特征” → 选择“导入” → 浏览并上传该 txt。
如果页面提示格式错误,注意规则必须一行一条,换行使用 Unix/Windows 风格均可,不含中文标点。
若仍然无法导入,可以查阅随设备附带的《IPS 配置指导》中“自定义特征导入格式说明”一节,确认该型号的具体要求。
按照上述方案修正后,规则即可生效,实现阻断对 ***.*** 的 DNS 解析请求。如果测试时发现未阻断,可以通过抓包确认 DNS 报文中的域名是否带 AAAA 或其他查询类型,默认匹配所有类型,不需要额外改动。
暂无评论
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
暂无评论