搭建开源入侵检测系统Snort,并实现与防火墙联动

  • A+
所属分类:系统文档

之前做入侵检测与防火墙联动时,发现这方面资料较少,研究成功后拿出来和大家分享一下。

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

搭建开源入侵检测系统Snort,并实现与防火墙联动

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,并实现与防火墙联动

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的位置信息。

搭建开源入侵检测系统Snort,并实现与防火墙联动

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,出现下面的页面。

搭建开源入侵检测系统Snort,并实现与防火墙联动

点击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

第一次成功时,有如下图示哦!

搭建开源入侵检测系统Snort,并实现与防火墙联动

接着点击step5你就发现了这个,表示配置成功。

搭建开源入侵检测系统Snort,并实现与防火墙联动

这里需要将 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 = [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 下载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 -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产生的报警信息:

搭建开源入侵检测系统Snort,并实现与防火墙联动

此时主机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

我的微博:http://weibo.com/u/2724542745

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: