用snort+barnyard2+base 搭建入侵检测系统IDS

   前言吐槽:最近给老板干活编写攻防教材,恰好我负责校对的这部分出了问题……原本师兄直接拷贝的那篇博客是15年的……环境用的ubuntu12,其中的snort-mysql早被drop掉了,14以上用都用不了……没办法,老板要求要在ubuntu22上实现,那就自己尝试着搭⑧,测试五分钟,搭环境十小时

  环境:ubuntu22,snort 2.9.20,php5.6 ,mysql8.0.32,barnyard2 2.1.12、perl5

  对于环境要说的是,之前网上的博客都很古早,之前的sql都是5,perl都是4,会出现非常多的坑,下面会一一提到。

  1.apt安装依赖

sudo apt-get install -y zlib1g-dev liblzma-dev openssl libssl-dev build-essential bison flex libpcap-dev libpcre3-dev libdumbnet-dev libnghttp2-dev mysql-server libmysqlclient-dev mysql-client autoconf libtool libcrypt-ssleay-perl liblwp-useragent-determined-perl libwww-perl apache2 libapache2-mod-php5.6 php5.6 php5.6-common php5.6-gd php5.6-cli php5.6-xml php5.6-mysql php-pear libphp-adodb perl pcre grep iptables 
sudo add-apt-repository ppa:ondrej/php

  2.安装snort

  先装相关组件daq和LuaJIT

wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
tar xvzf daq-2.0.7.tar.gz
cd daq-2.0.7 
./configure && make && sudo make install
wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
cd LuaJIT-2.0.5/ 
sudo make && sudo make install

  下载安装snort-2.9.20

wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz
cd snort-2.9.20
./configure --enable-sourcefire && make && sudo make install

 3.对snort进行配置

#为snort创建组和用户
sudo groupadd snort
sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
#创建snort所需的文件夹
sudo mkdir /etc/snort
sudo mkdir /etc/snort/rules
sudo mkdir /etc/snort/rules/iplists
sudo mkdir /etc/snort/preproc_rules
sudo mkdir /usr/local/lib/snort_dynamicrules
sudo mkdir /etc/snort/so_rules
#创建存储规则和ip列表的相关文件 
sudo touch /etc/snort/rules/iplists/black_list.rules
sudo touch /etc/snort/rules/iplists/white_list.rules
sudo touch /etc/snort/rules/local.rules
sudo touch /etc/snort/sid-msg.map
#创建日志文件夹 
sudo mkdir /var/log/snort
sudo mkdir /var/log/snort/archived_logs
#调整权限 
sudo chmod -R 5775 /etc/snort
sudo chmod -R 5775 /var/log/snort
sudo chmod -R 5775 /var/log/snort/archived_logs
sudo chmod -R 5775 /etc/snort/so_rules
sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules
#修改文件权限
sudo chown -R snort:snort /etc/snort
sudo chown -R snort:snort /var/log/snort
sudo chown -R snort:snort /usr/local/lib/snort_dynamicrules
#进行文件拷贝
cd     ~/snort-2.9.20/etc/ #路径为自己snort包的路径 
sudo cp .conf /etc/snort 
sudo cp *.map /etc/snort 
sudo cp *.dtd /etc/snort 
cd ~/snort-2.9.20/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/ 
sudo cp * /usr/local/lib/snort_dynamicpreprocessor/
#修改snort.conf配置
sudo vi /etc/snort/snort.conf
#第45行,ipvar HOME_NET注释掉原配置,修改为本机的内部网络
ipvar HOME_NET 192.168.137.0/24
#第104行,注释掉相关路径,设置以下配置文件路径
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules
var WHITE_LIST_PATH /etc/snort/rules/iplists
var BLACK_LIST_PATH /etc/snort/rules/iplists
#第521行添加
# output unified2: filename merged.log, l imit 128, nostamp, mpls event types, vlan event types }
output unified2: filename snort.u2, limit 128
#第546行取消注释,启用local.rules文件
include $RULE_PATH/local.rules
#上面的一些路径注意换成自己的

  添加一条本地规则,下面是对icmp探测的规则,只是为了测试,后续可以用pulledpok自动下载管理规则集

sudo vi /etc/snort/rules/local.rules
添加:alert icmp any any -> $HOME_NET any (msg:"ICMP Test detected!!!"; classtype:icmp-event; sid:10000001; rev:001; GID:1; )
sudo vi /etc/snort/sid-msg.map
添加:1 || 10000001 || 001 || icmp-event || 0 || ICMP Test detected || url,tools.ietf.org/html/rfc79
sudo snort -T -c /etc/snort/snort.conf -i ens33#进行测试,如果出现Successful则说明配置正确

  测试snort

sudo snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i ens33
 可以用外网ping 本机的ip,会出现下述记录,信息保存在/var/log/snort中,文件名为snort.log.xxx,好啦,snort这就安装配置完成啦,接下来用barnyard2实现snort与mysql的联动

  4.安装barnyard2

wget https://github.com/firnsy/barnyard2/archive/v2-1.12.tar.gz -O barnyard2-2-1.12.tar.gz
tar zxvf barnyard2-2-1.13.tar.gz
    cd barnyard2-2-1.13
    autoreconf -fvi -I ./configure --with-mysql --with-mysql-libraries=/usr/lib/x86_64-linux-gnu
    sudo make && sudo make install
#编译需要用到mysql的库,注意看下自己的库位置,不用mysql库编译后续配置的时候会报错

这里如果是跟笔者一样用了mysql8,会出现报错,如下

spo_alert_fwsam.c:118:13: error: two or more data types in declaration specifiers
  118 | typedef int SOCKET;
      |             ^~~~~~

In file included from spo_database.c:103:
../output-plugins/spo_database.h:360:5: error: unknown type name ‘my_bool’
  360 |     my_bool mysql_reconnect; /* We will handle it via the api. */
      |     ^~~~~~~

参考此博客

(1)报错SOCKET

  将barnyard2-2-1.13/src/output-plugins/spo_alert_fwsam.c中的SOCKET 全部修改为Barnyard2_SOCKET

(2)mybool报错

 

  将对应文件的my_bool全部修改为bool。

完成上述操作,使用barnyard2 -V查看版本信息,ok的话就是安装成功了,接下来进行配置

#复制配置文件
cd ~/barnyard2-master
sudo cp etc/barnyard2.conf /etc/snort
sudo mkdir /var/log/barnyard2
sudo chown snort.snort /var/log/barnyard2
sudo touch /var/log/snort/barnyard2.waldo
sudo chown snort.snort /var/log/snort/barnyard2.waldo

进入mysql进行配置

#配置mysql并为barnyard建立数据库
create database snort;
use snort;
source /home/chenrt/barnyard2-master/schemas/create_mysql;
create user 'snort'@'localhost' identified by 'snort-db';
grant create, insert, select, delete, update on snort.* to 'snort'@'localhost';
#这里遇到的坑主要是mysql8的语法相较mysql5的语法发生了变化,网上给的教程都是直接进行授权,然后配置密码,但是
#添加数据库配置
sudo vi /etc/snort/barnyard2.conf
#在末尾添加数据库配置
output database: log, mysql, user=snort password=snort-db dbname=snort host=localhost 

接下来进行测试

开两个终端,用外网ping ens33的ip,可以查看到信息

sudo snort -q -u snort -g snort -c /etc/snort/snort.conf -i ens33
sudo barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.u2 -w /var/log/snort/barnyard2.waldo -g snort -u snort

登录mysql查看,event条目有没有增加

mysql -u snort -p -D snort -e "select count(*) from event"

  上述还有白名单、黑名单等功能,可以自行探索。

  5.配置base图形化界面

http://sourceforge.net/projects/secureideas/files/BASE/base-1.4.5/base-1.4.5.tar.gz
#下载源码,解压后将文件夹拷贝到 /var/www/html/base/
#配置权限
sudo chown -R www-data:www-data /var/www/html/base sudo chmod o+w /var/www/html/base 
#调整php配置,修改报错条件
sudo gedit /etc/php/5.6/apache2/php.ini
error_reporting = E_ALL & ~E_NOTICE
#调整 Apache 配置,修改BASE目录规则
sudo gedit /etc/apache2/apache2.conf
<Directory /var/www/html/base> AllowOverride All Require all granted     </Directory>
#重启Apache服务
sudo service apache2 restart

完成后,在浏览器地址栏中打开localhost/base/setup/index.php进行base的配置,在页面点击continue按钮,按照提示进行安装。

(1)选择语言为 simple_chinese,选择adodb的路径为/usr/share/php/adodb;

(2)选择数据库为 MySQL,数据库名为 snort,数据库主机为 localhost,数据库用户名为 snort 的口令为 snort-db,其他均为缺省;

(3)点击submit query;

(4)设置 acidbase 系统管理员用户名和口令,此处设置系统管理员用户名为admin,口令为 test。随后按网页提示即可完成安装。

配置完成后即可进入登录界面,输入用户名和口令,进入 base 系统。点击creat BASE AG 可进入以下页面。

 随后点击step5,如下图,则表示配置成功。

随后启动Snort,若无异常报错则表明Snort 入侵检测系统已安装完成并正常启动,使用外网进行ping测试,可以看到BASE界面的信息

 

 

 在上面第(4)的时候可能出现报错,如下图

 

 

 主要原因是mysql8调整了hash算法,进行如下修改

#在/etc/mysql/my.cnf中添加
[mysqld] 
default_authentication_plugin=mysql_native_password
#在mysql中设置
ALTER USER 'snort'@'localhost' IDENTIFIED BY 'snort-db' PASSWORD EXPIRE NEVER;
ALTER USER 'snort'@'localhost' IDENTIFIED WITH mysql_native_password BY 'snort-db';
FLUSH PRIVILEGES;
重启mysql服务,重新进行初始化即可。
service mysql restart

至此就全部完成了。然后后续我还使用了guardian实现iptables和snort的联动,但是因为没有全部测试完,不写了。

遇到了一点小问题,原来的都是用perl4,我用的perl5,会报错Can't locate getopts.pl in @INC,这篇放后面写。

 

posted @ 2023-02-28 19:20  Sylvia_lee  阅读(607)  评论(0编辑  收藏  举报