■ 河南 刘景云
编者按: 入侵检测系统在保护企业内网安全中发挥着重要作用,其实有时在Linux系统中,可以将Snort和Guardian结合起来,组建简易的入侵检测和防御系统。
在网络安全领域,如何及时发现入侵行为,并对其进行监视跟踪拦截,对于保护网络系统是极为重要的。
不同的入侵检测系统(IDS)检测的范围不同,例如对于主机型IDS来说,就是在Linux主机上安装IDS来提高本机的安全性,其监控的是其自身。而网络型IDS通过在内网中架设专用的入侵检测主机,来对整个网段进行监控。
在部署IDS时,可以采取灵活的策略,将IDS连接到防火墙和交换机之间串接一个集线器上,也可安装到交换机下的某台主机上,或直i686.rpm daq-2.0.2-18.el6.i686.rpm接安装到防火墙主机,对进出内网的所有数据包进行分析监控等。
在Linux系统中,可以将Snort和Guardian结合起来组建简易的入侵检测和防御系统。这里以Snort 2.9.62版本为例,下载Snort所需的文件到“/root/snort”目录中。执行切换到该目录下,执行“yum -y localinstall --nogpgcheck snort-2.9.6.2-28.el6.libdnet-1.12-7.el6.i686.rpm libpcap1-1.5.2-16.el6.i686.rpm”命令,完成Snort的安装操作。这里采用的是YUM安装方式,对指定的本地RPM包作为安装源。
下载Snort规则库文件,执 行“tar snortrulessnapshot-2.9.tar.gz”和“cd snortrules-snapshot-2.9”命 令, 将“rules”、“so_rules”、“preproc_rules” 等目录复制到“/etc/snort”目录中,将规则包中的“etc”目录中的所有内容复制到“/etc/snort”目录下。
不过默认的Snort配置文件并不符合我们需要,打 开“/etc/snort/snort.conf”文件,在其中找到“var RULE_PATH ../rules”一行,在其上添加“var LIB_PATH/usr/lib”、“var CONF_PATH/etc/snort”等行,将“var RULE_PATH ../rules”行的内容修改为“var RULE_PATH$CONF_PATH/rules”, 将 其下 的“var SO_RULE_PATH../so_rules”内容修改为“var SO_RULE_PATH $CONF_PATH/so_rules”, 将“var PREPROC_RULE_PATH ../preproc_rules”修改为“var PREPROC_RULE_PATH $CONF_PATH/preproc_rules”。 找到“dynamicpreprocessor directory /usr/local/lib/snort_dynamicpreprocessor/”,修改为“dynamicpreprocessor directory $LIB_PATH/snort_dynamicpre processor/”。 将 其 下的“dynamicenging /usr/local/lib/snort_dynamicengine/libsf_engine.so” 修 改 为“dynamicenging $LIB_PATH/snort_dynamicengine/libsf_engine.so”。 将“dynamicdetection directory /usr/local/lib/snort_dynamicrules”修改为“dynamicdetection directory $LIB_PATH/snort_dynamicrules”。
要想发挥Snort的功能,需要针对配置文件“snort.conf”进行操作。在“ipvar HOME_NET”参数中可以设置监控范围,其默认值为“ANY”,表示捕获所有的网络数据包。如果只针对特定的主机设置监控的话,将其设置为特定的IP即可。在“/etc/snort/rules”目录中存在多个规则文件,不同文件用于不同的监控类型。例如“scan.rules”用来检测扫描行为,“virus.rules”用来检测病毒等。
在实际工作中,不一定会用到所有的规则文件。因为加载的规则越多,在匹配时花费更多的时间,造成Snort运行效率降低。因此可以根据实际情况对其进行取舍,在“snort.conf”文件中可以找到对应的规则文件加载项。如果安装IDS的主机上安装了多块网卡,用来连接多个网段,就需要对“/etc/sysconfig/snort”进 行 调整,在该文件中默认的内容包括“INTERFACE=eth0”行,表示只允许Snort通过eth0网络接口捕获数据包,如果该机上存在多块网卡,可以将其修改为“INTERFACE="eth0 eth1 eth2"”,使其可以捕获 eth0、eth1、eth2等接口上的网络包。
启动Snort的方法很简单,执行“service snort start”命令即可。当Snort启动后,就可以执行对攻击行为的监控,并将监控到的攻击信息记录到“/var/log/snort/alert”文件中。
当然,这是对使用单个网络接口而言。如果监控多个网络端口,可以在“/var/log/snort/INTERFACE_Name/alert”文件中分别保存,其中 的“INTERFACE_Name”表示具体的接口名称。
实际上,Snort虽然具有检测入侵行为的功能,不过当其检测到可疑的攻击行为后,除了发出报警信息,记录相关数据外,并不会采取其他任何实际的保护动作。为此,可以使用主动防御系统来配合运作,例如封锁黑客的IP等。
利 用Guardian这 款Snort插件就可以弥补Snort的上述不足。Guardian是一个守护进程,可以对Snort的报警文件进行监视,可调用其他的外部进程来封锁该IP,预设时间过后可以解除封锁。
执 行“tar -zxvf guardian-1.7.tar.gz” 命令,将Guardian压缩包解压,利用“cp”命令,将其中的“guardian.pl”复 制 到“/usr/local/bin”目录,这是Guardian的执行文件,将“scripts/iptables_block.sh” 文 件 复 制 到“/usr/local/bin”目录,并改为“guardian_block.sh”,该文件是封锁黑客IP的外部程序。将“scripts/iptables_unblock.sh”文件复制到“/usr/local/bin”目录,并改名 为“guardian_unblock.sh”,该文件用来解锁被封锁的 IP。 将“guardian.conf”文件复制到“/etc/snort”目录中,这是Guardian的配置文件。
执 行“touch /etc/snort/guardian.ignore”命令,建立一个名为“guardian.ignore”的文件,可以将需要忽略的IP添加进来。执行“touch /etc/snort/guardian.target”命令,建立名为“guardian.target”文件,可以在其中编辑需要监控的IP信息。执 行“touch /etc/snort/guardian.log”命令,可以建立名为“guardian.log”的文件用来记录Guardian的日志信息。
打 开“/etc/snort/guardian.conf”文 件,可以查看Guardian默认配置文件的内容。在其中的“Interface”栏中设置网络接 口,默 认 为“eth0”。 在“LogFile”栏中设置日志文件文件,在“AlertFile”栏中设定Snort报警文件路径,默 认 为“/var/log/snort/alert”。如果监控多个网络端口,可以根据需要进行修改,例如“/var/log/snort/INTERFACE_Name /alert”文件等。在“IgnoreFile”栏中设置IP忽略文件路径,在“TargetFile”栏中设置“guardian.target”文件路径。在“TimeLimit”栏中设置锁定时间,默认为86400秒,即经过24小时后解除针对特定IP的锁定。
打 开“/usr/local/bin/guardian_block.sh”文件,可以看到锁定语句“/sbin/iptables -I INPUT -s $source -I $interface-j DROP”,其中“$source”参数表示从Snort报警文件中获得的攻击者IP,“$interface”参数表示网络接口,该语句的作用是抛弃来自该IP的所有数据包,实现封锁。这里使用的“INPUT”链,比较适合单机环境。
对于防火墙主机来说,可以将其修改为“FORWOPRD”链,表示对穿过防火墙的数据包进行拦截。打开“/usr/local/bin/guardian_unlock.sh”文件,可以看到解锁语句“/sbin/iptables-D INPUT -s $source -I$interface -j DROP”,其中“-D”参数表示删除FILTER表INPUT链中内容为“-s $source -I $interface-j DROP”的规则,即解除对攻击者IP锁定。当然可以添加更多过滤规则。注意,Guardian是由Perl开发的,需要Perl组件的支持。