马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
搭建开源入侵检测系统Snort,并实现与防火墙联动
之前做入侵检测与防火墙联动时,发现这方面资料较少,研究成功后拿出来和大家分享一下。
教程是2.9.3以前的版本,2.9.3以后的版本就改了写mysql的方式,2.9.3以后的版本需要使用barnyard2来将数据写入mysql然后在做base展示
Snort作为一款优秀的开源主机入侵检测系统,在windows和Linux平台上均可安装运行。BT5作为曾经的一款经典的渗透神器,基于Ubuntu,里面已经预装很多的应用,比如Mysql、Apache、Snort等等。Guardian是snort的插件,通过读取snort报警日志将入侵IP加入到Iptables中。Iptables 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。 本文详细介绍了BT5中安装snrot NIDS并实现与iptables防火墙联动的过程。 安装Snort过程 0X00 安装LAMP,Snort和一些相关软件 这里使用 Ubuntu 默认命令行软件包管理器apt 来进行安装。 - apt-get install libpcap0.8-devlibmysqlclient15-dev mysql-client-5.1 mysql-server-5.1 bison flex apache2libapache2-mod-php5 php5-gd php5-mysql libphp-adodb php-pear pcregrep snortsnort-rules-default iptables
复制代码在这里可能会会报错,错误内容是说Mysql的版本太低,直接按照提示更改mysql的版本号就可以了。 0X01 在 MySQL 数据库中为 Snort 建立数据库Ubuntu 软件仓库中有一个默认的软件包 snort-mysql 提供辅助功能,用软件包管理器下载安装这个软件包。 - # apt-get install snort-mysql
复制代码 安装好之后查看帮助文档:
- # less/usr/share/doc/snort-mysql/README-database.Debian
复制代码内容大家可以自己去看,英文很简单。讲的是如下的配置过程。这里需要提示一下,在BT5中预装了Mysql,root密码是toor。根据README文档中的指示,在 MySQL 中建立Snort 的数据库用户和数据库。所使用的命令如下: - $ mysql –u root –ptoor
- mysql> CREATE DATABASE snort;
- mysql> grant CREATE, INSERT, SELECT, UPDATEon snort.* to snort@localhost;
- mysql> grant CREATE, INSERT, SELECT, UPDATEon snort.* to snort;
- mysql> SET PASSWORD FORsnort@localhost=PASSWORD('snort-db');
- mysql> exit
复制代码 以上命令的功能是在 MySQL 数据库中建立一个snort 数据库,并建立一个 snort 用户来管理这个数据库,设置 snort 用户的口令为 snort-db。
0X02 建立 snort 数据库的结构根据 README-database.Debian 中的指示我们可以建立 snort 数据库的结构。 - # cd /usr/share/doc/snort-mysql
- # zcat create_mysql.gz | mysql -u snort -Dsnort -p
复制代码这里会提示输入密码:snort-db这样就为 snort 在 MySQL 中建立了数据库的结构,其中包括各个 snort 需要使用的表。启动mysql /etc/init.d/mysqlstart 。用snort用户登录进去看看吧: - #mysql –u snort –ptoor
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | snort |
- +--------------------+
- 2 rows in set (0.00 sec)
- mysql> use snort;
- Database changed
- mysql> show tables;
- +------------------+
- | Tables_in_snort |
- +------------------+
- | data |
- | detail |
- | encoding |
- | event |
- | icmphdr |
- | iphdr |
- | opt |
- | reference |
- | reference_system |
- | schema |
- | sensor |
- | sig_class |
- | sig_reference |
- | signature |
- | tcphdr |
- | udphdr |
- +------------------+
- 16 rows in set (0.00 sec)
复制代码bingo,有了。 0X03 设置snort把log文件输出到 MySQL 数据库中修改 Snort 的配置文件:/etc/snort/snort.conf - # vim /etc/snort/snort.conf
复制代码在配置文件中将 HOME_NET 有关项注释掉,然后将 HOME_NET 设置为本机 IP 所在网络,将 EXTERNAL_NET 相关项注释掉,设置其为非本机网络,如下所示:
- #var HOME_NET any
- var HOME_NET 10.10.10.0/24
- #var EXTERNAL_NET any
- var EXTERNAL_NET !$HOME_NET
复制代码将output database相关项注释掉,将日志输出设置到 MySQL 数据库中,如下所示:
- output database: log, mysql, user=snortpassword=snort-db dbname=snort host=localhost
复制代码这样,snort 就会将记录存放在 MySQL 的snort数据库中。 0X04 设置snort把log文件以ASCII码方式输出到日志文件中注意,这一步是Snort与防火墙联动的关键。Snort配置文件原本输出的报警日志的形式是output log_tcpdump: tcpdump.log 这种输出方式输出的数据并不是以ASCII形式输出,不能用于Guardian由于防火墙联动。所以我们需要将输出类型改为以下方式:
Alert fast输出方式:Snort将报警信息快速的打印在指定文件的一行里。它是一种快速的报警方法,因为不需要打印数据包头的所有信息。这时候可以测试一下 Snort 工作是否正常: - # snort -c /etc/snort/snort.conf -i eth2(填上自己的网卡号)
复制代码如果出现一个用 ASCII 字符画出的小猪,那么Snort 工作就正常了,可以使用 Ctrl-C 退出;如果Snort 异常退出,就需要查明以上配置的正确性了。 0X05指定某个IP通过入侵检测启动snort时,在末尾添加如下内容就可以取消对某个IP的入侵检测: - snort -c /etc/snort/snort.conf -i eth2 not (host 192.168.219.151 or host 10.10.10.131 )
复制代码如果需要放过的的IP较多,可将这些内容写在一个bpf文件中。启动时用-F引入这个文件即可。
- snort -c /etc/snort/snort.conf -i eth2 -F filters.bpf
复制代码 0X06 测试Web服务器Apache和PHP是否工作正常配置 apache 的 php 模块,添加 msql 和 gd 的扩展。 - # vim /etc/php5/apache2/php.ini
- extension=msql.so
- extension=gd.so
复制代码重新启动apache
- # /etc/init.d/apache2 restart
复制代码在/var/www/目录下新建一个文本文件test.php
输入内容:
如果上面的方式不对还可以采用如下的方式尝试:启动和停止文件是:/etc/init.d/apache2启动: apache2ctl -k start停止: apache2ctl -k stop启动apache2后,在浏览器中输入 http://localhost/test.php,如果配置正确的话,就会出现 PHP INFO 的经典界面,就标志着 LAMP 工作正常。这个页面里有很多有用的信息,比如php.ini的位置信息。
0X07 安装和配置acidbaseacidbase是snort管理方面最好用的图形管理界面之一。安装 acidbase 很简单,使用Ubuntu 软件包管理器下载安装即可: - # apt-get install acidbase
复制代码安装过程中需要输入 acidbase 选择使用的数据库,这里选 MySQL,根用户口令toor,和acid-base 的口令。在这部分引导界面做得说明白,根据提示输入就好。将acidbase从安装目录中拷贝到www目录中,也可以直接在apache中建立一个虚拟目录指向安装目录,这里拷贝过来主要是为了安全性考虑。 - cp –R /usr/share/acidbase/ /var/www/
复制代码离成功又近了一步。/usr/share/acidbase目录下的base_conf.php 原本是一个符号链接指向 /etc/acidbase/ 下的base_conf.php,为了保证权限可控制,我们要删除/usr/share/acidbase/base_conf.php。在web页面配置完成后acidbase会在这个文件夹下自动创建一个base_conf.php 文件。为此我们要给acidbase文件夹写权限,但记得配置完成后将权限修改回来。 暂时将/usr/share/acidbase/ 目录权限改为其他人可写,主要是为了配置 acidbase 所用。
Acidbase复制完后,打开localhost/acidbase,出现下面的页面。
点击countinue。现在就可以开始配置 acidbase 了,在浏览器地址栏中输入 http://localhost/acidbase,就会转入安装界面,然后就点击 continue 一步步地按提示进行安装: - (1)选择语言为 simple_chinese,adodb的路径为:/usr/share/php/adodb;
- (2)选择数据库为 MySQL,数据库名为 snort,数据库主机为 localhost,数据库用户名为 snort 的口令为 snort-db;
- (3)接着直接点submit query。
- (4)设置 acidbase 系统管理员用户名和口令,设置系统管理员用户名为 admin,口令为 test。然后一路继续下去,就能安装完成了。
- (5)配置完成后就可以进入登录界面,输入用户名和口令,进入 acidbase 系统。
复制代码点击creat BASE AG第一次成功时,有如下图示哦!
接着点击step5你就发现了这个,表示配置成功。
这里需要将 acidbase 目录的权限改回去以确保安全性,然后启动 snort,就表明 snort 入侵检测系统的安装完成并正常启动了 - # chmod 755 acidbase/
- # snort -c /etc/snort/snort.conf -i eth2
复制代码修改后重启apache2ctl restart就可以了。现在是不是完工了呢?别急,还有如下问题: 0X08 配置acidbase发送报警邮件功能首先,下载sendmail : 接着对php.ini文件做些修改,将 sendmail_path = /usr/sbin/sendmail以及sendmail_from = [email protected]具体修改信息请查看下面的网站,这里有很多有用的信息。 http://www.quackit.com/php/tutorial/php_mail_configuration.cfm接着进入/usr/share/acidbase/ 中的base_conf.php中就看到了下面我找寻的问题。改成如下形式、设置邮件参数值介绍 - $action_email_smtp_host = 'smtp.163.com';
- $action_email_smtp_localhost = 'localhost';
- $action_email_smtp_auth = 1;
- $action_email_smtp_user = '在这里输入邮箱地址比如[email protected]';
- $action_email_smtp_pw = '在这里输入邮箱密码';
- $action_email_from = '这里输入smtp_user中的邮箱地址';
- $action_email_subject = 'BASE Incident Report这里是邮件名称';
- $action_email_msg = '';
- $action_email_mode = 0;
复制代码配置好后要重启apache2服务器。配置好之后,在BASE中选中任何一个或多个报警信息,点击页面下方的选项栏,将收信箱填在后面的空白栏中,选择发送警报邮件。很快就会收到报警邮件。至此,工作告一段落,但还差与放火墙的联动。下面,配置guardian实现snort与iptables的联动,前提是本机已经安装了iptables。 0X09 下载guardianGuardian需要去官网下载 http://www.chaotic.org/guardian/下载好之后 - #tar zxvfguardian-1.7.tar.gz
复制代码在解压后的文件夹下,做下面的脚本拷贝操作:
- #cp guardian.pl /usr/local/bin
- #cp scripts/iptalbes_block.sh/usr/local/bin/guardian_block.sh
- #cp scripts/iptalbes_unblock.sh
- /usr/local/bin/guardian_unblock.sh
-
- #touch/etc/snort/guardian.ignore 创建白名单
- #touch/etc/snort/guardian.target 创建黑名单
- #touch/var/log/snort/guardian.log guardian的日志
复制代码 必要说明:
- (1)Guardian的执行文件 guardian.pl
- (2)Guardian封锁IP所要调用的外部程序 scripts/iptalbes_block.sh
- (3)Guardian解除对某一IP封锁时,所需要调用的外部程序scripts/iptalbes_unblock.sh
复制代码配置Guardian.confGuardian的配置文件如下: - Interface eth0
- HostGatewayByte 1
- LogFile /var/log/guardian.log
- AlertFile /var/log/snort/alert
- IgnoreFile /etc/guardian.ignore
- TargetFile /etc/guardian.target
- TimeLimit 86400
复制代码TimeLimit:在多少秒后解除对IP的封锁,86400秒也就是24小时之后解除对IP的封锁。AlertFile是关键,前提是snort以alert_fast输出报警信息配置完成后,启动guardian: - /usr/bin/perl /usr/local/bin/guardian.pl -c/etc/guardian.conf
复制代码 0X10 验证IDS与Iptables联动结果有主机A和BA主机IP:10.10.10.135B主机IP:10.10.10.151查看主机B防火墙状态信息: - root@bt:/etc/snort# iptables -L -n
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
- You have new mail in /var/mail/root
复制代码在主机A用WVS对主机B网站扫描:再次查看主机B的防火墙信息,防火墙已经将A主机IP加入到防火墙之中。 - root@bt:~# iptables -L -n
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- DROP all -- 10.10.10.151 0.0.0.0/0
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
复制代码BASE产生的报警信息:
此时主机A上的WVS已经动态不得了。看看WVS的错误日志: - 07.01 19:18.37, [Error] Server "http://10.10.10.135:80/" is not responsive.
- 07.01 19:18.37, [Error] Cannot connect.
- 07.01 19:18.37, [Error] Cannot connect. [00020004]
- Error while connecting to web server
复制代码 经验:开源软件的readme是必须要读得,这就相当于产品使用说明书,最好是能耐下心来看英文。 主要参考书籍:《Snort轻量级入侵检测系统全攻略》下面是大牛翻译的snort配置说明,可以参考一下。 http://blog.csdn.net/jo_say/article/details/6302367
|