[转载]Snort构建小型的IDS文章集锦
信息来源:安全矩阵[b]RedHat linux 9系统下构建小型入侵检测系统[/b]
一、系统平台
Redhat9.0发行版, 安装gcc 及相关库文件,建议不要安装
Apache,PHP,MySQL,我们将用源码编译安装。基于安全方面的
考虑,可以设置一下iptables只允许SSH和WWW访问。
二、软件
MySQL4.0.12 [url]http://mysql.secsup.org[/url]
Snort2.0.0 [url]http://www.snort.org[/url]
Apache2.0.45 [url]http://www.apache.org[/url]
PHP4.3.1 [url]http://www.php.net[/url]
ADODBv3.30 [url]http://phplens.com[/url]
Acid0.9.6b23 [url]http://acidlab.sourceforge.net[/url]
Zlib1.1.4 [url]http://flow.dl.sourceforge.net[/url]
JPGraph1.11 [url]http://jpgraph.techuk.com[/url]
LibPcap0.7.2 [url]http://www.tcpdump.org[/url]
建议到这个站点下载[url]http://ftp.cdut.edu.cn/pub/linux/NEW/[/url]
也可以到[url]http://www.rpmfind.com[/url]下载相关的xx.src.rpm编译安装。如若安装了rpm包,可以强行将其反安装
rpm -e -nodeps xx.xx
三、安装(建议将所有的包文件考到同一目录)
1.安装zlib1.1.4
tar -xzvf zlib-xx.tar.gz
cd zlib-xx
/configure;make test
make install
cd ..
2.安装LibPcap0.7.2
tar -xzvf libpcap.tar.gz
cd libpcap-xx
/configure
make
make install
cd ..
3.安装MySQL4.0.12
3.1创建mysql组和mysql用户
groupadd mysql
useradd -g mysql mysql
修改/root下的.bash_profile的这一行:
PATH=?$PATH:?$HOME/bin 为
PATH=?$PATH:?$HOME/bin:/usr/local/mysql/bin
3.2安装mysql
tar -xzvf mysql-xx.tar.gz
cd mysql-xx
/configure --prefix=/usr/local/mysql
make
make install
cd scripts
/mysql_install_db
chown -R root /usr/local/mysql
chown -R mysql /usr/local/mysql/var
chgrp -R mysql /usr/local/mysql
cd ./support-files/my-medium.cnf /etc/my.cnf
向/etc/ld.so.conf中加入两行:/usr/local/mysql/lib/mysql
/usr/local/lib
载入库,执行
ldconfig -v
3.3测试mysql是否工作:
cd /usr/local/mysql/bin/
/mysqld_safe --user=mysql&
#ps -ef |grep mysql
看mysql_safe是否工作
3.4设置mysql为自启动:
将mysql安装目录下的support-files目录中的
mysql.server文件拷到/etc/init.d目录
cp mysql.server /etc/init.d/mysql
chmod 755 /etc/init.d/mysql
创建硬链接:
cd /etc/rc3.d(文本方式启动)
ln -s /etc/init.d/mysql S85mysql
ln -s /etc/init.d/mysql K85mysql
cd /etc/rc5.d (图形方式启动)
ln -s /etc/init.d/mysql S85mysql
ln -s /etc/init.d/mysql K85mysql
4.安装Apache2.0.45和PHP4.3.1
tar -zxvf httpd-2.0.xx.tar.gz
cd httpd_2.xx.xx
/configure --prefix=/www --enable-so
注:apache根目录为 /www
make
make install
cd ..
tar -zxvf php-4.3.x.tar.gz
cd php-4.3.x
/configure --prefix=/www/php --with-apxs2=/www/bin/apxs --with-config- filepath=/www/php --enable-sockets --with-mysql=/usr/local/mysql --with-zlibdir=/
usr/local --with- gd
注意:这些为一行,中间不要有回车。
cp php.ini-dist /www/php/php.ini
编辑httpd.conf(/www/conf):
加入两行
LoadModule php4_module modules/libphp4.so
AddType application/x-httpd-php .php
httpd.conf中相关内容如下:
#
# LoadModule foo_module modules/mod_foo.so
LoadModule php4_module modules/libphp4.so
# AddType allows you to tweak mime.types without actually editing it, or ?$
# make certain files to be certain types.
#
AddType application/x-tar .tgz
AddType image/x- icon .ico
AddType application/x-httpd-php .php
设置Apache为自启动:
cp /www/bin/apachectl /etc/init.d/httpd
cd /etc/rc3.d
ln -s /etc/init.d/httpd S85httpd
ln -s /etc/init.d/httpd K85httpd
cd /etc/rc5.d
ln -s /etc/init.d/httpd S85httpd
ln -s /etc/init.d/httpd K85httpd
测试一下 PHP:
cd /etc/init.d
/httpd start
在/www/htdocs下建立文件 test.php
cd /www/htdocs
vi test.php
加入
lt;?php
hpinfo();
?>
用浏览器访问[url]http://IP_address/test.php[/url],成功的话,出现一些
系统,apache,php信息
5.安装 Snort2.0
5.1建立snort配置文件和日志目录
mkdir /etc/snort
mkdir /var/log/snort
tar -zxvf snort-2.x.x.tar.gz
cd snort-2.x.x
/configure --with-mysql=/usr/local/mysql
make
make install
5.2安装规则和配置文件
cd rules (在snort安装目录下)
cp * /etc/snort
cd ./etc
cp snort.conf /etc/snort
cp *.config /etc/snort
5.3修改snort.conf(/etc/snort/snort.conf)
var HOME_NET 10.2.2.0/24 (修改为你的内部网网络地址,我的是
192.168.0.0/24)
var RULE_PATH ./rules 修改为 var RULE_PATH /etc/snort/
改变记录日志数据库:
output database: log, mysql, user=root password=your_password
dbname=snort host=localhost
5.4设置snort为自启动:
在snort安装目录下
cd /contrib
cp S99snort /etc/init.d/snort
vi /etc/init.d/snort
修改snort如下:
CONFIG=/etc/snort/snort.conf
#SNORT_GID=nogroup (注释掉)
#8194;$SNORT_PATH/snort -c ?$CONFIG -i ?$IFACE ?$OPTIONS
(去掉原文件中的 -g ?$SNORT_GID )
chmod 755 /etc/init.d/snort
cd /etc/rc3.d
ln -s /etc/init.d/snort S99snort
ln -s /etc/init.d/snort K99snort
cd /etc/rc5.d
ln -s /etc/init.d/snort S99snort
ln -s /etc/init.d/snort K99snort
四.在mysql中建立数据库
/usr/local/mysql/bin/mysql
mysql>SET PASSWORD FOR root@localhost=PASSWORD('your_password');
mysql>create database snort;
mysql>grant INSERT,SELECT on root.* to snort@localhost;
mysql>quit;
进入snort安装目录:/usr/local/mysql/bin/mysql -p
gt;Enter password:
安装DB表:(在contrib目录)
zcat snortdb-extra.gz | /usr/local/mysql/bin/mysql -p snort
进入mysql数据库,看看snort数据库中的表:
/usr/local/mysql/bin/mysql -p
gt;Enter password:
mysql>show databases;
+------------+
| Database
+------------+
| mysql
| snort
| test
+------------+
3 rows in set (0.00 sec)
mysql>use snort;
mysql>show tables; 将会有这些:
+------------------+
| Tables_in_snort |
+------------------+
| data
| detail
| encoding
| event
| flags
| icmphdr
| iphdr
| opt
| protocols
| reference
| reference_system
| schema
| sensor
| services
| sig_class
| sig_reference
| signature
| tcphdr
| udphdr
+------------------+
19 rows in set (0.00 sec)
mysql>exit
五.安装配置Web接口
安装JPGraph1.11
cp jpgraph-1.11.tar.gz /www/htdocs
cd /www/htdocs
tar -xzvf jpgraph-1.xx.tar.gz
rm -rf jpgrap-1.xx.tar.gz
cd jpgraph-1.11
rm -rf README
rm -rf QPL.txt
安装ADODB:
cp adodb330.tgz /www/htdocs/
cd /www/htdocs
tar -xzvf adodb330.tgz
rm -rf adodb330.tgz
安装配置Acid:
cp acid-0.0.6b23.tar.gz /www/htdocs
cd /www/htdocs
tar -xvzf acid-0.9.6b23.tar.gz
rm -rf acid-0.9.6b23.tar.gz
cd /www/htodcs/acid/
编辑acid_conf.php,修改相关配置如下:
#8194;$DBlib_path = "/www/htdocs/adodb";
/* The type of underlying alert database
*
* MySQL : "mysql"
* PostgresSQL : "postgres"
* MS SQL Server : "mssql"
*/
#8194;$DBtype = "mysql";
/* Alert DB connection parameters
* - ?$alert_dbname : MySQL database name of Snort alert DB
* - ?$alert_host : host on which the DB is stored
* - ?$alert_port : port on which to access the DB
* - ?$alert_user : login to the database with this user
* - ?$alert_password : password of the DB user
*
* This information can be gleaned from the Snort database
* output plugin configuration.
*/
#8194;$alert_dbname = "snort";
#8194;$alert_host = "localhost";
#8194;$alert_port = "";
#8194;$alert_user = "root";
#8194;$alert_password = "Your_Password";
/* Archive DB connection parameters */
#8194;$archive_dbname = "snort";
#8194;$archive_host = "localhost";
#8194;$archive_port = "";
#8194;$archive_user = "root";
#8194;$archive_password = "Your_Password ";
And a little further down
#8194;$ChartLib_path = "/www/htdocs/jpgraph-1.11/src";
/* File format of charts ('png', 'jpeg', 'gif') */
#8194;$chart_file_format = "png";
进入web界面:
[url]http://yourhost/acid/acid_main.php[/url]
点"Setup Page"链接 ->Create Acid AG
访问[url]http://yourhost/acid[/url]将会看到ACID界面。
六.测试系统
重启系统或者直接启动相关后台程序:
/etc/init.d/mysql restart
/etc/init.d/snort start
/etc/init.d/httpd start
利用nmap,nessus,CIS或者X-scan对系统进行扫描,
产生告警纪录。
[url]http://yourhost/acid[/url] 察看纪录。
至此,一个功能强大的IDS配置完毕。各位可以利用web界面
远程登陆,监控主机所处局域网,同时安装phpMyAdmin对mysql
数据库进行操控。 实验环境rh8.0
一、snort介绍
Snort是被设计用来填补昂贵的、探测繁重的网络侵入情况的系统留下的空缺。Snort是一个免费的、跨平台的软件包,用作监视小型TCP/IP网的嗅探器、日志记录、侵入探测器。它可以运行在linux/UNIX和Win32系统上,你只需要几分钟就可以安装好并可以开始使用它。
Snort的一些功能:
- 实时通讯分析和信息包记录
- 包装有效载荷检查
- 协议分析和内容查询匹配
- 探测缓冲溢出、秘密端口扫描、CGI攻击、SMB探测、操作系统侵入尝试
- 对系统日志、指定文件、Unix socket或通过Samba的WinPopus 进行实时报警
Snort有三种主要模式:信息包嗅探器、信息包记录器或成熟的侵入探测系统。遵循开发/自由软件最重要的惯例,Snort支持各种形式的插件、扩充和定制,包括数据库或是XML记录、小帧探测和统计的异常探测等。
信息包有效载荷探测是Snort最有用的一个特点,这就意味着很多额外种类的敌对行为可以被探测到。
二、所需软件包的安装以及安装
下载所需要的软件包
1.libcap
[url]http://www.mirrors.wiretapped.net/security/packet-capture/libpcap/libpcap-0.8.3.tar.gz[/url]
2.snort
[url]http://www.snort.org/dl/snort-2.2.0.tar.gz[/url]
3.snort trules
[url]http://www.snort.org/dl/rules/snortrules-snapshot-2_2.tar.gz[/url]
4.openssl
[url]http://www.openssl.org/source/openssl-0.9.7d.tar.gz[/url]
5.acid基于Web的入侵事件数据库分析控制台
[url]http://acidlab.sourceforge.net[/url]
6.gd
[url]http://www.boutell.com/gd/[/url]
7.adodb为ACID提供便捷的数据库接口;
[url]http://php.weblogs.com/ADODB[/url]
8.phplot ACID所依赖的制图库;
[url]http://www.phplot.com/[/url]
9.apache
[url]http://www.apache.org[/url]
10.mysql
[url]http://wwww.mysql.com[/url]
11.php(v>4.2)
[url]http://www.php.net[/url]
开始安装:
1.安装MySQL,
#addgroup mysql
#adduser mysql
然后,以mysql身份登录,执行下列命令:
$gzip -d -c mysql-3.23.49.tar.gz tar xvf -
$cd mysql-3.23.49
$./configure
$make
$make install
2.安装openssl
#tar zxvf openssl*
#cd openssl
#./configure
#make
#make test
#make install
3.安装libpcap
#tar zxvf libpcap*
#cd libpcap-0.8.3
#./configure
如果出现:
configure: warning: cannot determine packet capture interface
configure: warning: (see INSTALL for more info)
说明需要编译系统内核,使其对CONFIG_PACKET支持
#make
#make install
4.安装snort
#tar zxvf snort*
#cd snort-2.2.0
#./configure --enable-flexresp --with-mysql=/usr/local/mysql --with-openssl=/usr/local/ssl
支持mysql,持openssl 还有更多的一些选项,可以参见tarball文档
如果出现:
ERROR! Libpcre header not found, go get it from
请[url]http://www.pcre.org[/url]下载lib库安装即可。
如果出现:
ERROR! Libnet header not found
请[url]http://www.packetfactory.net/projects/libnet/[/url]下载安装即可。
如果已经安装,可以用--with-libnet-* 选项
#make
#make install
5.安装apache
#./configure --prefix=/usr/local/apache --enable-so
#make
#make install
6.安装gd
首先安装为PHP提供既时生成PNG和JPG图象功能的GD库:
#gzip -d -c gd-2.0.28.tar.gz tar xvf -
#cd gd-2.0.28
#make
#make install
7.安装php
#gzip -d -c php-4.3.2.tar.gz tar xvf -
#cd php-4.3.2
#./configure -with-mysql=/usr/local/mysql \
--with-apxs=/usr/local/apache/bin/apxs \
--with-gd=/usr/local
#make
#make install
8.安装ACID
该部分的安装工作具体包括三个软件包:adodb452.tar.gz、phplot-5.0rc1.tar.gz和acid-0.9.6b23.tar.gz 。安装过程十分简单,只需分别将这三个软件包解压缩并展开在Apache服务器的文档根目录下即可,具体操作
如下所示:(本服务器的文档目录为/www/ids)
#cd /www/ids/
#gzip -d -c adodb452.tar.gz tar xvf -
#gzip -d -c phplot-5.0rc1.tar.gz tar xvf -
#gzip -d -c acid-0.9.6b23.tar.gz tar xvf -
然后开始配置工作,转到acid目录下编辑ACID的配置文件:acid_conf.php给下列变量赋值:
$Dblib_path="../adodb"
$DBtype="mysql"
$alert_dbname="snort"
$alert_host="localhost"
$alert_port="3306"
$alert_user="root"
$alert_password="123"
$archive_dbname="snort"
$archive_host="localhost"
$archive_port="3306"
$archive_user="root"
$archive_password="123"
$ChartLib_path="../phplot"
$Chart_file_format="png"
$portscan_file="/var/log/snort/portscan.log"
好,到此,所需软件安装完成,下面进入snort的设定与启动。
三、snort的设定与启动
我们可以把Snort运做在chroot的环境中,设定也是很简单,首先,可以选定一个有足够位置放置Snort的Log的地方,如果您会定期检查及清除Log文档,您可以把Snort的chroot环境放在/home/snort中,然后需要的是一个
snort使用者,执行以下的指令新增Snort这个用者:
# groupadd snort
# useradd -g "snort" -d "/home/snort" -s "/nonexists" -c "Snort User" snort
然后,把snortrules.tar.gz这个文件解压在/home/snort中,解压了snortrules包后,在/home/snort/內有rules文件出现,这就是Snort使用的Ruleset,这些Ruleset就是供Snort用作侦测任何网络反映的基础。在rules中有一个是"snort.conf",它是Snort的配置文件,需要按实际情况修改snort.conf。
在 snort.conf 中,需要修改几个地方便可以执行 Snort,以下是可能需要修改的地方:
- var HOME_NET
网络或是主机的 IP,例如只有这一台服务器,就可以只输入服务器的 IP 地址,如果机器有两个以上的 IP,
可以使用这个方法:
var HOME_NET [192.168.1.1,192.168.1.2]
或是
var HOME_NET 192.168.1.0/24
-var SMTP [IP.Address]
SMTP 服服器的位置,如果与 HOME_NET 中的不同,只需把 $HOME_NET 移除,并加其指定 SMTP 机器的IP便可以。
- var HTTP_SERVERS
HTTP 服服器,与 SMTP 中的设定相同,如成为 Web Server 的不是 HOME_NET 机器,可以指定给其他的 IP。
- var DNS_SERVERS
DNS 服务器的IP地址,同时需要 Uncomment 以下一行:
preprocessor portscan-ignorehosts: $DNS_SERVERS
这可以防止因为 DNS 的 Lookup 而记录无用的 PortScan 。
最后是有关记录部份的配置,刚才编译Snort时加入了"MySQL"的支持,为了使用 MySQL 记录,先要在 MySQL中
建立 Snort 使用的 Databases、用者名及密码,执行以下命令:
# echo "CREATE DATABASE snort;" mysql -u root -p
# grant INSERT,SELECT on snort.* to snort@localhost
然后在 Snort 的源始码內找到 "contrib/create_mysql",再执行以下命令建立 Tables
# mysql -u root -p < create_mysql
完成后,別忘记在 snort.conf 中也要启动 MySQL 的支持,简单地 Uncomment 以下:
在454行:
output database: log, mysql, user=snort password=123 dbname=snort host=localhost
在493行:
ruletype redalert
{
type alert
output alert_syslog: LOG_AUTH LOG_ALERT
output database: log, mysql, user=snort dbname=snort host=localhost
}
四,执行snort
一切准备工作都做好了,那么现在开始让snort运行起来了哦:)
但在这之前请:
#mkdir /var/log/snort
#chown snort.snort /var/log/snort
现在开始 cd 进入 /home/snort 內,然后打入这个命令:
/home/snort #snort -b -d -i eth0 -u snort -g snort -c /home/snort/rules/snort.conf -l /var/log/snort &
-u 功能是使 snort 由 "snort" 这个使用者执行,进入 chroot 的用者环境
-c 指定使用的指定目录
& 只是在背景中执行
五、SNORT规则编写简介
一条Snort规则可以分为前后两个部分,规则头和后面的选项部分。规则头包含有匹配后的动作命令、协议类型、以及选择流量的四元组(源目的IP及源目的端口)。规则的选项部分是由一个或几个选项的符合,所有主要选项之间是与的关系。选项之间可能有一定的依赖关系,选项主要可以分为四类,第一类是数据包相关各种特征的描述选项,比如:content、fla gs、dsize、ttl等;第二类是规则本身相关一些说明选项,比如:reference、sid、classtype、priority等;
第三类是规则匹配后的动作选项,比如:msg、resp、react、session、logto、tag等;第四类是选项是对某些选项的修饰,比如从属于content的nocase、offset、depth、regex等。由于snort的规则语言语法非常简单,所以可以对新发现的攻击作出快速的反应,迅速开发新的snort规则。编写新的规则,最重要的是知道新攻击的特征码。要得到一个新的攻击的特征码,一般的方法就是进行实际的测试。对一个测试网络进行攻击,使用snort记录在攻击主机和测试网络之间的数据流。然后,对记录的数据进行分析得到其唯一的特征码,最后把得到的特征码加入到规则中。下面是IMAP缓冲区溢出攻击被记录下的数据包:
--------------------------------------------------------------------------
052499-22:27:58.403313 192.168.1.4:1034 -> 192.168.1.3:143
TCP TTL:64 TOS:0x0 DF
***PA* Seq: 0x5295B44E Ack: 0x1B4F8970 Win: 0x7D78
90 90 90 90 90 90 90 90 90 90 90 90 90 90 EB 3B ...............;
5E 89 76 08 31 ED 31 C9 31 C0 88 6E 07 89 6E 0C ^.v.1.1.1..n..n.
B0 0B 89 F3 6E 08 89 E9 6E 0C 89 EA CD 80 .....n....n.....
31 DB 89 D8 40 CD 80 90 90 90 90 90 90 90 90 90 1...@...........
90 90 90 90 90 90 90 90 90 90 90 E8 C0 FF FF FF ................
2F 62 69 6E 2F 73 68 90 90 90 90 90 90 90 90 90 /bin/sh.........
---------------------------------------------------------------------------
这个攻击的特征码就是/bin/sh字符串及其前面的机器代码。这实际上是一个shellcode。四用这些信息可以很快开发出一条新的规则:
alert tcp any any -> 192.168.1.0/24 143 (content:" E8C0 FFF FF /bin/sh";
msg:"New IMAP Buffer Overflow detected!"
其中的特征码含有文本和16进制两种形式,它们以 分割,snort运行时都被转换为二进制形式。
至此,LINUX下的Snort 安装建立成功。结果可以直接从WEB界面上看到,一套完整的IDS系统就可以正常运行了。
六,结束语
Snort 的设定与安装都是很简单的,尽管 Snort 所做的不外是记录及提供侦测,可是这个工作却不可以忽視,很多公司都有设定有防火墙,而防火所做的是帮您防止多数的攻击,加上使用 Snort 的強大IDS功能,网络管理员可以即随时知道一切 Cracker、Lamer 对公司网络的攻击,而同时可以改变防火墙的Rules,阻止外来的攻击,这是单一防火墙不能为的。 1 安装之前的准备
2. 外界环境
3. 安装mysql
4. 安装apache php4.0.3
5. 安装 autoconf 2.53
6. 安装 automake 1.7.9
7. 安装snort2.3
8. 安装ACDI
9. 设置数据库
10. 配置apache php
11. 配置snort
12. 安装测试
13. 参数介绍
1.安装之前的准备
在snort安装之前要准备要安装的软件,查看系统环境
安装snort需要以下软件:
Snort2.3 automake 1.79 autoconf 2.53 apache ACDI libcap mysql
其中automake 1.79 autoconf 2.53 apache libcap mysql 在Linux ToolBox光盘上有
查看系统环境:
bash-2.05a# oslevel
5.2.0.0
bash-2.05a# uname -a
AIX p630 2 5 005C8ACA4C00
本说明是在AIX 5.2上安装snort系统,机器型号p630
2.外界环境
机器在1000M/100M自适应网络中,活动网卡en0/100M
3.安装mysql
1.安装mysql-client-3.23.47
为什么要先安装mysql-client呢?
如果你直接安装服务端,就会提示mysql-client是必须的一个错误.,所以要先安装它.
拿出AIX Linux ToolBox 光盘放入光区
bash-2.05a# smit install
出现如下提示:
软件安装与维护
移动光标至希望的项目并按 Enter 键。
安装并更新软件
列示软件和相关的信息
软件维护和实用程序
软件服务管理
网络安装管理
EZ NIM(简易 NIM 工具)
系统备份管理器
F1= 帮助 F2= 刷新 F3= 取消 F8= 图像
F9= 外壳 F10= 退出 Enter 键 = 执行
选择安装并更新软件---安装软件
出现提示:
安装软件
为输入字段输入或选择值。
当完成所有希望的更改之后,按 Enter 键。
[输入字段]
* 软件的输入设备/目录 []
在[]中输入:/dev/cd0
如果你在硬盘上安装mysql,就输入相应的目录,我也是在硬盘安装,把Linux ToolBox 光盘全部拷贝在硬盘上了.输入目录/home/ftp/linux,回车,看到界面:
* 软件的输入设备/目录 /home/ftp/linux
* 要安装的软件 [all_latest]
仅预览?(将不实际发生安装操作) 否
提交软件更新? 是
保存被置换的文件? 否
自动安装必要的软件? 是
如果需要空间则扩展文件系统? 是
覆盖相同的或较新的版本? 否
验证安装并检查文件大小? 否
包括相应的语言文件集? 是
详尽输出吗? 否
处理多卷? 是
接受新的许可证协议吗? 否
预览新的许可证协议吗? 否
光标移到 要安装的软件 这一项,按f4,出现/home/ftp/linux的软件目录,选择相应的软件mysql-.
在接受新的许可证协议吗 选择 是
回车就可以安装了.
同样的方法安装服务端和mysql-devel-3.23.47
mysql-devel-3.23.47必须安装,因为编译snort要用到他的头文件mysql.h
4.安装apache和php
这个没有什么注意的地方,照安装mysql的方法安装就可以了.
5.安装autoconf 2.53或者更高版本.
同样方法安装,如果你不知道你的系统有没有安装这个包,就如下命令查看:
bash-2.05a#autoconf -V
autoconf (GNU Autoconf) 2.53
Written by David J. MacKenzie and Akim Demaille.
Copyright 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
如果屏幕打印出如上信息,就说明你的机器已经安装了autoconf,如果没有,就需要安装这个软件.
必须先安装autoconf 2.53,后安装auotomake 1.79,因为auotomake对有依赖关系.
安装好autoconf以后,查看你有无安装auotomake.
如下可以查看:
bash-2.05a# aclocal --version
aclocal (GNU automake) 1.7.9
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Tom Tromey <[email]tromey@redhat.com[/email]>
或者
bash-2.05a# automake --version
都可以
如果没有就需要安装,如果你的版本提示
aclocal (GNU automake) 1.7.9
小于1.6就需要卸载这个软件,安装高版本.因为在编译snort的时候,小于1.6的版本会提示出错.AIX 5.2 Linux ToolBox光盘上是1.5的版本.
在[url]http://www-1.ibm.com/servers/aix/products/aixos/linux/download.html[/url] 可以下载到automake 1.7.9
如果你的snort是2.2或者2.0版本的,安装automake 1.7.9以后仍然会提示需要automake 1.6的错误,如果是2.3的版本就没有这个提示了.
2.2版本直接安装不下去,2.0版本可能会在make的时候提示你找不到automake 1.6,但是还是可以编译过去的.
建议安装2.3版本的snort,免得这么麻烦.
如下方法卸载软件版本不合适的automake.
bash-2.05a#smit install
移动光标至希望的项目并按 Enter 键。
安装并更新软件
列示软件和相关的信息
软件维护和实用程序
软件服务管理
网络安装管理
EZ NIM(简易 NIM 工具)
系统备份管理器
选择 软件维护和实用程序--除去安装的软件
出现界面:
[输入字段]
* 软件名称 []
仅预览?(将不实际发生卸装操作) 是
删除从属软件? 否
如果需要空间则扩展文件系统? 否
详尽输出吗? 否
在软件名称里面填入要卸载的automake 1.5,如果你不确定你要卸载的软件具体名称,可以把光标移到 软件名称 项以后按 F4,在列出的系统已经安装的所有软件中选择要卸载的automake软件.
在 仅预览?(将不实际发生卸装操作)要选择否,不然卸载不掉软件.
卸载以后安装下载好的软件automake 1.7.9就可以了.
6.安装snort2.3
在安装之前检查libpcap有没有安装:
bash-2.05a# whereis libpcap
libpcap: /usr/lib/libpcap.a /usr/lib/libpcap.exp
如果有,就继续安装snort,如果没有,就需要在AIX Linux ToolBox光盘里面安装这个lib了,或者在 [url]http://www.packetfactory.net/libnet/[/url]
可以找到,安装方法和前面安装mysql的一样.
# gunzip −c snort−2.3.0.tar.gz | tar xvf −
bash−2.05# cd snort−2.3.0
bash−2.05# ./configure −−with−mysql=/usr/lib/mysql
还可以加载apache等一些东西
bash−2.05# make
在这里,如果你的snort版本是2.0.1的会提示找不到acloacl 1.6,但是会编译成功,如果是2.3的版本,就没有这个问题了.
bash−2.05# make install
这样就安装成功了.
实际的安装过程不会这样顺利的.可能遇到的问题有:找不到mysql.h头文件,找不到mysqlclient,找不到acloacl 1.6,找不到mysql_com.h mysql_version.h这两个文件,找不到Libpcre.我遇到了这几个问题,也许别人会遇到其他更多的问题.所以正确的找到问题所在很重要.
首先测试下
bash−2.05# ./configure
出现找不到Libpcre,这个最好解决,在ibm Linux ToolBox光盘里面就有rpm包,直接安装就可以了.或者把pcre.h拷贝到目录
/usr/lib/gcc-lib/powerpc-ibm-aix5.1.0.0/2.9-aix51-020209/include/ 下也可以解决这个问题
bash−2.05# ./configure
通过
bash−2.05# make
显示找不到acloacl 1.6,但是automake已经安装了,但是还是提示,我们可以先执行
bash−2.05# aclocal
然后编译,这下通过了.
测试完成以后就开始正式编译系统了
bash-2.05a# whereis mysql
mysql: /usr/bin/mysql /usr/lib/mysql /usr/include/mysql
bash−2.05#./configure --with-mysql=/usr/bin/mysql
如果全部通过,那就完成90%了.不过一般是不会那样顺利的.
通常是输出一个错误,提示没有找到mysql.h 继续:
bash−2.05#./configure --with-mysql=/usr/lib/mysql
又得到一个错误,提示/usr/lib/mysql/lib/mysql 和/usr/lib/mysql/include/mysql 找不到头文件mysql.h
可以判断出.configure的时候搜索mysql.h的主目录是/usr,所以运行以下语句:
bash−2.05#./configure --with-mysql=/usr
这个时候,他搜索的目录应该是=/usr/lib/mysql /usr/include/mysql 这个了.
没有提示错误,找到了mysql.h了.
还有一个方法是修改Makefile文件, 效果是一样的,方法如下:
CPPFLAGS = -I/usr/include/mysql -I/usr/include/mysql -DENABLE_MYSQL
LDFLAGS = -L/usr/lib/mysql
顺便也把mysqlclient的数学库加栽上去
LIBS = -lpcap -lnsl -lmysqlclient -lm
这样就通过configure了,然后可以开始编译了
bash−2.05#make
出现错误提示,说是aclocal 1.6找不到,先前我们已经安装了automake 1.7.9了,这个aclocal是automake里面带的.
运行
bash−2.05#aclocal
然后
bash−2.05#make
开始编译了,在编译过程中,提示说找不到mysql_com.h和mysql_version.h
bash−2.05#vi /usr/include/mysql/mysql.h
找到
#include mysql_com.h
#include mysql_version.h
改为
#include /usr/include/mysql/mysql_com.h
#include /usr/include/mysql/mysql_version.h
然后重新编译,编译通过.
bash−2.05#make install
bash−2.05#mkdir /etc/snort
bash−2.05#cp -R rules /etc/snort
bash−2.05#cp etc /etc/snort
7.安装ACDI
这个只是一个php的web页面,下载解压到web目录就可以了.
在其中还要安装生成图片的jpgraph.
bash−2.05# gunzip −c jpgraph−1.12.1.tar.gz | tar xvf −
bash−2.05# gunzip −c adodb340.tgz | tar xvf −
bash−2.05# gunzip −c acid−0.9.6b23.tar.gz | tar xvf −
bash−2.05# cp −R jpgraph−1.12.1 /web/jpgraph
bash−2.05# cp −R adodb /web/ bash−2.05# cp −R acid /web/
bash−2.05# vi /web/acid/acid_conf.php
设置acdi-conf.php文件
$DBlib_path = /www/htdocs/adodb;
$DBtype = mysql;
$alert_dbname = snort;
$alert_host = localhost;
$alert_port = ;
$alert_user = snort;
$alert_password = password;
$archive_dbname = snort;
$archive_host = localhost;
$archive_port = ;
$archive_user = snort;
$archive_password = password ;
$ChartLib_path = /www/htdocs/jpgraph-1.13/src;
/* File format of charts (png, jpeg, gif) */
$chart_file_format = png;
8.配置mysql数据库
bash−2.05# mysql −u root −p
mysql> create database snort;
mysql> use snort;
mysql> source /download/snort−2.3.0/contrib/create_mysql
给数据库设置相关权限,这里的权限有 CREATE,INSERT,SELECT,DELETE,UPDATE
mysql> connect snort
mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort;
mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort@localhost;
在mysql数据库中增加snort用户:
mysql> connect mysql
mysql> set password for snort@localhost = password(your_snort_password);
mysql> set password for snort@% = password(your_snort_password);
mysql> flush privileges;
添加表 contrib/snortdb−extra.gz :
mysql> connect snort
mysql> source snort−db
mysql> exit
这样snort数据库就设置好了,可是查看一下:
bash−2.05# mysql −u root −p
mysql> connect snort
mysql> show tables;
−−−−−−−−−−−−−−−−−−
| Tables_in_snort |
−−−−−−−−−−−−−−−−−−
| acid_ag |
| acid_ag_alert |
| acid_event |
| acid_ip_cache |
| data |
| detail |
| encoding |
| event |
| icmphdr |
| iphdr |
| opt |
| reference |
| reference_system |
| schema |
| sensor |
| sig_class |
| sig_reference |
| signature |
| tcphdr |
| udphdr |
−−−−−−−−−−−−−−−−−−
20 rows in set (0.00 sec)
mysql> exit
9.安装apache php
和安装mysql的方法一样,注意要先安装apache,后安装php
在httpd.conf in /usr/local/apache/conf : 中添加如下项目,使apache支持php:
LoadModule php4_module libexec/libphp4.so
AddModule mod_php4.c
AddType application/x−httpd−php .php
在the DirectoryIndex 中添加index.php
设置好apache的web目录
重新启动apache
bash−2.05# apache reatart
测试安装成功与否:
写一个test.php的文件,放在web目录下,内容为
<?
$date = date(d−m−Y);
$heure = date(H:i);
Print(Nous sommes le $date et il est $heure);
phpinfo();
?>
通过浏览器查看是不是执行正常,如果正常就看下一步.
10.配置snort
修改/etc/snort/snort.conf,检查有无这一行:
#var HOME_NET any
将它反注释掉,確定只有一行 var HOME_NET … 敘述,其它的var HOME_NET 都把他注释掉
找到 var RULE_PATH ,将它改成如下字串
var RULE_PATH /etc/snort
找到output database 这个项目,把前面的注释去掉,然后在连接数据库的用户,密码等处添加刚才设置的mysql的数据库名和用户,密码
output database:log,mysql,user=snort password=password dbname=snort host=localhost
启动snort
bash−2.05# snort -T -c /etc/snort/snort.conf
这样,一个aix下的snort就安装完成了
11.参数介绍:
命令行是snort -[options] <filters>
选项:
-A <alert> 设置<alert>的模式是full,fast,还是none;full模式是记录
标准的alert模式到alert文件中;Fast模式只写入时间戳,messages,
IPs,ports到文件中,None模式关闭报警。
-a 是显示ARP包;
-b 是把LOG的信息包记录为TCPDUMP格式,所有信息包都被记录为
两进制形式,名字如[email]snort-0612@1385.log[/email],这个选项对于FAST
记录模式比较好,因为它不需要花费包的信息转化为文本的时间。
Snort在100Mbps网络中使用-b比较好。
-c <cf> 使用配置文件<cf>,这个规则文件是告诉系统什么样的信息要LOG,
或者要报警,或者通过。
-C 在信息包信息使用ASCII码来显示,而不是hexdump,
-d 解码应用层。
-D 把snort以守护进程的方法来运行,默认情况下ALERT记录发送
到/var/log/snort.alert文件中去。
-e 显示并记录2个信息包头的数据。
-F <bpf>从<bpf>文件中读BPF过滤器(filters),这里的filters是标准
的BPF格式过滤器,你可以在TCPDump里看到,你可以查看TCPDump
的man页怎样使用这个过滤器。
-h <hn>设置网络地址,如一个C类IP地址192.168.0.1或者其他的,使用这个
选项,会使用箭头的方式数据进出的方向。
-I <if> 使用网络接口参数<if>
-l <ld> LOG信息包记录到<ld>目录中去。
-M <wkstn> 发送WinPopup信息到包含<wkstn>文件中存在的工作站列表中去,
这选项需要Samba的支持,wkstn文件很简单,每一行只要添加包含
在SMB中的主机名即可。(注意不需要\两个斜杠)。
-n <num> 是指定在处理<num>个数据包后退出。
-N 关闭LOG记录,但ALERT功能仍旧正常。
-o 改变所采用的记录文件,如正常情况下采用Alert->Pass->Log order,
而采用此选项是这样的顺序:Pass->Alert->Log order,其中Pass
是那些允许通过的规则而不记录和报警,ALERT是不允许通过的规则,
LOG指LOG记录,因为有些人就喜欢奇奇怪怪,象CASPER,QUACK就喜欢
反过来操作。
-p 关闭杂乱模式嗅探方式,一般用来更安全的调试网络。
-r <tf> 读取tcpdump方式产生的文件<tf>,这个方法用来处理如
得到一个Shadow(Shadow IDS产生)文件,因为这些文件不能
用一般的EDIT来编辑查看。
-s LOG 报警的记录到syslog中去,在LINUX机器上,这些警告信息
会出现在/var/log/secure,在其他平台上将出现在/var/log/message中去。
-S <n=v>这个是设置变量值,这可以用来在命令行定义Snort rules文件
中的变量,如你要在Snort rules文件中定义变量HOME_NET,你
可以在命令行中给它预定义值。
-v 使用为verbose模式,把信息包打印在console中,这个选项使用后
会使速度很慢,这样结果在记录多的是时候会出现丢包现象。
-V 显示SNORT版本并退出;
-? 显示使用列表并退出;
----------------------------------------------------------------------
下面是一些命令的组合介绍,当然更多的组合你可以自己去测试:
Snort存在比较多的命令选项和参数,先来介绍一些基本的一些命令,如果你
想要把信息包的头显示在屏幕上,你可以使用:
./snort -v
这个命令会运行Snort和显示IP和TCP/UDP/ICMP头信息。
我使用了ping 192.168.0.1就显示了如下信息:
06/10-10:21:13.884925 192.168.0.2 -> 192.168.0.1
ICMP TTL:64 TOS:0x0 ID:4068
ID:20507 Seq:0 ECHO
06/10-10:21:13.885081 192.168.0.1 -> 192.168.0.2
ICMP TTL:128 TOS:0x0 ID:15941
ID:20507 Seq:0 ECHO REPLY
06/10-10:21:14.884874 192.168.0.2 -> 192.168.0.1
ICMP TTL:64 TOS:0x0 ID:4069
ID:20507 Seq:256 ECHO
06/10-10:21:14.885027 192.168.0.1 -> 192.168.0.2
ICMP TTL:128 TOS:0x0 ID:15942
ID:20507 Seq:256 ECHO REPLY
如果你想要解码应用层,就使用:
snort -vd
再次使用ping 192.168.0.1就显示了如下信息:
06/10-10:26:39.894493 192.168.0.2 -> 192.168.0.1
ICMP TTL:64 TOS:0x0 ID:4076
ID:20763 Seq:0 ECHO
58 13 42 39 E0 BB 05 00 08 09 0A 0B 0C 0D 0E 0F X.B9............
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !#$%&()* ,-./
30 31 32 33 34 35 36 37 01234567
06/10-10:26:39.894637 192.168.0.1 -> 192.168.0.2
ICMP TTL:128 TOS:0x0 ID:15966
ID:20763 Seq:0 ECHO REPLY
58 13 42 39 E0 BB 05 00 08 09 0A 0B 0C 0D 0E 0F X.B9............
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !#$%&()* ,-./
30 31 32 33 34 35 36 37 01234567
如果要看到更详细的关于有关ethernet头的信息,就要使用:
snort -vde
使用ping 192.168.0.1就显示了如下信息:
-*> Snort! <*-
Version 1.6-WIN32
By Martin Roesch ([email]roesch@clark.net[/email], [url]www.clark.net/~roesch[/url])
WIN32 Port By Michael Davis ([email]Mike@eEye.com[/email], [url]www.datasurge.net/~mike[/url])
06/10-10:32:01.345962 0:60:94:F9:5E:17 -> 0:50:BA:BB:4A:54 type:0x800 len:0x62
192.168.0.2 -> 192.168.0.1 ICMP TTL:64 TOS:0x0 ID:4079
ID:21787 Seq:0 ECHO
99 14 42 39 47 4C 0C 00 08 09 0A 0B 0C 0D 0E 0F ..B9GL..........
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !#$%&()* ,-./
30 31 32 33 34 35 36 37 01234567
06/10-10:32:01.346164 0:50:BA:BB:4A:54 -> 0:60:94:F9:5E:17 type:0x800 len:0x62
192.168.0.1 -> 192.168.0.2 ICMP TTL:128 TOS:0x0 ID:16090
ID:21787 Seq:0 ECHO REPLY
99 14 42 39 47 4C 0C 00 08 09 0A 0B 0C 0D 0E 0F ..B9GL..........
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !#$%&()* ,-./
30 31 32 33 34 35 36 37 01234567
当然上面的一些命令你只是在屏幕上看到,如果要记录在LOG文件上,你可以
先建立一个log目录,在使用下面的命令:
./snort -dev -l ./log -h 192.168.0.1/24
这个命令就使Snort把ethernet头信息和应用层数据记录到./log目录总去了,并
记录的是关于192.168.0.1 CLASS C的信息,
如果你想利用一些规则文件(一些记录特定数据的规则文件,如SYN ATTACK等记录)
就使用:
./snort -dev -l ./log -h 192.168.1.0/24 -c snort-lib
这里的Snort-lib是你的规则文件的文件名,这将采用snort-lib文件中设置的
规则来决定是否记录某个信息包。而
./snort -d -h 192.168.1.0/24 -l ./log -c snort-lib 可以不记录一些ethernet头信息
如,我用./nmap -sS 192.168.0.1 -p 21就在/log/alert.ids中记录如下信息:
[**] IDS246 - MISC - Large ICMP Packet [**]
06/12-13:48:31.992395 192.168.0.1 -> 192.168.0.2
ICMP TTL:128 TOS:0x0 ID:36579
ID:46802 Seq:0 ECHO REPLY
我故意使用了rules出现的规则php.cgi/?,如192.168.0.1/cgi-bin/php.cgi/?,就显示:
[**] IDS232 - WEB-CGI-PHP CGI access attempt [**]
06/12-13:53:35.106323 192.168.0.2:1789 -> 192.168.0.1:80
TCP TTL:64 TOS:0x0 ID:8945 DF
*****PA* Seq: 0xA070C880 Ack: 0xF113872 Win: 0x7D78
./snort -d -h 192.168.1.0/24 -l ./log -c snort-lib -s就会把日志记录在你
规则文件中所定义的LOG文件中,而不是默认的alert.ids中。
./snort -d -h 192.168.1.0/24 -l ./log -c snort-lib -o此命令是读规则文件的顺序,
有些人很奇怪,需要先读允许的规则文件,再读alert规则文件,然后来LOG记录,那就
按照上面的命令来操作。
如果你的网络请求相当多,你可以使用:
./snort -b -A fast -c snort-lib
这样,每一条规则内的警告消息就分开记录,对于多点同步探测和攻击的记录可以不容易丢包。
当然这样记录的LOG文件是两进制的,类似与tcpdump的格式,你可以使用这样的方法来查看
这些LOG:
./snort -d -c snort-lib -l ./log -h 192.168.1.0/24 -r snort.log
最后这段参数介绍是从网上抄来的,活活...
在linux和bsd等平台安装比较常见,但在aix下就不是很常见了
实验室正好需要一套这个,所以就试了一把,感觉还可以. Snort 是一个开源的轻量级入侵监测系统,可以监测网络上的异常情况,给出报告;
Guardian是基于Snort+IPTables的一个主动防火墙,它分析Snort的日志文件,根据一定的判据自动将某些恶意的IP自动加入IPTables的输入链,将其数据包丢弃。
我自使用Snort+Guardian以来,每天可以看到很多的恶意行为被终止,心里很是高兴!
推荐大家使用!
安装步骤:
1)安装Snort:
*现在Snort & Guardian,目前下载地址为:
[url]http://www.snort.org/dl/snort-2.3.0RC2.tar.gz[/url]
[url]http://www.snort.org/dl/contrib/other_tools/guardian/guardian-1.6.tar.gz[/url]
*将上述文件拷贝至/tmp
*tar zxvf *.tgz
*cd snort-2.3.0RC2
*./configure
*make
*make install
*mkdir /etc/snort
*cd /etc/snort
*wget [url]http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz[/url]
* tar zxvf snortrules-snapshot-CURRENT.tar.gz
*mkdir /var/log/snort
*cd /etc
*vi snort.conf
修改后一些关键设置如下:
var HOME_NET yournetwork
var RULE_PATH /etc/snort/rules
preprocessor http_inspect: global \
iis_unicode_map /etc/snort/rules/unicode.map 1252
include /etc/snort/rules/reference.config
include /etc/snort/rules/classification.config
如:yournetwork 220.8.0.0/16
同时,可以选择将类似
include $RULE_PATH/local.rules
等,前面的#号去掉,设置自己的规则集
* /usr/local/bin/snort -D -l /var/log/snort -c /etc/snort.conf
* 将上一条命令写入/etc/rc.d/rc.local
2)安装guardian---需要perl支持
* cd /tmp
* tar zxvf guardian-1.6.tar.gz
* cd guardian-1.6
* echo > /etc/guardian.ignore
* cp guardian.pl /usr/local/bin/.
* cp scripts/iptables_block.sh /usr/local/bin/guardian_block.sh
* cp scripts/iptables_unblock.sh /usr/local/bin/guardian_unblock.sh
* cp guardian.conf /etc/.
* vi /etc/guardian.conf
如下:
HostGatewayByte 1
# guardian的日志文件
LogFile /var/log/guardian.log
#guardian从何处读取snort的日志
AlertFile /var/log/snort/alert
#将你需要忽略的IP放在此文件中
IgnoreFile /etc/guardian.ignore
# 封锁IP的最长时间,99999999为没有时限
TimeLimit 86400
* /usr/bin/perl /usr/local/bin/guardian.pl -c /etc/guardian.conf
* 将上一条命令加入 /etc/rc.d/rc.local
至此,完成设置
注意:
1)snort的规则文件经常更新,可以使用如下脚本自动更新:
#!/bin/sh
cd /etc/snort
wget [url]http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz[/url]
tar zxvf snortrules-snapshot-CURRENT.tar.gz
exit 0
*将上述脚本存为snortupdate,并放置到/etc/cron.daily/下,可以每天更新一次;
2)guardian有时会自动退出,可以使用如下脚本解决:
#!/bin/sh
/usr/local/bin/killguardian
/usr/local/bin/guardian.pl -c /etc/guardian.conf
exit 0
将上述脚本存为restartguardian,放置到/usr/local/bin
同时,crontab -e,加入如下一句:
* */6 * * * /usr/local/bin/restartguardian
意思为:每6小时重新启动guardian
脚本:killguardian
#!/usr/bin/perl
#杀死当前guardian.pl进程,需要安装perl module Proc::ProcessTable
#访问[url]http://www.cpan.org[/url]可以获得上述module
use Proc::ProcessTable;
$t = new Proc::ProcessTable;
foreach $p (@{$t->table})
{
kill 9, $p->pid if $p->cmndline =~ 'guardian.pl'; 简介
1.安装准备
1.1.获得snort源代码
1.2.快速安装
1.3.configure脚本功能选项简介
1.4.关于本文的几个注意事项
2.为snort提供数据库支持
2.1.PostgreSQL数据库的编译安装
2.2.编译snort数据库日志插件
2.3.配置snort数据库输出插件
3.安装分析员控制台ACID
3.1.需要的软件
3.2.支持软件的安装
3.2.1.安装支持PHP的Apache WEB服务器
3.2.2.安装ADODB和PHPlot
3.3.安装ACID
3.4.系统配置
4.安装实时日志监视程序razoback
4.1.需要的支持
4.2.安装
5.配置snort
6.启动系统
总结
简介
snort是一个轻量级的入侵检测系统,它具有截取网络数据报文,进行网络数据实时分析、报警,以及日志的能力。
snort的报文截取代码是基于libpcap库的,继承了libpcap库的平台兼容性。
它能够进行协议分析,内容搜索/匹配,能够用来检测各种攻击和探测,例如:缓冲区溢出、隐秘端口扫描、CGI攻击、SMB探测、OS指纹特征检测等等。
snort使用一种灵活的规则语言来描述网络数据报文,因此可以对新的攻击作出快速地翻译。
snort具有实时报警能力。可以将报警信息写到syslog、指定的文件、UNIX套接字或者使用WinPopup消息。
snort具有良好的扩展能力。它支持插件体系,可以通过其定义的接口,很方便地加入新的功能。
snort还能够记录网络数据,其日志文件可以是tcpdump格式,也可以是解码的ASCII格式。
本文将介绍一个使用snort、PostgreSQL数据库、Apache、PHP、ACID和razorback搭建入侵检测系统的解决方案。
1.安装准备
1.1.获得snort源代码
用户可以从snort的官方站点[url]http://www.snort.org[/url]获得其源代码或者RPM包。使用源代码安装snort需要libpcap库,可以从[url]ftp://ftp.ee.lbl.gov[/url]下载。如果用户使用某些插件,还可能需要其它的库,将在下面做详细介绍。
1.2.快速安装
安装RPM包
rpm -ihv --nodeps snort-1.8.1-RELEASE.i386.rpm
从源代码的快速安装
你如果不需要一些额外的功能,可以使用快速安装,只要按照以下步骤做就可以了:
1) 确认libpcap包已经安装完毕。
2) ./configure
3) make
4) make install
然后,你就可以使用snort了,可以参考本站的相关文章。
1.3.configure脚本功能选项简介
默认的功能可能无法满足你的要求,因此你可以把一些其它功能加入到你的snort二进制代码中。configure脚本提供了一些选项。通过这些选项,你可以在编译时,将一些额外的功能编译到二进制目标中。下面对这些选项做一个简要的介绍,其中一些重要的选项,例如:数据库支持、FlexResp将有专门的章节进行讨论。而一些标准的configure选项如:--prefix,此处也将不再涉及。
--enable-smbalerts
使SMB报警代码生效。不过,这项功能有安全隐患,需要谨慎使用。
--enable-flexresp
把灵活反应(Flexible Response)代码编译连接到snort二进制目标文件。它能够使snort在IP层主动断开恶意连接。这项功能需要LibNet库,可以从[url]http://www.packetfactory.net[/url]下载其源代码。
--with-postgresql=DIR
提供PostgreSQL数据库支持。
--with-libpcap-includes=DIR
指定libpcap库头文件的位置。
--with-libpcap-libraries=DIR
指定libpcap静态库的位置。
--with-mysql=DIR
指定mysql数据库的路径。
--with-oracle=DIR
指定oracle数据库的位置。
--with-openssl=DIR
指定openssl的位置。
--with-odbc=DIR
提供ODBC数据库支持
--with-oracle=DIR
提供Oracle数据库支持
--with-snmp
提供SNMP协议支持,通过snortSnmp插件,snort能够向网络管理系统(Network Management System)发出snmp报警。这项功能需要ucd-snmp软件包的支持,这个包可以从[url]http://net-snmp.sourceforge.net[/url]下载。
--enable-idmef
把IDMEF XML插件连接到snort二进制代码中。这个插件需要libidmef、libxml2和libntp库,可以分别从以下地址下载:
libidmef [url]http://www.silicondefense.com/idwg/libidmef[/url]
libxml2(>=2.3.7) [url]http://www.xmlsoft.org[/url]
libntp http:/www.ntp.org
这些库的位置由--with-libxml2-includes=DIR、--with-libxml2-libraries=DIR、--with-libntp-libraries=DIR、--with-libidmef-includes=DIR和--with-libidmef-libraries=DIR等功能选项指定。
1.4.关于本文的几个注意事项
本系统由snort、PostgreSQL数据库、PHP、Apacke、ACID以及其它一些辅助软件组成,所有的软件都将安装在/opt/ids/目录下。因此,在配置完成后,你需要将/opt/ids/bin加入到PATH环境变量中,把/opt/ids/lib/加入到/etc/ld.so.config文件,然后执行ldconfig -v或者LD_LIBRARY_PATH环境变量。
2.为snort提供数据库支持
从1.6.3版开始,snort加入了对数据库的支持,通过相应的插件,你可以将snort日志信息记录到数据库中。snort当前支持的数据库包括:PostSQL、MySQL、unixODBC和Oracle。snort还可以通过unixODBC向具有ODBC驱动的数据库记录日志信息,例如DB2、Informix等。
本文将使用PostgreSQL数据库作为snort记录日志信息的数据库(纯粹属于个人偏好,也可以使用MySQL)。同时,在本节中还会对一些相关的程序做一些介绍,这些程序可以在snort源代码的contrib目录下找到。
2.1.PostgreSQL数据库的编译安装
获得软件包
你可以从PostgreSQL的官方站点获得其源代码或者RPM包。
安装RPM包
#rpm -ihv postgresql-xxx.rpm
#rpm -ihv postgresql-devel-xxx.rpm
源代码安装
#tar zxvf postgresql-7.1.x.tar.gz
#cd postgresql-7.1.x
#./configure --prefix=/opt/ids --disable-debug
#make
#make install
建立数据库
建立一个postgresql数据库非常简单。
初始化数据库
#mkdir -p /opt/ids/var/pgsql
#chown ids pgsql
[ids@localhost ids]initdb --pgdata=/opt/ids/var/pgsql --pglib=/opt/ids/lib
[ids@localhost ids]pg_ctl -w -D /opt/ids/var/pgsql -o "-o -F" start (运行PostgreSQL后端服务器)
数据库系统初始化完成,这个系统的管理者是ids用户。这里应该注意一个问题,由于fsync造成PostgreSQL数据库的速度大大慢于MySQL数据库,所以需要使用-o "-o -F"功能选项关闭PostgreSQL数据库的fsync功能。这样会使PostgreSQL数据库的速度大大提高,至少不会比MySQL数据库慢。
建立snort记录日志的数据库
[ids@localhost ids]createuser snort (建立一个snort用户)
Shall the new user be allowed to create database?(y/n) y
Shall the new user be allowed to create more new user?(y/n) n
CREATE USER
[ids@localhost ids]createdb -W -U snort snort (建立snort数据库,这个数据库归snort使用)
Password:123456 (密码只输入一次,要注意其准确性)
CREATE DATABASE
[ids@localhost ids]cd /path-of-snort-source/ (进入snort源代码所在的目录)
[ids@localhost snort-1.8.1-RELEASE]psql snort snort<./contrib/create_postgresql
[ids@localhost snort-1.8.1-RELEASE]zcat ./contrib/snortdb-extra.gz|psql snort snort (为snort数据库建立三个表,便于以后的分析
这样,你就成功建立一个名为snort的PostgreSQL数据库,这个数据库由snort用户使用。下面就是编译、配置snort了。
2.2.编译snort数据库日志插件
如果你的PostgreSQL、MySQL和unixODBC数据库是采用的标准安装,那configure可以自动检测到数据库包含文件和库文件的位置。注意: 如果你是使用RPM软件包安装的,还需要安装相应的开发包。
但是,如果你的数据库没有安装在标准的位置,就需要设置configure脚本的选项,使其知道数据库的位置。因此,根据我们的数据库安装的位置,我们需要使用如下命令来编译安装snort:
#CFLAGS=-O2 ./configure --with-postgresql=/opt/ids --prefix=/opt/ids
#make
#make install
OK,编译安装完成。为了使snort能够使用这个数据记录日志信息,还需要正确配置snort的数据库日志插件。
2.3.配置snort数据库输出插件
snort通过数据库输出插件将snort产生的输出数据送到SQL数据库系统。如果要获得安装和配置这个模块更为详尽的信息,可以参考[url]http://www.incident.org[/url] web page。这个插件使用数据库名和参数表作为其参数。
snort数据库处处插件的配置行格式如下:
output database: [log | alert], [type of database], [parameter list]
有如下参数可以使用:
host
数据库所在的主机。如果指定了一个非零字符串,snort就使用TCP/IP协议连接以此命名的主机。如果没有主机名,snort就使用一个本地UNIX-domain套接字连接本地主机。
port
数据库所在服务器的端口号,或者一个UNIX-domain套接字文件。
dbname
数据库名字。
user
数据库用户名。
passwd
密码。
sensor_name
指定snort传感器的名字,如果没有指定就自动产生。
encoding
因为数据包的负载和选项都是二进制数据,所以没有一种简单和可移植的方式将snort的数据保存在数据库。所以在snort数据库输出插件中提供了一些选项,让你自己决定使用那种编码。可以使用的编码有:hex、base64、ascii。
detail
设置你要保存多少细节数据,有如下选项:
full
保存引起报警的数据包的所有细节,包括IP/TCP包头和负载数据。
fast
只记录少量的数据。如果选择这种记录方式,不利于以后对数据的分析,但在某些情况下还有其用处。使用这种方式,将记录数据包的以下域:时间戳(timestamp)、特征码(signature)、源地址、目的地址、 源端口、目的端口、TCP标志和协议。
除此之外,还需要定义日志方法和数据库类型。有两种有效日志方法:log和alert。如果使用log,snort就会调用log输出,将日志数据记录到数据库;如果设置为alert,snort就会调用alert输出,在数据库中记录报警信息。
下面我们在snort.conf文件中加入以下配置行:
output database: log,postgresql,dbname=snort user=snort host=数据库所在主机(例如:localhost) password=123456
注意:dbname、user、host、passowrd各选项之间只能有一个空格的间隔。
3.安装分析员控制台ACID
ACID(Analysis Console for Incident Databases)是snort使用的标准分析员控制台软件。它由CERT Coordination Center开发,是AIRCERT工程的一部分。可以从[url]http://www.cert.org/kb/acid[/url]下载。注意:使用PostgreSQL作为snort日志数据库,需要ACID-0.9.6b2及其以上版本,因为从ACID-0.9.6b2开始,ACID才实现了数据库的抽象支持。
ACID是一个基于PHP的分析引擎,它能够搜索、处理snort产生的数据库。
3.1.需要的软件
ACID需要很多软件的支持,下面是所需软件清单:
MySQL>=3.23版或者PostgreSQL>=7.1版。
PHP>=4.0.4版。从[url]http://www.php.net[/url]获得。
Apache WEB服务器,需要支持cokies。可以从[url]http://www.apache.org[/url]下载。
snort>=1.7版
ADODB>=0.93版。可以从[url]http://php.weblogs.com/adodb[/url]下载。
还有一些可选的库。
GD 1.8.*:PHPlot加载图象的库,[url]http://www.boutell.com/gd/[/url]
PHPlot>=4.4.6:PHP图形库。[url]http://www.phplot.com[/url]
3.2.支持软件的安装
3.2.1.安装支持PHP的Apache WEB服务器
假设Apache和PHP3的源程序都保存在/tmp目录下,首先登录为root:
$ su
# cd /tmp
# tar -xzvf apache_1.3.x.tar.gz
# cd apacke_1.3.x
# ./configure
# cd /tmp
# tar -xzvf php4-4.0.x.tar.gz
# cd php-4.0.x
# ./configure --with-pgsql=/opt/ids --with-apache=../apache_1.3.x --enable-track-vars --enable-bcmath --with-gd --prefix=/opt/ids --with-php-config=/opt/ids/lib/php.ini
# make
# make install
# cd ../apache_1.3.x
# ./configure --prefix=/opt/ids --activate-module=src/modules/php4/libphp4.a
# make
# make install
# cd ../php-4.0.x
# cp php.ini-dist /opt/ids/lib/php.ini
配置文件的修改我们将在后面介绍。
3.2.2.安装ADODB和PHPlot
安装adodb非常简单,分别把下载的软件包解压,然后把它们复制到一个PHP可以找到的目录:
# tar zxvf adodb112.tgz
# cd adodb
# mkdir /opt/ids/share/acidsupport
# cp * /opt/ids/share/acidsupport
# cd ..
# tar zxvf phplot-4.4.6.tar.gz
# cd phplot-4.4.6
# cp * /opt/ids/share/acidsupport
3.3.安装ACID
所有支持软件的安装就绪后,就可以安装ACID了。安装步骤也是非常简单:
# tar zxvf ACID-0.9.6b11.tar.gz
# cd acid
# cp * /opt/ids/htdocs
3.4.系统配置
配置Apache服务器
编辑/opt/ids/conf/httd.conf文件。
Listen 127.0.0.1:80(根据自己的情况设置)
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
配置ACID
ACID的配置文件是acid_config.php,这也是一个PHP文件。你需要修改以下变量:
$DBlib_path = "/opt/ids/share/acidsupport/adodb"; /* ADODB的安装路径 */
$DBtype = "postgres"; /* 数据库类型 */
$alert_dbname = "snort"; /* 记录snort日志信息的数据库 */
$alert_host = "localhost"; /* 数据库所在的地址 */
$alert_port = "5432"; /* 数据库服务器监听的端口 */
$alert_user = "snort"; /* 数据库用户 */
$alert_password = "123456"; /* 用户的密码 */
$ChartLib_path = "/opt/ids/share/acidsupport/phplot/"; /* PHPlot的安装路径 */
4.安装实时日志监视程序razoback
razorback是一个GNOME环境应用程序,你可以使用它实时监视snort的日志。用户可以从[url]http://www.intersectalliance.com/[/url]获得其最新版本。
4.1.需要的支持
snort能够向syslog记录日志信息。
GNOME库
4.2.安装
快速的安装可以使用以下命令:
# tar zxvf razorback-0.x.x.tar.gz
# cd razorback-0.x.x
# ./configure --prefix=/opt/ids/
# make
# make install
在正常情况下,只有root用户才可以运行razorback。razorback也可以使用PAM(插入式验证模块),通过这个途径,普通用户可以运行razorback,只要输入root的密码。
# chmod a+s /opt/ids/bin/razorback
# cat > /etc/pam.d/razorback < auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/pam_pwdb.so
session optional /lib/security/pam_xauth.so
account required /lib/security/pam_permit.so
EOF
# cat > /etc/security/console.apps/razorback < USER=root
FALLBACK=true
PROGRAM=/usr/sbin/razorback
SESSION=true
EOF
5.配置snort
在前面的安装过程中,我们对某些配置做了讨论。在这里将对其它的一些必要的配置选项进行简单的讨论,有关snort IDS详细的配置策略将有专门的文章介绍。由于版本的升级,造成配置选项的定义随版本的不同而有所变化。下面的讨论将主要针对snort-1.8.x,需要设置的选项主要在snort.conf文件中:
设置网络变量
首先,你需要设置本地网络的一些参数:
var HOME_NET 本地网络IP地址/CIDR
var EXTERNAL_NET any
var SMTP $HOME_NET
var SQL_SERVERS $HOME_NET
var DNS_SERVERS $HOME_NET
配置输出插件
ruletype redalert
{
type alert
output alert_syslog: LOG_AUTH LOG_ALERT
output database: log, postgresql, user=snort dbname=snort host=localhost
}
其它的选项可以参考<<如何编写snort规则>>根据自己的系统进行设置。
因为,安装程序不能自动安装snort的配置文件snort.conf和各种规则集文件(1.7版以*-lib命名,1.8版以*.rules命名),所以需要手工把它们复制到你指定的目录中,一般是${prefix}/etc/。当然,你可以指定其它的目录,由于snort的规则集文件很多,为了保持目录结构的清晰,我们把它们放在/opt/ids/etc/snort.d目录中:
# mkdir -p /opt/ids/etc/snort.d
# cp snort.conf /opt/ids/etc/snort.d
# cp *.rules(>=1.8版)或者cp *-lib(1.7.x版) /opt/ids/etc/snort.d
# cp classification.conf /opt/ids/etc/snort.d
# chmod 700 /opt/ids/ids/etc/snort.d/
6.启动系统
系统安装完成后,我们就可以启动系统了。
[ids@localhost ids]/opt/ids/bin/pg_ctl -w -D /opt/ids/var/pgsql -o "-o -F" start
[ids@localhost ids]su
# /opt/ids/bin/snort -D -c /opt/etc/snort.d/snort.conf
# /opt/ids/bin/apactl start
然后,使用startx启动X-window系统。
[ids@localhost ids]razorback&
[ids@localhost ids]netscape [url]http://localhost[/url]
总结
本文主要讲述了如何搭建一个基本的snort的入侵检测系统的具体步骤。snort本身还有很多功能,但是本文基本没有涉及,关于这些功能的运用将单独讨论。:)
页:
[1]
