前言

整个SNAT环境实现的搭建,跳转Blog:

SNAT共享上网

在centos-stream-9上安装snort2.9,跳转Blog:

centos-stream-9下安装snort2-9【arm虚拟机版】

snort2.9规则集配置,跳转Blog:

centos-stream-9 snort2.9规则集配置

环境配置

CentOS: CentOS-Stream-9, ARM, 【Parallels虚拟机,NAT,防火墙】

CentOS操作用户:在root用户下进行snort部署

CentOS的 iptables版本:iptables v1.8.8 (nf_tables)

Ubuntu: Ubuntu 20.04.2 ARM64 【client内网客户机】

snort版本:snort-2.9.20

daq版本: daq-2.0.7

CentOS源:阿里源

规则集版本: 29200

Tips: 注意!规则集和snort版本要对应上,因为不同版本的可能会有一些新规则不能匹配上,就不能顺利运行。参考官网,每个新版本的说明,包括规则集的说明:

规则集

版本说明

snort+iptables实现IPS的功能说明

snort是一个IDS,只能实现检测不能阻断数据包

iptables可以拦截数据包。

所以用snort+iptables共同使用,来实现数据包的阻断功能。充当IPS。

但是通常iptables是写死的。就把数据包一直拦截,不管有没有这个包

此次实验。就是让snort的IDS和iptables一起联动。使得snort开启IDS检测时,只有被检测到了规则里的数据包,它才会自动让iptables拦截。

测试 Snort+iptables 实现IPS功能【手动iptables添加】

  1. 将enp0s5开启外网网卡。snort.conf HOME_NET需要修改

    此时enp0s5,是共享网络模式,可以访问外网,可以和一个电脑下其他虚拟机进行通信。ip地址为10.211.55.12

    (其实开不开都可以,只要满足HOME_NET和网卡的IP是对应的就可以)

  2. 在snort里加入规则

    vim /etc/snort/rules/local.rules
    

    下面的规则,意思就是丢弃ping包

    drop icmp any any -> $HOME_NET any (msg:"ICMP test"; sid:10000001; rev:001;)
    
  3. 启动snort

    snort -Q --daq nfq --daq-var  device=enp0s5 --daq-var queue=1 -u snort -g snort -c /etc/snort/snort.conf -A console
    
  4. Iptables 添加规则【开启另外一个shell】

    iptables -I INPUT -j NFQUEUE --queue-num 1 --queue-bypass
    
  5. kali进行ping的行为

    • 当snort未开启,且未加入iptables规则时。kali可以成功的ping通10.211.55.12

    • 当snort开启,且加入iptables规则时。kali无法ping通10.211.55.12

    • 当snort开启,但没有加入iptables规则时。kali 可以ping通10.211.55.12 。但snort不能检测到


安装配置guardian

  1. 在官网下载脚本

    下载链接

    官网链接

  2. 将下载的文件放到snortfile文件夹

    # 通过物理机scp将文件传到了/root下
    # 解压到snortFile
    tar -zxvf guardian-1.7.tar.gz -C snortFile/
    
  3. 创建guardian文件夹

    cd snortFile/guardian-1.7/
    touch /etc/snort/guardian.ignore
    touch /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 /etc/snort
    
  4. 编辑guardian配置文件

    vim /etc/snort/guardian.conf
    

    网卡选择了nat server连接内网的网卡

    HostIpAddr  10.211.55.12
    Interface   enp0s5
    LogFile    /var/log/snort/guardian.log
    AlertFile   /var/log/snort/alert             //alert文件的位置
    IgnoreFile  /etc/snort/guardian.ignore        //白名单
    targetFile   /etc/snort/guardian.target        //黑名单
    TimeLimit 120                       //阻断时间,以秒为单位
    

  5. 启动guardian

    /usr/bin/perl /usr/local/bin/guardian.pl -c /etc/snort/guardian.conf
    

    执行perl文件

    报错

    img

    (ARM架构)报错问题参见另外一篇Blog:https://gryffinbit.top/2022/07/27/arm%E5%AE%89%E8%A3%85perl%E7%8E%AF%E5%A2%83/

    临时解决方案见:https://stackoverflow.com/questions/47990911/which-module-do-i-need-when-i-got-error-info-cant-locate-getopts-pl-in-inc

    perl -I /usr/lib/libperl4-corelibs-perl /usr/bin/perl /usr/local/bin/guardian.pl -c /etc/snort/guardian.conf
    

测试 Snort+iptables 实现IPS功能【guardian自动化】

  1. 在snort里加入规则

    vim /etc/snort/rules/local.rules
    
    drop icmp any any -> $HOME_NET any (msg:"ICMP test"; sid:10000001; rev:001;)
    
  2. 启动snort

    snort -A fast -i enp0s5 -u snort -g snort -c /etc/snort/snort.conf
    

    快速报警模式,将告警信息简单的写入警报

    cd /var/log/snort
    tail -f alert
    

  3. 启动guardian

    /usr/bin/perl /usr/local/bin/guardian.pl -c /etc/snort/guardian.conf
    

  4. 攻击机发起攻击

    使用kali对10.37.129.1发起扫描进攻

    发起tcp攻击(flood攻击)

    hping3 --flood -S --rand-source 10.37.129.1
    

参考文章

guardian

perl报错修复

libperl4-corelibs-perl 安装

http://www.qfrost.com/undefined/snort/

https://blog.csdn.net/hexf9632/article/details/98200876

评论