一个入侵测系统+主动防火墙(Snort+Guardian)
Snort 是一个开源的轻量级入侵监测系统,可以监测网络上的异常情况,给出报告;Guardian是基于Snort+IPTables的一个主动防火墙,它分析Snort的日志文件,根据一定的判据自动将某些恶意的IP自动加入IPTables的输入链,将其数据报丢弃。
我自使用Snort+Guardian以来,每天可以看到很多的恶意行为被终止,心里很是高兴! 推荐大家使用!
安装步骤:
1)安装Snort:
*现在Snort & Guardian,目前下载地址为:
http://www.snort.org/dl/snort-2.3.0RC2.tar.gz
http://www.snort.org/dl/contrib/ ... guardian-1.6.tar.gz
*将上述文件拷贝至/tmp
*tar zxvf *.tgz
*cd snort-2.3.0RC2
*./configure
*make
*make install
*mkdir /etc/snort
*cd /etc/snort
*wget http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz
* 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 http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz
tar zxvf snortrules-snapshot-CURRENT.tar.gz
exit 0
*将上述脚本存为snortupdate,并放置到/etc/cron.daily/下,可以每天更新一次;
2)guardian有时会自动退出,可以使用如下脚本解决:
#!/usr/bin/perl
use Proc::ProcessTable;
$found=0;
$t = new Proc::ProcessTable;
$g = "guardian.pl";
foreach $p ( @{$t->table} ){
$f=($p->cmndline =~ m/guardian/);
if($f==1)
{
$found=1;
last;
}
}
if($found == 1)
{
print "guardian is alive!\n";
}
else
{
print "guardian is dead!\n";
print "restart guardian now ... \n";
system "/usr/local/bin/guardian.pl -c /etc/guardian.conf";
}
将上述脚本存为testguardian,放置到/etc/cron.hourly下,意思为:每1小时检测guardian是否存活,如果已经死亡就重新启动guardian
记住,给testguardian可执行权限:
chmod +x /etc/cron.hourly/testguardian
同时,编辑/etc/crontab
在path一行加入/usr/local/bin
脚本:killguardian
#!/usr/bin/perl
#杀死当前guardian.pl进程,需要安装perl module Proc::ProcessTable
#访问http://www.cpan.org可以获得上述module
use Proc::ProcessTable;
$t = new Proc::ProcessTable;
foreach $p (@{$t->table})
{
kill 9, $p->pid if $p->cmndline =~ 'guardian.pl';
}
相关的Q/A:
Q:
我按照上述的步骤在RedHat AS3.0 上安装并配置了snort ,但是在启动snort时报:
ERROR: Unable to open rules file: etc/snort/rules/bad-traffic.rules or ./etc/snort/rules/bad-traffic.rules
Fatal Error, Quitting..
而在/etc/snort/rules 下有bad-traffic.rules 文件且是直接从www.snort.org 下载的,为何会是这样.
A:
cd /etc/snort
wget http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz
tar zxvf snortrules-snapshot-CURRENT.tar.gz
**************************************************************************
Q:
* tar zxvf snortrules-snapshot-CURRENT.tar.gz
*mkdir /var/log/snort
*cd /etc
*vi snort.conf
我作到到上面这一步时,发现在/etc目录下根本就没有snort.conf文件,用vi编辑的是一个新文件,这是怎么会事?
A:
在snort的解压目录里找,不要到RULES的解压目录里去找
将/etc/snort/rules/snort.conf拷贝到了/etc 不知道有没有效果
**************************************************************************
Q:
我装了snort,启动时没有报错,但是/var/log/snort/里面的日志就是为空,为什么?我用nmap在客户端做测试,服务器端根本没有记录任何内容。我直接用snort -v 来启动,终端也没有任何访问的信息显示,不知道是怎么回事?还要安装其它软件么?查看了日志,里面snort启动最后也是successful的。
A:
问题解决了。
但是guardian_unblock.sh这个文件删除规则的时候,居然用ipchains命令,查看了一下guardian-1.6.tar.gz包,里面的iptables_unblock.sh就是写错的........