ossec的联动(active-response)是它的一个重要特性,通过联动可以实现在触发某规则的时候执行某些脚本来达到我们期望的目的。在我的前一篇文章里已经比较详细地讲解了如何使用ossec自定义新建规则来检测cc攻击( http://www.freebuf.com/articles/system/68869.html ),本篇内容承接上篇,利用ossec的active-response功能实时阻断cc攻击,通过这个实例来理解ossec联动功能的使用。
在上篇文章中我们已经建立了检测cc攻击的规则,在这里我们先编写一个将指定ip添加到iptables防火墙阻断列表里的shell脚本(ossec已经自带了这个脚本),然后通过active-response功能在触发该规则时执行我们指定的shell脚本,来阻断cc攻击源ip与被防护机器的连接。
首先我们要编写实现我们目的的shell脚本,并保存在agent端ossec目录中的active-response/bin目录下。ossec已经自带一个实现防火墙联动的shell脚本,功能也很强大,还可实现将被阻断的ip恢复连接的功能。
关于脚本的编写可参考官方文档: http://ossec-docs.readthedocs.org/en/latest/manual/ar/ar-custom.html#create-active-response-script
然后我们需要配置ossec server端的ossec.conf文件,添加一段<command>标签的配置,来指定我们要执行的shell文件以及脚本文件接收的参数。ossec也已经自带了相应的配置,配置参数如下:
<command> <name>firewall-drop</name> <executable>firewall-drop.sh</executable> <expect>srcip</expect> <timeout_allowed>yes</timeout_allowed> </command>
<name>标签定义我们这条指令的名字;<executable>指定要执行的shell脚本名称;<expect>则指定接收的参数,因为我们要封禁触发规则的ip,所以这里的参数是源ip,ossec的解码器在解析web日志时,会提取出日志中的源ip作为srcip字段,因此这里要填srcip(日志中包含的字段可以通过ossec-logtest测试);<timeout_allowed>则指定该指令是否支持超时。
最后我们需要添加<active-response>配置,将上述的指令和我们的规则关联起来。配置如下:
<active-response> <command>firewall-drop</command> <location>local</location> <rules_id>31171</rules_id> <timeout>600</timeout> </active-response>
<command>标签中的内容对应前面指令中的<name>标签;<location>则指定该脚本执行的位置,local为触发规则的agent端,server为ossec server端,defined-agent为指定的agent端(后面要加agent id),all为所有的位置;<rules_id>则指定触发哪条规则时执行联动;<timeout>指定超时时间,达到超时时间后会将被封禁的ip恢复连接。
配置详细内容可参考官方文档: http://ossec-docs.readthedocs.org/en/latest/syntax/head_ossec_config.active-response.html
配置完成后,重启ossec服务,配置生效。我们刷新页面触发规则后,可以看到已经无法连接到web服务器了。
同时我们可以查看active-response日志检验规则是否生效,日志文件位于触发规则的服务器ossec目录logs/active-response.log,如下图所示:
至此我们已经通过ossec实现了cc攻击的监控与阻断,希望通过这两个案例抛砖引玉来发挥ossec的强大功能。