用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
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,这篇放后面写。