规则存放位置,通过可执行程序查看相关配置--build-info
规则构成
suricat的规则由三部分构成,分为action header options;与iptables规则不同,动作字段被定义在规则前。
pass/log/alaret 为ids规则动作,drop、reject(返回res报文)为ips动作
三层协议号(tcp、udp、icmp、ip、any)
规则的每一条都遵循固定的格式:name: settings;
每条规则也包含如下设置:
规则属性配置
msg (message) |
规则的名称、描述信息。命中规则的提示信息 |
rev |
表示规则版本号,当规则内容发生变更时,递增。 |
gid |
|
Reference |
|
Priority |
优先级 |
检测内容
content |
检查数据包内容中是否包含某个字符串
|
检测内容修饰语
nocase |
匹配内容不区分大小写,如 content:"root";nocase; |
offset |
用于表示从数据包载荷的特定位置开始内容匹配,从载荷其实位置算起 |
depth |
用于限制搜索匹配内容的结束位置。若使用了offset,则开始位置为offset,否则为载荷开始位置 |
distance |
用于指定上一次内容匹配的结束位置距离本次内容匹配的开始位置的距离 |
within |
用于限制本次匹配必须出现在上一次匹配内容结束后的多少个字节之内 |
f. distance和within的同时使用限制了第二次内容匹配的匹配范围,如下
content:"evilliveshere"; content:"here"; distance:1;within:7;
在匹配字符串“evilliveshere”后的1到7个字节范围内对字符串“here”进行匹配
http内容修饰语
针对检测http流量的规则,Suricata提供了http流重组能力,同时提供了用于编写HTTP流量相关的更高效的规则修饰器
例如:alert tcp anyany->any80(msg:"Evil Doamin www.appliednsm.com"; "content:"GET";httpmethod; content:"www.appliednsm.com";http_uri; sid:5445555; rev:1;)
规则:跟随content内容后,修饰内容类型。此时为精确匹配http内容。
常用http内容修饰语:
http_client_body HTTP客户端请求的主体内容
http_cookie HTTP头字段的“Cookie”内容
http_header HTTP请求或响应头的任何内容
http_method 客户端使用的HTTP方法(GET,POST等)
例如:我们对规则匹配
匹配不到。
http_uri HTTP客户端请求的URI内容
http_stat_code 服务器响应的HTTP状态字段内容
http_stat_message 服务器响应的HTTP状态消息内容
http_encode 在HTTP传输过程中所使用的编码类型
```
3. 兼容Perl语法的正则表达式(PCRE):通过正则表达式对内容进行匹配
匹配信用卡号码: pcre:"/([0-6]\d\d|7[0-256]\d|73[0-3]|77[0-2])-\d{2} - \d{4} /";
######3. 通信流量
通信流量:根据TCP协议网络流量状态编写规则
三次握手:
1. 客户端向服务器的监听端口发送SYN包来发起连接
2. 此时,服务器需要向客户端回复一个SYN/ACK包
3. 一旦收到该包,客户端会回复给服务器一个ACK包
数据流规则有一些专用选项,分为三类:
1. 状态选项
2. 定向选项
3. 流量模式状态
配置格式:flow:
有效声明选项分别为
1. established:只匹配已经建立TCP会话连接的流量
2. stateless:不论是否已建立TCP会话连接均匹配
方向选项分别为:
1. to_server:从客户端到服务端的流量
2. from_server:从服务端到客户端的流量
3. to_client:从服务端到客户端的流量
4. from _client:从客户端到服务端的流量
no_stream:待匹配数据是重组后的流
only_stream:待匹配数据是单独的数据包
协议头检测
1. TTL:匹配指定的TTL指,可使用关系运算符(< , <=, >=, >),可以用来识别操作系统类型
2. dsize:匹配一个指定payload大小的数据包,可使用关系运算符(< , <=, >=, >)
3. itype:匹配指定的ICMP类型值
4. icode:匹配指定的ICMP代码值