FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE
source link: https://blog.51cto.com/chenguang/6003962
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
在2019年发布的文章《手动打造Snort+barnyard2+BASE可视化报警平台》,目前已有20K+的浏览量,帮助了很多想深入了解Snort,而又无法独立安装系统的同学。前段时间一些学员留言,询问有关Pfsense(基于FreeBSD的开源防火墙)的问题,经过一段时间的研究,萌生了在FreeBSD系统中手动下载源码并编译Snort IDS的想法,实验成功后现分享给大家。有关FreeBSD和Linux的性能对比就不再赘述。
1.安装系统
安装特点:FreeBSD下安装snort及相关组件,对软件编译知识要求的比较少,很多依赖关系都可以自动完成,对硬件资源要求不高,但对网络访问质量要求很高,有些代码需访问外网才能完成安装。推荐在VMware workstation中安装。
通过下面的URL获取安装镜像
-
https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/
2.设置静态IP
sendmail_enable="NONE"
hostname="snortvm"
ifconfig_le0="192.168.183.136 netmask 255.255.255.0"
defaultrouter="192.168.183.2"
sshd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
apache24_enable="yes"
mysql_enable="YES"
snort_enable="YES"
修改DNS
nameserver 192.168.183.2
以上网络地址需根据实际需要设置(IP:192.168.183.136)。为启动Snort需要,我们查看当前网络接口。有的系统为em0,有的系统为le0.
3.设置SSH远程登录
系统安装完成重新登录系统后,首先设置SSH服务,允许root 远程登录。方法如下:
编辑 /etc/ssh/sshd_config 文件
将其中的第36行
即将前面的#去掉,并将no改为yes,保存退出。
重启动SSHD服务
4.源码安装Snort
为了源码编译,我们先要完成安装前准备工作,首先执行下面命令:
该步骤的目的是下载、更新Ports 套件快照。
#make install
编译环节,耗时比较长,需要多次确认安装组件(保持默认选择OK选项即可)。所有下载的源码包存储在/usr/ports/distfiles目录。
当上面的准备工作做好之后,安装编译snort根本就用不着我们操心,执行下面命令。
该命令系统会考虑依赖包的问题自动安装Snort、barnyard2、pulldpork共3个软件。
在随后弹出界面中,选择MYSQL,表示barnyard2支持数据库输出插件。随后按提示点击OK按钮,直到安装结束。
在Snort 软件安装完成时,另两款工具Barnyard2 v2.1.13(支持数据库插件)、pulledpork v0.74也随之安装完,但都需要单独配置才能运行。
Tips:如果需要在多台机器中部署,为了节约下载时间,也可以通过其他机器将软件下载完成后,导入全部tarball包下载到/usr/ports/distfiles目录。
5.Snort配置
首先我们要编辑/usr/local/etc/snort/snort.conf配置文件。将snort.conf的第一行加入网络号
原配:ipvar HOME_NET [YOU_NEED_TO_SET_HOME_NET_IN_snort.conf]
修改:ipvar HOME_NET [192.168.183.0/24]
接着修改黑名单和白名单路径,下面是原始配置
改为现在配置(238行)
修改规则变量的路径
注销暂时不用的规则。我们先将"include $RULE_PATH/local.rules"之后的所有引用规则暂时注销。修改完成后保存退出。
接着在目录/usr/local/etc/snort/rules下建立规则文件local.rules,并写入ping规则(写法参考上一篇博客)。
Tip:源码包安装的情况需要手动建立,如果用pkg install snort则会产生/var/log/snort
#touch white_list.rules black_list.rules#mkdir /var/log/barnyard2
#cd /usr/local/etc/snort/
#touch sid-msg.map
#touch /var/log/snort/barnyard2.waldo
准备工作完成之后下面尝试启动Snort
6.配置pulledpork
PulledPork (这个单词原意是猪肉汉堡)是一个 perl 脚本,它将从不同位置下载、组合和安装/更新 Snort 规则集以供 Snort 使用。Pulled Pork 将所有规则合并到一个文件中:/etc/snort/rules/snort.rules.
我们需要确保将行:添加include $RULE PATH/snort.rules到snort.conf文件中,否则在 Snort 启动时,PulledPork 规则不会被读入内存。
Pulledpork主程序虽然已经安装,但没有配置,我们还是无法使用,下面我们进入pulledpork配置目录,将pulledpork.conf.sample配置模板文件复制为pulledpork.conf
#cp pulledpork.conf.sample pulledpork.conf
# vi pulledpork.conf
查看第19行配置,原配置如下:
首先我们要把pulledpork的配置文件复制到/etc/snort/目录。我们登录snort.org官网注册用户并获取oinkcode代码。修改完成后,保存退出。此时我们不要急于运行pulledpork脚本,还需要新建iplists目录。
7.运行pulledpork
确保pulledpork.conf配置正确的情况下。执行下列命令。
该脚本执行完成之后,将发生以下变化:
手动新建下列2个文件:
/usr/local/etc/snort/rules/snort.rules
然后下载2个压缩包放置在/tmp目录
snortrules-snapshot-29171.tar.gz
注释:如果pulledpork这个脚本无法运行,我们也可以手动下载文件snortrules-snapshot-29180.tar.gz
8.自动升级Snort规则
我们将 PulledPork 脚本添加到 root 的 crontab,以实现自动升级Snort规则,操作如下。
在 crontab 中添加以下行:
改进方法,写一个升级规则的脚本,然后在crontab启动这个脚本。
9.安装数据库
在Snort IDS的数据库系统配置过程往往和barnyard2一起进行,因为Barnyard2运行需要连接数据库,我们接着先来安装mysql57。
echo 'mysql_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/mysql-server start
启动数据库
这里数据库管理员的初始化密码不为空,我们要获取数据库初始密码,只有启动数据库之后,系统才会产生.mysql_secret文件。
#cat /root/.mysql_secret
登录数据库并修改管理员密码
系统提示需重置管理员密码。下面的命令将管理员设置密码为‘123456’
10.设置MySQL数据库
为root用户创建了新密码之后,下面开始创建 snort 数据库并设置用户访问权限:
mysql> CREATE DATABASE snort;
mysql>use snort;
mysql>GRANT ALL PRIVILEGES ON snort.* TO 'snort'@'localhost' IDENTIFIED BY '123456';
有一个用 snort 预先打包的脚本来为您设置表:
对于pkg install snort方式安装的可以用这条命令。
11.配置barnyard2脚本
以下是barnyard2.conf(/usr/local/etc/barnyard2.conf)参考配置:
config classification_file: /usr/local/etc/snort/classification.config
config gen_file: /usr/local/etc/snort/gen-msg.map
config sid_file: /usr/local/etc/snort/sid-msg.map
config hostname: snortvm
config interface: le0 //可选的配置项
config logdir: /var/log/snort //可选的配置项
config waldo_file:/var/log/snort/barnyard2.waldo
input unified2
output alert_fast: stdout //将报警显示在屏幕
output alert_fast
output database: log, mysql, user=snort password=123456 dbname=snort host=localhost
启动barnyard2
通过ping测试snort规则报警,以便观察数据库表的变化。
,Snort+Barnyard2+MySQL联通实验完成之后下面解决WebUI的问题,本实验安装BASE 1.4.5。
12.安装BASE
(1)安装Apache
安装程序会自动创建用户www和组www
(2)安装PHP模块(php 74)
#pkg install php74 (FreeBSD 11、12下默认安装php7.4)
#cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
编辑php.ini文件
#vi /usr/local/etc/php.ini
安装BASE (1.4.5)
在Linux其他版本中BASE仅支持PHP5.6 ,对于PHP7不支持,这里FreeBSD社区对BASE进行了优化。
#pkg install base-1.4.5_1
adodb5-php74: 5.21.2
base: 1.4.5_1
fontconfig: 2.13.94_1,1
giflib: 5.2.1
jbigkit: 2.1_1
jpeg-turbo: 2.1.1
libgd: 2.3.1,1
php74-ctype: 7.4.24
php74-gd: 7.4.24
php74-gettext: 7.4.24
php74-pear: 1.10.12
php74-pear-Image_Canvas: 0.3.2_1
php74-pear-Image_Color: 1.0.4
php74-pear-Image_Graph: 0.8.0
php74-pear-Log: 1.13.3
php74-pear-Mail: 1.4.1,1
php74-pear-Mail_Mime: 1.10.11,2
php74-session: 7.4.24
php74-xml: 7.4.24
php74-zlib: 7.4.24
png: 1.6.37_1
tiff: 4.3.0
webp: 1.2.1
备注:如何找到这个软件名: pkg search base-1.4.5,我想在系统找到安装的软件:pkg info | grep base
查看这个软件包安装路径: pkg info -l base 小写字母l
base-1.4.5_1:
/usr/local/share/doc/base/CREDITS
/usr/local/share/doc/base/GPL
/usr/local/share/doc/base/README
/usr/local/www/base/admin/base_roleadmin.php
/usr/local/www/base/admin/base_useradmin.php
/usr/local/www/base/admin/index.php
/usr/local/www/base/base_ag_common.php
……
安装BASE完成之后还需要下面3步操作。
移动BASE目录
在423后面加上两行。
AddType application/x-httpd-php-source .phps
保存退出。下面开始重启Web服务器
设置BASE
打开浏览器输入网址 http://192.168.183.136/base/
ADODB路径/usr/local/share/adodb/
到此,FreeBSD设置BASE设置就圆满完成。相比较LInux系统安装,我们在这里不用考虑依赖包的问题,不用建立繁琐的软连接,安装过程基本实现半自动化,需要注意的是FreeBSD 11~13 都可以安装 Snort+Barnyard+Mysql。但只有FreeBSD 11可以安装BASE,本文场景适用于复杂繁重的网络环境让FreeBSD系统的IDS做数据分析存储,然后在LInux环境中安装WebUI实现报警可视化。
2022年51CTO学堂讲师评选正在进行中,希望各位投上宝贵一票。
https://edu.51cto.com/lecturer/350944.html
(以用户ID登录并进行投票)
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK