之前做入侵检测与防火墙联动时,发现这方面资料较少,研究成功后拿出来和大家分享一下。
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由于防火墙联动。所以我们需要将输出类型改为以下方式:
output alert_fast: alert

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
# vim /var/www/test.php
输入内容:
<?php
phpinfo();?>
如果上面的方式不对还可以采用如下的方式尝试:
启动和停止文件是:/etc/init.d/apache2
启动: apache2ctl -k start
停止: apache2ctl -k stop
启动apache2后,在浏览器中输入 http://localhost/test.php,如果配置正确的话,就会出现 PHP INFO 的经典界面,就标志着 LAMP 工作正常。这个页面里有很多有用的信息,比如php.ini的位置信息。

0X07 安装和配置acidbase
acidbase是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文件夹写权限,但记得配置完成后将权限修改回来。
# rm base_conf.php
暂时将/usr/share/acidbase/ 目录权限改为其他人可写,主要是为了配置 acidbase 所用。
#chmod 757 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 :
apt-get install sendmail
接着对php.ini文件做些修改,
将 sendmail_path = /usr/sbin/sendmail以及sendmail_from = you@earthlink.net
具体修改信息请查看下面的网站,这里有很多有用的信息。
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 = '在这里输入邮箱地址比如XX@163.com';
$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 下载guardian
Guardian需要去官网下载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.conf
Guardian的配置文件如下:
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和B
A主机IP:10.10.10.135
B主机IP:10.10.10.151
查看主机B防火墙状态信息:
root@bt:/etc/snort# iptables&nb
.........................................................