实验
Snort
安装
# 禁止在apt安装时弹出交互式配置界面
export DEBIAN_FRONTEND=noninteractive
apt install snort
实验一:配置snort为嗅探模式
# 显示IP/TCP/UDP/ICMP头
snort -v
# 显示应用层数据
snort -vd
# 显示数据链路层报文头
snort -vde
# -b 参数表示报文存储格式为 tcpdump 格式文件
# -q 静默操作,不显示版本欢迎信息和初始化信息
snort -q -v -b -i eth1 "port not 22"
# 使用 CTRL-C 退出嗅探模式
# 嗅探到的数据包会保存在 /var/log/snort/snort.log.<epoch timestamp>
# 其中<epoch timestamp>为抓包开始时间的UNIX Epoch Time格式串
# 可以通过命令 date -d @<epoch timestamp> 转换时间为人类可读格式
# exampel: date -d @1511870195 转换时间为人类可读格式
# 上述命令用tshark等价实现如下:
tshark -i eth1 -f "port not 22" -w 1_tshark.pcap
实验二:配置并启用snort内置规则
# /etc/snort/snort.conf 中的 HOME_NET 和 EXTERNAL_NET 需要正确定义
# 例如,学习实验目的,可以将上述两个变量值均设置为 any
snort -q -A console -b -i eth1 -c /etc/snort/snort.conf -l /var/log/snort/
实验三:自定义snort规则
# 新建自定义 snort 规则文件
cat << EOF > /etc/snort/rules/cnss.rules
alert tcp \$EXTERNAL_NET any -> \$HTTP_SERVERS 80 (msg:"Access Violation has been detected on /etc/passwd ";flags: A+; content:"/etc/passwd"; nocase;sid:1000001; rev:1;)
alert tcp \$EXTERNAL_NET any -> \$HTTP_SERVERS 80 (msg:"Possible too many connections toward my http server"; threshold:type threshold, track by_src, count 100, seconds 2; classtype:attempted-dos; sid:1000002; rev:1;)
EOF
# 添加配置代码到 /etc/snort/snort.conf
include $RULE_PATH/cnss.rules
snort -q -A fast -b -i eth1 -c /etc/snort/snort.conf -l /var/log/snort/
实验四:和防火墙联动
本实验需要用到的脚本代码 Guardian-1.7.tar.gz ,请下载后解压缩:
# 解压缩 Guardian-1.7.tar.gz
tar zxf guardian.tar.gz
# 安装 Guardian 的依赖 lib
apt install libperl4-corelibs-perl
本次实验需要的一个最小化的实验环境是2台主机,假设网络拓扑信息如下:
- VM-1 IP: 192.168.56.101 eth1 Host-only 运行
nmap
扫描 VM-2 - VM-2 IP: 192.168.56.102 eth1 Host-only 运行
snort
和guardian.pl
开始实验之前,VM-1 和 VM-2 可以互相双向访问。
在VM-2上先后开启 snort
和 guardian.pl
# 开启 snort
snort -q -A fast -b -i eth1 -c /etc/snort/snort.conf -l /var/log/snort/
# 假设 guardian.tar.gz 解压缩后文件均在 /root/guardian 下
cd /root/guardian
编辑 guardian.conf 并保存,确认以下2个参数的配置符合主机的实际环境参数。
HostIpAddr 192.168.56.102
Interface eth1
# 启动 guardian.pl
perl guardian.pl -c guardian.conf
在VM-1上用 nmap
暴力扫描 VM-2:
nmap 192.168.56.102 -A -T4 -n -vv
guardian.conf 中默认的来源IP被屏蔽时间是 60 秒(屏蔽期间如果黑名单上的来源IP再次触发snort报警消息,则屏蔽时间会继续累加60秒)
root@KaliRolling:~/guardian# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 192.168.56.101 0.0.0.0/0 reject-with tcp-reset
DROP all -- 192.168.56.101 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# 1分钟后,guardian.pl 会删除刚才添加的2条 iptables 规则
root@KaliRolling:~/guardian# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
实验思考题
- IDS与防火墙的联动防御方式相比IPS方式防御存在哪些缺陷?是否存在相比较而言的优势?
- 使用 Suricata 代替 Snort , 重复本实验。
- 配置 Suricata 为 IPS 模式,重复
实验四
。