snort定义和使用变量
定义普通变量:
1 | var <变量名><变量值> |
例如
1 | var HOME_NET 192.168.1.0/24 |
引用变量时,在规则中用 $
引用该变量
在变量中使用变量值列表,定义一个包含多个条目的变量,不同的条目用逗号分隔。
例如一个包含两个网段的网络 var HOME_NET [192.168.1.0/24,192.168.10.0/24]
定义变量的时候,可以用网络接口名称
1 | var HOME_NET $ eth0_ADDRESS |
定义变量的时候,可以用动态变量。即在配置文件或附加包含文件中用已定义了的变量再去定义其他变量。
例如,定义了一个变量DMZ_WEB
1 | var EXTERNAL_WEB $ DMZ_WEB |
关键字any也可以成为一个变量,能匹配任何之
1 | var ECTERNAL_NET any |
如果被引用的变量没有定义或定义非法,动态变量可以被赋予一个默认静态地址,也可以定义一段错误提示信息,当被引用变量为定义时将显示该信息。
1 | var <变量名>$<被引用变量:默认静态地址> |
“变量值”部分被冒号分开,冒号前面是被引用变量,当被引用变量未定义时,引擎将根据冒号后面的部分执行动作
例如:下面的规则定义了一个动态的单一IP地址,变量DNS_SERVER等于变量ORG_DNS_SERVER,如果ORGD_DNS_SERVER没有定义,DNS_SERVR赋值为10.1.1.2
1 | var DNS_SERVER $ (ORG_DNS_SERVER:10.1.1.2) |
当被引用变量未定义时系统将打印错误信息
1 | var ENTIRE_INTERNAL_COMPANY $ (INTERNAL_NETS:?错误) |
配置项的灵活应用
snort.conf 文件中用配置指令可以让用户配置snort的全局设定,如日志文件的路径,规则的应用顺序等。配置项语法格式由配置对象的标识字段和参数值组成
1 | config<指令名>:<参数值> |
config变量说明该配置项的类型,“指令名”用来说明参数值将被应用的对象。“N”表示该指令不需要附加参数
配置文件中的其他关键要素
预处理器配置
1
preprocessor<预处理器名>[:<配置选项>]
输出模块配置
1
output<输出模块名>[:<配置选项>]
规则和包括文件配置
1
include规则文件路径/规则文件名
命令行参数
1 | snort[-option]<filter options> |
-o参数
snort的规则分为3大类,报警规则、通过规则、日志规则。当snrot收到包的时候会按照 alert ->pass -> log 顺序一次检验,这样可以保证安全性。但是因为大多数包是正常包,所以这样会耗费一些系统资源。
snort提供一种方法改变顺序来提高效率,但是会降低安全性。将顺序改为 pass->alert->log