- 编写要求
- 安装
- 如何编写规则
- 变量设置
- 规则行为
- 支持协议
- 源信息
- 方向操作符
- 示例
- 实践:编写规则
- 完
- snort的安装与配置
- 自己设计snort规则发现入侵企图:1、入侵http服务或者ftp服务的入侵企图;2、使用icmp协议的探测企图
snort在Ubuntu 20.04能够直接安装
sudo apt-get install snort
安装的时候需要配置网卡为ens33、ip地址为ens33的网段,桥接一般是192.168.X.0/24
如何编写规则 变量设置设置被监控的网络地址,提供的网络服务以及对应的服务端口,规则文件的地址
基本用法 var <变量名> <变量值> 如 var HOME_NET 192.168.0.0/24 动态变量:用变量生成变量 如:var FTP_SERVER $HOME_NET 端口变量的设置 port <变量名> 端口号|[端口集合]规则行为
所谓规则行为就是指当数据包匹配某条规则时,snort进行的某种操作和响应。
pass:忽略满足条件的数据包; log:将满足条件的数据包记录到日志里 alert:将满足条件的数据包记录到日志里,然后进行报警 Dynamic:在其被Active规则激活之前,它保持一种潜伏状态,当其Activate激活时,其作用类似log Activate: 当这种规则触发时, snort首先进行报警,然后由其激活Dynamic规则支持协议
snort 支持四种协议的分析:ICMP、TCP、IP和UDP。在规则头中,协议声明在规则行为后,它们之间用一个空格来分割。
注:一个规则只能指定一种协议
源信息源信息由源的IP地址和端口号组成
IP地址的表示方式 单一IP地址,如192.168.0.154 CIDF(无类别域间路由地址)地址,如192.168.0.0/24 !与地址结合,如!192.168.0.0/24,表示除192.168.0网段的地址 any:代表所有地址 端口的表示方法 单一端口号,如80 端口范围,如1:100 或 :1024 或 1025: any:所有端口 !端口号:除之外
注:非TCP、UDP协议的端口号不能为空
方向操作符位于源信息与目的信息之间,用于指明数据的流向
方向操作符 “->”:表明从源到目的 “<>”:表明源和目的之间进行双向通讯
不支持“<-” 方向符
示例log tcp any any ->any any log tcp [10.100.2.3,10.100.3.0/24] any->10.1.1.5 any active tcp any any->any 23 (activates:24;msg:”su –root attempt”;content:”su -root”; sid:1000001) dynamic tcp any any -> any 23 (activated by:24; count:100 ; sid:1000002) alert tcp any any -> any any(msg:”test message” ; sid:1000003)
配置msg提示信息的sid需要使用100000以后的,前面是保留id号
实践:编写规则以下操作要切换到root!
编辑/etc/snort/rules/local.rules,写入以下规则:
var HOME_NET 192.168.x.xxx alert tcp any any -> $HOME_NET 80 (msg:"ban http"; sid:100003;) alert tcp any any -> $HOME_NET 21 (msg:"ban ftp"; sid:100004;) alert icmp any any -> $HOME_NET any (msg:"ban icmp"; sid:100005;)
然后运行snort,指定输出日志的路径
snort -c /etc/snort/rules/local.rules -l /var/log/snort
然后使用python起一个80 http
python3 -m http.server 80
回到物理机操作:
-
用物理机访问,完成http
-
然后物理机使用windows资源管理器访问ftp://192.168.x.xxx完成ftp
-
最后物理机使用ping 192.168.x.xxx完成icmp探测
注意以上都是在物理机访问虚拟机,如果虚拟机自己访问则不会走ens33网卡而是走lo回环了,因此抓不到记录
最后查看访问记录/var/log/snort/alert,实践成功
欢迎在评论区留言,欢迎关注我的CSDN @Ho1aAs



