设为首页收藏本站

安而遇随-随遇而安

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2567|回复: 0

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

[复制链接]

 成长值: 48520

发表于 2014-7-4 14:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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 来进行安装。

  1. 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 提供辅助功能,用软件包管理器下载安装这个软件包。
  1. # apt-get install snort-mysql
复制代码
安装好之后查看帮助文档:
  1. # less/usr/share/doc/snort-mysql/README-database.Debian
复制代码
内容大家可以自己去看,英文很简单。讲的是如下的配置过程。这里需要提示一下,在BT5中预装了Mysql,root密码是toor。根据README文档中的指示,在 MySQL 中建立Snort 的数据库用户和数据库。所使用的命令如下:
  1. $ mysql –u root –ptoor
  2. mysql> CREATE DATABASE snort;
  3. mysql> grant CREATE, INSERT, SELECT, UPDATEon snort.* to snort@localhost;
  4. mysql> grant CREATE, INSERT, SELECT, UPDATEon snort.* to snort;
  5. mysql> SET PASSWORD FORsnort@localhost=PASSWORD('snort-db');
  6. mysql> exit
复制代码
以上命令的功能是在 MySQL 数据库中建立一个snort 数据库,并建立一个 snort 用户来管理这个数据库,设置 snort 用户的口令为 snort-db。
0X02 建立 snort 数据库的结构
根据 README-database.Debian 中的指示我们可以建立 snort 数据库的结构。
  1. # cd /usr/share/doc/snort-mysql
  2. # zcat create_mysql.gz | mysql -u snort -Dsnort -p
复制代码
这里会提示输入密码:snort-db这样就为 snort 在 MySQL 中建立了数据库的结构,其中包括各个 snort 需要使用的表。启动mysql  /etc/init.d/mysqlstart 。用snort用户登录进去看看吧:
  1. #mysql –u snort –ptoor
  2. mysql> show databases;
  3. +--------------------+
  4. | Database           |
  5. +--------------------+
  6. | information_schema |
  7. | snort              |
  8. +--------------------+
  9. 2 rows in set (0.00 sec)
  10. mysql> use snort;
  11. Database changed
  12. mysql> show tables;
  13. +------------------+
  14. | Tables_in_snort  |
  15. +------------------+
  16. | data             |
  17. | detail           |
  18. | encoding         |
  19. | event            |
  20. | icmphdr          |
  21. | iphdr            |
  22. | opt              |
  23. | reference        |
  24. | reference_system |
  25. | schema           |
  26. | sensor           |
  27. | sig_class        |
  28. | sig_reference    |
  29. | signature        |
  30. | tcphdr           |
  31. | udphdr           |
  32. +------------------+
  33. 16 rows in set (0.00 sec)
复制代码
bingo,有了。0X03 设置snort把log文件输出到 MySQL 数据库中修改 Snort 的配置文件:/etc/snort/snort.conf
  1. # vim /etc/snort/snort.conf
复制代码
在配置文件中将 HOME_NET 有关项注释掉,然后将 HOME_NET 设置为本机 IP 所在网络,将 EXTERNAL_NET 相关项注释掉,设置其为非本机网络,如下所示:
  1. #var HOME_NET any
  2. var HOME_NET 10.10.10.0/24                     
  3. #var EXTERNAL_NET any
  4. var EXTERNAL_NET !$HOME_NET
复制代码
将output database相关项注释掉,将日志输出设置到 MySQL 数据库中,如下所示:
  1. 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由于防火墙联动。所以我们需要将输出类型改为以下方式:
  1. output alert_fast: alert
复制代码
1.jpg
Alert fast输出方式:Snort将报警信息快速的打印在指定文件的一行里。它是一种快速的报警方法,因为不需要打印数据包头的所有信息。这时候可以测试一下 Snort 工作是否正常:
  1. # snort -c /etc/snort/snort.conf -i eth2(填上自己的网卡号)
复制代码
如果出现一个用 ASCII 字符画出的小猪,那么Snort 工作就正常了,可以使用 Ctrl-C 退出;如果Snort 异常退出,就需要查明以上配置的正确性了。0X05指定某个IP通过入侵检测启动snort时,在末尾添加如下内容就可以取消对某个IP的入侵检测:
  1. snort -c /etc/snort/snort.conf -i eth2 not (host 192.168.219.151 or host 10.10.10.131 )
复制代码
如果需要放过的的IP较多,可将这些内容写在一个bpf文件中。启动时用-F引入这个文件即可。
2.jpg
  1. snort -c /etc/snort/snort.conf -i eth2  -F filters.bpf
复制代码
0X06 测试Web服务器Apache和PHP是否工作正常配置 apache 的 php 模块,添加 msql 和 gd 的扩展。
  1. # vim /etc/php5/apache2/php.ini
  2. extension=msql.so
  3. extension=gd.so
复制代码
重新启动apache
  1. # /etc/init.d/apache2 restart
复制代码
在/var/www/目录下新建一个文本文件test.php
  1. # vim /var/www/test.php
复制代码
输入内容:
  1. <?php
  2. phpinfo();
  3. ?>
复制代码
如果上面的方式不对还可以采用如下的方式尝试:启动和停止文件是:/etc/init.d/apache2启动: apache2ctl -k start停止: apache2ctl -k stop启动apache2后,在浏览器中输入 http://localhost/test.php,如果配置正确的话,就会出现 PHP INFO 的经典界面,就标志着 LAMP 工作正常。这个页面里有很多有用的信息,比如php.ini的位置信息。 3.jpg
0X07 安装和配置acidbaseacidbase是snort管理方面最好用的图形管理界面之一。安装 acidbase 很简单,使用Ubuntu 软件包管理器下载安装即可:
  1. # apt-get install acidbase
复制代码
安装过程中需要输入 acidbase 选择使用的数据库,这里选 MySQL,根用户口令toor,和acid-base 的口令。在这部分引导界面做得说明白,根据提示输入就好。将acidbase从安装目录中拷贝到www目录中,也可以直接在apache中建立一个虚拟目录指向安装目录,这里拷贝过来主要是为了安全性考虑。
  1. 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文件夹写权限,但记得配置完成后将权限修改回来。
  1. # rm base_conf.php
复制代码
暂时将/usr/share/acidbase/ 目录权限改为其他人可写,主要是为了配置 acidbase 所用。
  1. #chmod 757 acidbase/
复制代码
Acidbase复制完后,打开localhost/acidbase,出现下面的页面。
4.jpg
点击countinue。现在就可以开始配置 acidbase 了,在浏览器地址栏中输入 http://localhost/acidbase,就会转入安装界面,然后就点击 continue 一步步地按提示进行安装:
  1. (1)选择语言为 simple_chinese,adodb的路径为:/usr/share/php/adodb;
  2. (2)选择数据库为 MySQL,数据库名为 snort,数据库主机为 localhost,数据库用户名为 snort 的口令为 snort-db;
  3. (3)接着直接点submit query。
  4. (4)设置 acidbase 系统管理员用户名和口令,设置系统管理员用户名为 admin,口令为 test。然后一路继续下去,就能安装完成了。
  5. (5)配置完成后就可以进入登录界面,输入用户名和口令,进入 acidbase 系统。
复制代码
点击creat BASE AG第一次成功时,有如下图示哦! 5.jpg
接着点击step5你就发现了这个,表示配置成功。 6.jpg
这里需要将 acidbase 目录的权限改回去以确保安全性,然后启动 snort,就表明 snort 入侵检测系统的安装完成并正常启动了
  1. # chmod 755 acidbase/
  2. # snort -c /etc/snort/snort.conf -i eth2
复制代码
修改后重启apache2ctl restart就可以了。现在是不是完工了呢?别急,还有如下问题:0X08 配置acidbase发送报警邮件功能首先,下载sendmail :
  1. 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中就看到了下面我找寻的问题。改成如下形式、设置邮件参数值介绍
  1. $action_email_smtp_host = 'smtp.163.com';
  2. $action_email_smtp_localhost = 'localhost';
  3. $action_email_smtp_auth = 1;
  4. $action_email_smtp_user = '在这里输入邮箱地址比如[email protected]';
  5. $action_email_smtp_pw = '在这里输入邮箱密码';
  6. $action_email_from = '这里输入smtp_user中的邮箱地址';
  7. $action_email_subject = 'BASE Incident Report这里是邮件名称';
  8. $action_email_msg = '';
  9. $action_email_mode = 0;
复制代码
配置好后要重启apache2服务器。配置好之后,在BASE中选中任何一个或多个报警信息,点击页面下方的选项栏,将收信箱填在后面的空白栏中,选择发送警报邮件。很快就会收到报警邮件。至此,工作告一段落,但还差与放火墙的联动。下面,配置guardian实现snort与iptables的联动,前提是本机已经安装了iptables。0X09 下载guardianGuardian需要去官网下载http://www.chaotic.org/guardian/下载好之后
  1. #tar zxvfguardian-1.7.tar.gz
复制代码
在解压后的文件夹下,做下面的脚本拷贝操作:
  1. #cp guardian.pl /usr/local/bin     
  2. #cp scripts/iptalbes_block.sh/usr/local/bin/guardian_block.sh
  3. #cp scripts/iptalbes_unblock.sh
  4. /usr/local/bin/guardian_unblock.sh

  5. #touch/etc/snort/guardian.ignore  创建白名单
  6. #touch/etc/snort/guardian.target  创建黑名单
  7. #touch/var/log/snort/guardian.log guardian的日志
复制代码
必要说明:
  1. (1)Guardian的执行文件  guardian.pl
  2. (2)Guardian封锁IP所要调用的外部程序  scripts/iptalbes_block.sh
  3. (3)Guardian解除对某一IP封锁时,所需要调用的外部程序scripts/iptalbes_unblock.sh
复制代码
配置Guardian.confGuardian的配置文件如下:
  1. Interface       eth0
  2. HostGatewayByte  1
  3. LogFile         /var/log/guardian.log
  4. AlertFile       /var/log/snort/alert              
  5. IgnoreFile      /etc/guardian.ignore
  6. TargetFile      /etc/guardian.target
  7. TimeLimit    86400
复制代码
TimeLimit:在多少秒后解除对IP的封锁,86400秒也就是24小时之后解除对IP的封锁。AlertFile是关键,前提是snort以alert_fast输出报警信息配置完成后,启动guardian:
  1. /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防火墙状态信息:
  1. root@bt:/etc/snort# iptables -L -n
  2. Chain INPUT (policy ACCEPT)
  3. target     prot opt source               destination         
  4. Chain FORWARD (policy ACCEPT)
  5. target     prot opt source               destination         
  6. Chain OUTPUT (policy ACCEPT)
  7. target     prot opt source               destination         
  8. You have new mail in /var/mail/root
复制代码
在主机A用WVS对主机B网站扫描:再次查看主机B的防火墙信息,防火墙已经将A主机IP加入到防火墙之中。
  1. root@bt:~# iptables -L -n
  2. Chain INPUT (policy ACCEPT)
  3. target     prot opt source               destination         
  4. DROP       all  --  10.10.10.151         0.0.0.0/0           
  5. Chain FORWARD (policy ACCEPT)
  6. target     prot opt source               destination         
  7. Chain OUTPUT (policy ACCEPT)
  8. target     prot opt source               destination
复制代码
BASE产生的报警信息:
14042133664667.jpg
此时主机A上的WVS已经动态不得了。看看WVS的错误日志:
  1. 07.01 19:18.37, [Error] Server "http://10.10.10.135:80/" is not responsive.
  2. 07.01 19:18.37, [Error] Cannot connect.
  3. 07.01 19:18.37, [Error] Cannot connect. [00020004]
  4. Error while connecting to web server
复制代码
经验:开源软件的readme是必须要读得,这就相当于产品使用说明书,最好是能耐下心来看英文。  主要参考书籍:《Snort轻量级入侵检测系统全攻略》下面是大牛翻译的snort配置说明,可以参考一下。http://blog.csdn.net/jo_say/article/details/6302367



随遇而安
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表