6

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE

 1 year ago
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.
neoserver,ios ssh client

       在2019年发布的文章《手动打造Snort+barnyard2+BASE可视化报警平台》,目前已有20K+的浏览量,帮助了很多想深入了解Snort,而又无法独立安装系统的同学。前段时间一些学员留言,询问有关Pfsense(基于FreeBSD的开源防火墙)的问题,经过一段时间的研究,萌生了在FreeBSD系统中手动下载源码并编译Snort IDS的想法,实验成功后现分享给大家。有关FreeBSD和Linux的性能对比就不再赘述。

1.安装系统

安装特点:FreeBSD下安装snort及相关组件,对软件编译知识要求的比较少,很多依赖关系都可以自动完成,对硬件资源要求不高,但对网络访问质量要求很高,有些代码需访问外网才能完成安装。推荐在VMware workstation中安装。

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_php

通过下面的URL获取安装镜像

  • ​https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/​

2.设置静态IP

# vi /etc/rc.conf
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

# vi /etc/resolv.conf
nameserver 192.168.183.2

以上网络地址需根据实际需要设置(IP:192.168.183.136)。为启动Snort需要,我们查看当前网络接口。有的系统为em0,有的系统为le0.

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_php_02
# /etc/rc.d/netif restart && /etc/rc.d/routing restart
ping -c4 www.baidu.com

3.设置SSH远程登录

系统安装完成重新登录系统后,首先设置SSH服务,允许root 远程登录。方法如下:

编辑 /etc/ssh/sshd_config 文件

将其中的第36行

#PermitRootLogin no 改为 PermitRootLogin yes

即将前面的#去掉,并将no改为yes,保存退出。

重启动SSHD服务

#/etc/rc.d/sshd restart

4.源码安装Snort

为了源码编译,我们先要完成安装前准备工作,首先执行下面命令:

#portsnap fetch extract update

该步骤的目的是下载、更新Ports 套件快照。

#cd /usr/ports/ports-mgmt/portupgrade
#make install

编译环节,耗时比较长,需要多次确认安装组件(保持默认选择OK选项即可)。所有下载的源码包存储在/usr/ports/distfiles目录。

#rehash

当上面的准备工作做好之后,安装编译snort根本就用不着我们操心,执行下面命令。

#portinstall snort

该命令系统会考虑依赖包的问题自动安装Snort、barnyard2、pulldpork共3个软件。

在随后弹出界面中,选择MYSQL,表示barnyard2支持数据库输出插件。随后按提示点击OK按钮,直到安装结束。

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_BASE_03
FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_BASE_04

在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]

接着修改黑名单和白名单路径,下面是原始配置

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_数据库_05

改为现在配置(238行)

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_数据库_06

修改规则变量的路径

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_snort_07

注销暂时不用的规则。我们先将"include $RULE_PATH/local.rules"之后的所有引用规则暂时注销。修改完成后保存退出。

接着在目录/usr/local/etc/snort/rules下建立规则文件local.rules,并写入ping规则(写法参考上一篇博客)。

#mkdir /var/log/snort

Tip:源码包安装的情况需要手动建立,如果用pkg install snort则会产生/var/log/snort

#cd /usr/local/etc/snort/rules
#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

#snort -c /usr/local/etc/snort/snort.conf -i le0
FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_mysql_08

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

#cd /usr/local/etc/pulledpork
#cp pulledpork.conf.sample pulledpork.conf
# vi pulledpork.conf

查看第19行配置,原配置如下:

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_数据库_09

首先我们要把pulledpork的配置文件复制到/etc/snort/目录。我们登录snort.org官网注册用户并获取oinkcode代码。修改完成后,保存退出。此时我们不要急于运行pulledpork脚本,还需要新建iplists目录。

#mkdir -p /usr/local/etc/snort/rules/iplists/

7.运行pulledpork

确保pulledpork.conf配置正确的情况下。执行下列命令。

#/usr/local/bin/pulledpork.pl -c /usr/local/etc/pulledpork/pulledpork.conf
FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_数据库_10
FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_snort_11

该脚本执行完成之后,将发生以下变化:

手动新建下列2个文件:

/usr/local/etc/snort/sid-msg.map
/usr/local/etc/snort/rules/snort.rules

然后下载2个压缩包放置在/tmp目录

community-rules.tar.gz
snortrules-snapshot-29171.tar.gz

注释:如果pulledpork这个脚本无法运行,我们也可以手动下载文件snortrules-snapshot-29180.tar.gz

8.自动升级Snort规则

我们将 PulledPork 脚本添加到 root 的 crontab,以实现自动升级Snort规则,操作如下。

crontab -e

在 crontab 中添加以下行:

01 04 * * * /usr/local/bin/pulledpork.pl -c /etc/snort/pulledpork.conf -l

改进方法,写一个升级规则的脚本,然后在crontab启动这个脚本。

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_数据库_12

9.安装数据库

在Snort IDS的数据库系统配置过程往往和barnyard2一起进行,因为Barnyard2运行需要连接数据库,我们接着先来安装mysql57。

pkg install -y mysql57-server
echo 'mysql_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/mysql-server start

启动数据库

# /usr/local/etc/rc.d/mysql-server start

这里数据库管理员的初始化密码不为空,我们要获取数据库初始密码,只有启动数据库之后,系统才会产生.mysql_secret文件。

#cat /root/.mysql_secret

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_snort_13

登录数据库并修改管理员密码

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_mysql_14

系统提示需重置管理员密码。下面的命令将管理员设置密码为‘123456’

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_数据库_15

10.设置MySQL数据库

为root用户创建了新密码之后,下面开始创建 snort 数据库并设置用户访问权限:

# mysql -u root -p
mysql> CREATE DATABASE snort;
mysql>use snort;
mysql>GRANT ALL PRIVILEGES ON snort.* TO 'snort'@'localhost' IDENTIFIED BY '123456';

有一个用 snort 预先打包的脚本来为您设置表:

mysql> SOURCE /usr/local/share/examples/barnyard2/create_mysql;
FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_BASE_16

对于pkg install snort方式安装的可以用这条命令。

11.配置barnyard2脚本

以下是barnyard2.conf(/usr/local/etc/barnyard2.conf)参考配置:

config reference_file: /usr/local/etc/snort/reference.config
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

#/usr/local/bin/barnyard2 -c /usr/local/etc/barnyard2.conf -d /var/log/snort -f snort.log -w /var/log/snort/barnyard2.waldo

通过ping测试snort规则报警,以便观察数据库表的变化。

mysql -u snort -p -D snort -e "select count(*) from event"
FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_BASE_17

,Snort+Barnyard2+MySQL联通实验完成之后下面解决WebUI的问题,本实验安装BASE 1.4.5。

12.安装BASE

(1)安装Apache

#pkg install apache24

     安装程序会自动创建用户www和组www

#echo ' apache24_enable="yes"' >> /etc/rc.conf

(2)安装PHP模块(php 74)

#pkg install php74            (FreeBSD 11、12下默认安装php7.4)

#pkg install www/mod_php74 php74-mysqli
#cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

编辑php.ini文件

#vi /usr/local/etc/php.ini

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_snort_18

安装BASE (1.4.5)

在Linux其他版本中BASE仅支持PHP5.6 ,对于PHP7不支持,这里FreeBSD社区对BASE进行了优化。

#pkg install base-1.4.5_1                   

New packages to be INSTALLED:
adodb5-php74: 5.21.2
base: 1.4.5_1

        fontconfig: 2.13.94_1,1

freetype2: 2.11.0
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

root@snort:~ # pkg info -l base-1.4.5_1

base-1.4.5_1:

/usr/local/share/doc/base/CHANGELOG
/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目录

# mv /usr/local/www/base/ /usr/local/www/apache24/data/
# chown -R www:www /usr/local/www/apache24/data/base/
#vi /usr/local/etc/apache24/httpd.conf

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_php_19

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_mysql_20

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_数据库_21

在423后面加上两行。

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

保存退出。下面开始重启Web服务器

#service apache24 restart

设置BASE

打开浏览器输入网址​ ​http://192.168.183.136/base/​

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_数据库_22
FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_snort_23

ADODB路径/usr/local/share/adodb/

FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_snort_24
FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_BASE_25
FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_数据库_26
FreeBSD环境中源码部署Snort+Barnyard2+MySQL+BASE_数据库_27

     到此,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登录并进行投票)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK