原博客:https://blog.csdn.net/hexf9632/article/details/98200876
主要记录自己实验的,部分文件位置和命令因为安装情况不一样,根据自己情况改了。
用的snort3,还没成功,目前主要的不同点就是snort配置文件和alert文件了,之后换snort2再来试一次
1、安装guardian ,
下载网址https://www.chaotic.org/guardian/
解压
wget https://www.chaotic.org/guardian/
tar -zxvf guardian-1.7.tar.gz
配置(这里原来链接的目录是etc/snort,但我前面跟的安装教程目录是/usr/local/etc/snort,这里直接改了。)
# cd guardian-1.7
# touch /usr/local/etc/snort/guardian.ignore
# touch /usr/local/etc/snort/guardian.target
# touch /var/log/snort/guardian.log
# cp guardian.pl /usr/local/bin/
# cp scripts/iptables_block.sh /usr/local/bin/guardian_block.sh
# cp scripts/iptables_unblock.sh /usr/local/bin/guardian_unblock.sh
# cp guardian.conf /usr/local/etc/snort
编辑guardian配置文件,vi /usr/local/etc/snort/guardian.conf
Interface ens33
LogFile /var/log/snort/guardian.log
AlertFile /var/log/snort/alert_json.txt //alert文件的位置
IgnoreFile /usr/local/etc/snort/guardian.ignore //白名单
targetFile /usr/local/etc/snort/guardian.target //黑名单
TimeLimit 120 //阻断时间,以秒为单位
guardian启动
/usr/bin/perl /usr/local/bin/guardian.pl -c /usr/local/etc/snort/guardian.conf
#或进入guardian.pl在的目录
root@y:~/snort_src/guardian-1.7# perl ./guardian.pl -c /usr/local/etc/snort/guardian.conf
OS shows Linux
My ip address and interface are: 192.168.79.131 ens33
Loaded 0 addresses from /usr/local/etc/snort/guardian.ignore
Loaded 0 addresses from /usr/local/etc/snort/guardian.target
Becoming a daemon..
root@y:~/snort_src/guardian-1.7#
出现了第一个报错
参考链接https://www.jianshu.com/p/7fcb7a0e553a
第一个use不知道是哪个系统的,直接用了第二个安装兼容perl4的包的命令
cpan Perl4::CoreLibs
然后又出现一个报错
参考这篇博客发现前面漏了HostIpAddr,去掉HostIpAddr前面的注释,补上地址
vim /usr/local/etc/snort/guardian.conf HostIpAddr 192.168.79.131
目前没报错了
Guardian 停止
ps -ef|grep guardian
kill -9 pid
2、联动测试
测试规则是否加载生效,vi /usr/local/etc/rules/local.rules,添加下面两条规则
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:“OUT”; sid:5000005)
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:“IN”; sid:5000006)
规则说明:告警外网和内网之间的所有tcp流量,用来测试你的snort.conf配置是否有问题
启动snort,查看alert是否有日志
# snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules
# cd /var/log/snort
# tail -f alert_json.txt
如果可以看到日志,则表明snort.conf配置没有问题,可以继续下面的测试,否则请检查snort.conf的配置,以及snort目录和文件权限设置。
联动测试
如果之前的测试没有问题,请将/usr/local/etc/rules/local.rules你所添加的两条规则删除或注释掉。
vi /usr/local/etc/rules/local.rules
登录另一台windows测试主机(注意:如果用本机扫描很有可能导致snort主机无法登陆),打开浏览器,登录http://tools.hetianlab.com/tools/X-Scan-v3.3-cn.rar下载x-scan并解压,双击文件打开x-scan
设置扫描参数
点击“扫描参数”按钮,将指定IP范围设置成你的snort主机ip地址,在“全局设置”的“扫描模块”中选中“全选”,“插件设置”的“SNMP相关设置”、“NETBIOS相关设置”、“漏洞检测脚本设置”均选择全部选中。点击开始按钮,开始扫描。
观察alert是否有告警日志
# cd /var/log/snort
# tail -f alert
发现告警日志,启动guardian与iptables联动
# /usr/bin/perl /usr/local/bin/guardian.pl -c /usr/local/etc/snort/guardian.conf
在snort主机上执行iptables -L
观察是否有规则加入,有规则即实验成功。
实验未成功的问题解决
实验失败,没有规则加入,感觉可能是guardian下的不是原来推荐的实验室的(原链接失效,另外在网上找的),估计配置不太行。
以下更正来自b站视频(【网络安全教程】手动搭建Snort系统!CentOS 7下的Snort+Iptables+Guardian联动实验_哔哩哔哩_bilibili)
1、找了几个文件,发现没有脚本......,到网上找了个脚本(链接:https://blog.51cto.com/chenguang/7823276),但我不太懂脚本语言,不知道有的地方前面的空格对不对的上
下面改动的几个guardian文件位置都在前面复制的地方/usr/local/bin
#!/bin/bash cd /usr/local/bin #start函数负责启动guardian程序。它首先更新环境变量PATH以包含本地二进制路径,然后 使用指定的配置文件启动guardian程序。 start() { # 将/usr/local/bin添加到PATH环境变量中 export PATH=$PATH:/usr/local/bin # 使用/etc/guardian.conf启动guardian.pl脚本 /usr/local/bin/guardian.pl -c /usr/local/etc/snort/guardian.conf } # stop函数负责停止guardian程序。它首先检查guardian是否正在运行,如果是,就杀掉进 程,否则就输出"guardian is not running ...."。 stop() { # 查询名为'guardian.pl *-c'的进程 ps aux |grep 'guardian.pl *-c' 2>&1 > /dev/null #判断语句,如果进程存在,则停止该进程 if [ $? -eq 0 ]; then kill `ps aux |grep 'guardian.pl *-c' ` #如果进程不存在,则输出"guardian is not running ...." else echo "guardian is not running ...." fi } # status函数用于检查guardian进程是否正在运行,如果是,输出"guardian is running ....",否则输出"guardian is not running ...."。 status() { ps aux |grep 'guardian.pl *-c' 2>&1 > /dev/null if [ $? -eq 0 ]; then echo "guardian is running ...." else echo "guardian is not running ...." fi } # 根据传入的参数($1)执行不同的函数 case "$1" in # 如果传入的参数是start,则调用start函数 start) start ;; # 如果传入的参数是stop,则调用stop函数 stop) stop ;; # 如果传入的参数是restart,则先调用stop函数,再调用start函数 restart) stop start ;; # 如果传入的参数是status,则调用status函数 status) status;; *) # 如果传入的参数不是上述的任何一种,那么输出使用方法 echo $"Usage: $0 {start|stop|restart|status}" esac
执行脚本
bash guardian.sh
guardian_block.sh增加内容
/sbin/iptables -I INPUT -p tcp -s $source -i &interface -j REJECT --reject-with tcp-reset
guardian_unblock.sh增加内容
/sbin/iptables -D INPUT -p tcp -s $source -i $interface -j REJECT --reject-with tcp-reset
查看guardian状态
root@y:/usr/local/bin# bash guardian.sh status guardian is running ....
2、运行snort(一般是snort.conf文件,我跟的是lua,没有conf文件)
snort -c /usr/local/etc/snort/snort.lua -i ens33 -A fast
3、更改local.rules
alert icmp any any -> any any (msg:"snort test";dsize:>65499;itype:8;sid:10000003;rev:1;)
tail -f /var/log/snort/alert_json.txt
em……还是没成,继续找错,在视频支持下,对pl文件伸出了魔爪
根据地址对这里进行修改试试(和我的文件位置不同,但print输出貌似没啥影响)
190行
233和234行
又找到了一个guardian下载链接:
https://c4pr1c3.github.io/cuc-ns/chap0x09/exp.html