搭建开源入侵检测系统Snort并实现与防火墙联动
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 -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
搭建开源入侵检测系统Snort并实现与防火墙联动的更多相关文章
- 开源入侵检测系统OSSEC搭建之二:客户端安装
上一篇文章中已经将OSSEC服务端的安装以及客户端的Key导出操作做了解说,接下来在另一台虚拟机中安装客户端,与安装服务端类似同样需要安装ossec,步骤如下. 一.下载ossec-hids-2.8. ...
- 开源入侵检测系统OSSEC搭建之一:服务端安装
OSSEC是一款开源的多平台的入侵检测系统,可以运行于Windows, Linux, OpenBSD/FreeBSD, 以及 MacOS等操作系统中.主要功能有日志分析.完整性检查.rootkit检测 ...
- 开源入侵检测系统SELKS系统搭建
一.系统环境配置 系统环境:centos7x64 ip地址:172.16.91.130 1.设置静态IP地址 [root@localhost backlion]#vi /etc/sys ...
- 开源入侵检测系统OSSEC搭建之三:Web界面安装
注意:以下操作需在OSSEC服务端进行设置 一.下载analogi,存放于/var/www/html/下并赋予权限 [root@localhost ~]# wget https://github.co ...
- linux入侵检测系统snort安装配置
队长让俺瞅瞅snort,没想到安装配置都遇到问题...整理下过程,给跟我一样的家伙看看.. 由于本人机器是ubuntu,apt-get 几下就可以了,其实网上有不少这样的文章...之所以还要写就是.. ...
- Snort 入侵检测系统
Snort 入侵检测系统 一.实验目的 1.掌握snort IDS工作原理 2.应用snort 三种方式工作 二.实验环境 系统环境:Windows环境, kali环境 三.实验原理 1.snort ...
- 构建基于Suricata+Splunk的IDS入侵检测系统
一.什么是IDS和IPS? IDS(Intrusion Detection Systems):入侵检测系统,是一种网络安全设备或应用软件,可以依照一定的安全策略,对网络.系统的运行状况进行监视,尽可能 ...
- 哈工大 信息安全 实验 Snort与单台防火墙联动实验
XX大学XX学院 <网络攻击与防御> 实验报告 实验报告撰写要求 实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性. ...
- Linux 上搭建 Snort+BASE 入侵检测系统
配置实验环境 由于本人电脑的存储空间不足,无法再承担安装一个虚拟机的开销,因此在阿里云上申请了一个云服务器进行本次实验.服务器配置如下: 1 核 - 2GB 内存 - 40GB 系统盘 操作系统:Ub ...
随机推荐
- HDU 2829 Lawrence(斜率优化DP O(n^2))
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2829 题目大意:有一段铁路有n个站,每个站可以往其他站运送粮草,现在要炸掉m条路使得粮草补给最小,粮草 ...
- 常用SQL时间格式SQLServer中文版的默认的日期字段datetime格式是yyyy-mm-d
常用SQL时间格式 SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm 例如: select getdate() -- ::08.177 ...
- Restful Framework (二)
目录 一.认证 二.权限 三.限制访问频率 四.总结 一.认证(补充的一个点) 回到顶部 认证请求头 #!/usr/bin/env python # -*- coding:utf-8 -*- from ...
- 深度学习方法(六):神经网络weight参数怎么初始化
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 神经网络,或者深度学习算法的参数初始 ...
- Merge Intervals——STL的应用
Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8, ...
- Python中的PIL
转自:http://blog.csdn.net/yockie/article/details/8498301 介绍 把Python的基础知识学习后,尝试一下如何安装.加载.使用非标准库,选择了图像处理 ...
- python字符编码与解码 unicode,str
解释以下几个问题: (1)python2中str和unicode是两种字符串类型,与字符编码方式是什么关系? (2)str和unicode是怎么相互转换的? (3)'\x...':'\u...', ' ...
- redis三种连接方式
安装 tar zxvf redis-2.8.9.tar.gz cd redis-2.8.9 #直接make 编译 make #可使用root用户执行`make install`,将可执行文件拷贝到/u ...
- 探索"+"的原本
躺了一会,回忆以前看过的一些描述"原本"的知识,突然想到简单的数学运算1+1=2,在程序设计里的原本是什么呢,想到这里,不睡了,按照前人的指引,我也来探索一下阿 (以下代码使用C# ...
- 17-7-26-react-router入门
完蛋了,上司最近都和颜悦色的,搞得我跑路的决心大大减退,不过还是要跑路.毕竟面向工资编程.今天一天基本都在挑项目的CSS,由于是别人哪里直接copy的,然后css我也直接copy的codepen上的源 ...