服务器承担着业务运行及数据存储的重要作用,因此极易成为攻击者的首要目标。如何对业务服务器的安全进行防护,及时找出针对系统的攻击,并阻断攻击,最大程度地降低主机系统安全的风险程度,是企业安全从业人员面临的一个问题。

悬镜安全实验室是北京安普诺旗下强大而又专业的安全团队,实验室核心成员来自北京大学信息安全实验室,具有多年的漏洞挖掘、安全攻防、机器学习等核心技能。

用过主机层WAF的朋友对ngxluawaf应该都不陌生,做过SSH防暴力破解的同学应该对fail2ban也有耳闻。

常见的开源主机WAF有 modsecurity、naxsi、ngxluawaf 这三个,ngxlua_waf 性能高和易用性较强,基本上零配置,只需要维护规则,常见的攻击类型就都能防御,相对来说是比较省心的选择。

同时,基于lua脚本编写模块也很快捷,甚至可以实现一些复杂的业务层逻辑安全控制。当然,选择春哥的openresty也可以,如果选择openresty就不需要再单独安装lua相关的组件了。

这里我们简单介绍一下安装过程,用nginx或者tengine都可以,需要安装LuaJIT,操作系统需要安装zlib,zlib-devel,openssl,openssl-devel,pcre,pcre-devel。LuaJIT安装成功后,如下图所示。

Tengine编译参数如下:

--prefix=/usr/local/nginx 

--with-http_lua_module 

--with-luajit-lib=/usr/local/luajit/lib/ 

--with-luajit-inc=/usr/local/luajit/include/luajit-2.0/ 

--with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib

下载ngxluawaf,下载地址为https://github.com/loveshell/ngxluawaf,解压后放在/usr/local/nginx/conf目录下,可重命名为指定名称如waf,修改ngxluawaf配置文件config.lua,路径根据实际安装情况定。

RulePath = "/usr/local/nginx/conf/waf/wafconf/"

attacklog = "on"

logdir = "/usr/local/nginx/logs/waf"

需要注意logdir指向的目录不存在,需要手工创建,创建后需要修改所属权限,否则防护日志无权限写入。

nginx主配置文件nginx.conf的http段中添加如下内容。

lua_package_path "/usr/local/nginx/conf/waf/?.lua";

lua_shared_dict limit 10m;

init_by_lua_file  /usr/local/nginx/conf/waf/init.lua; 

access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;

<p "="">检查nginx配置/usr/local/nginx/sbin/nginx –t,如果没问题重启nginx既可生效。

Fail2ban安装我们就不做过多介绍了,安装配置都比较简单,不过fail2ban的经典用法基本都是用来做SSH防暴力破解的,那么fail2ban到底和ngxluawaf有什么关系呢?

其实,看一下fail2ban的原理,通过正则匹配SSH日志中的关键字,根据达到定义的触发规则次数,调用iptables将攻击IP ban掉一定的时间。

相信大家也都想到了,既然能通过匹配SSH日志,web日志肯定也是能匹配到的,只不过是要定义相关匹配规则而已,fail2ban本身也支持apache和vsftp。

针对其他的应用系统也一样,分析场景,编写好规则就可以了。

说了这么多,这里才是我们的重点,我们【悬镜安全】目的是主动诱捕具有针对性的攻击行为,主动诱捕是相对于传统蜜罐,传统蜜罐是被动的诱使攻击者访问,再对其行为进行记录。

主动诱捕是指将具有针对性的攻击行为主动转向蜜罐网络,对攻击者几乎是透明的,不知不觉就进入到了我们的蜜罐网络中。

为什么要采用主动诱捕的方式来进行防御呢,大家可能都有这个体会,我们的应用系统每天都会受到很多攻击,但99%可能都是盲目的扫描探测,只有不到1%可能才是具有针对性的攻击,而我们真正关心的其实就是这1%的针对性攻击,1%的有效数据被99%的垃圾数据覆盖,对分析造成了很大的干扰。

要让主动诱捕真正发挥作用,我们首先要梳理好业务场景,梳理出哪些场景下的攻击是真正具有威胁性的,根据实际情况编写好规则,当攻击行为触发规则,筛选出攻击IP并调用iptables转发到蜜罐网络中。

根据不同需求,蜜罐网络中可以KILLCHAIN进行跟踪和分析,也可以根据业务进行攻击行为分析,进而调整整体安全策略,达到有效防御。

当然,蜜罐网络要做好隔离,否则会造成很大的安全隐患,技术也是一把双刃剑,iptables可以将攻击IP流量转发到蜜罐网络,相信大家也想到了利用iptables实现端口复用,绕过一些端口访问控制。

因此,要想做到更好的防御,就要比攻击者更了解自己的系统。

旧瓶新酒之ngx_lua & fail2ban实现主动诱捕的更多相关文章

  1. 用lua扩展你的Nginx(整理)-----openresty

    用lua扩展你的Nginx(整理) 首先得声明.这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了.按风格应该是属于章亦春的文章. 整理花了不少时间,所以就暂写成原创吧. 一. 概述 Ng ...

  2. 用lua扩展你的Nginx(整理)

    首先得声明.这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了.按风格应该是属于章亦春的文章. 整理花了不少时间,所以就暂写成原创吧. 一. 概述 Nginx是一个高性能.支持高并发的,轻 ...

  3. This module embeds Lua, via LuaJIT 2.0/2.1, into Nginx and by leveraging Nginx's subrequests, allows the integration of the powerful Lua threads (Lua coroutines) into the Nginx event model.

    openresty/lua-nginx-module: Embed the Power of Lua into NGINX HTTP servers https://github.com/openre ...

  4. openresty开发系列10--openresty的简单介绍及安装

    openresty开发系列10--openresty的简单介绍及安装 一.Nginx优点 十几年前,互联网没有这么火,软件外包开发,信息化建设,帮助企业做无纸化办公,收银系统,工厂erp,c/s架构偏 ...

  5. C/C++ Lua通信

    C/C++和Lua是如何进行通信的? http://www.luachina.cn/?post=38 2015-12-28 为了实现Lua和其他语言之间的通信,Lua虚拟机为C/C++提供了两个特性: ...

  6. APT组织跟踪与溯源

    前言 在攻防演练中,高质量的蓝队报告往往需要溯源到攻击团队.国内黑产犯罪团伙.国外APT攻击. 红队现阶段对自己的信息保护的往往较好,根据以往溯源成功案例来看还是通过前端js获取用户ID信息.mysq ...

  7. 使用ngx_lua构建高并发应用(1)

    转自:http://blog.csdn.net/chosen0ne/article/details/7304192 一. 概述 Nginx是一个高性能,支持高并发的,轻量级的web服务器.目前,Apa ...

  8. ngx_lua配置及应用

    一.说明 这里不对lua语言本身及其编译器运行环境等做介绍,以下所有介绍前提对lua相关有所了解. 二.ngx_lua介绍 原理 ngx_lua将Lua嵌入Nginx,可以让Nginx执行Lua脚本, ...

  9. ngx_lua应用最佳实践

    引子: 以下文字,是UPYUN系统开发工程师timebug在SegmentFault D-Day南京站技术沙龙上所做分享的内容要义提炼,主题为UPYUN系统开发团队在进行业务逻辑由C模块到ngx_lu ...

随机推荐

  1. IT实习总结-上海的实习的日子

    在上海实习两个多月,从找工作,到面试,最后到创业公司工作,体会了一个人在外工作的那种工作时的压力与双休时的寂寞,有时甚至有点迷惘,可能这就是生活,每个人都会经历,在经历的过程中会有不同的味道. 说说我 ...

  2. ALTER TRIGGER - 修改一个触发器的定义

    SYNOPSIS ALTER TRIGGER name ON table RENAME TO newname DESCRIPTION 描述 ALTER TRIGGER 改变一个现有触发器的属性. RE ...

  3. wifi钓鱼之--Pumpkin

    无线钓鱼   前言:请准备一块rt3070的外接网卡 Pumpkin是一款无线安全检测工具WiFi-Pumpkin的使用,利用该工具可以伪造接入点完成中间人攻击,同时也支持一些其它的无线渗透功能.旨在 ...

  4. AttributeError: 'dict' object has no attribute 'encode'

    首先这是一个很简单的 运行时错误: 错误分析: AttributeError:属性错误,造成这种错误的原因可能有: 你尝试访问一个不存在的属性或方法.检查一下拼写!你可以使用内建函数 dir 来列出存 ...

  5. Django中使用多线程发送邮件

    1.settings.py 增加Email设置   #mail EMAIL_HOST = ‘smtp.gmail.com’                   #邮件smtp服务器 EMAIL_POR ...

  6. Perl字符集[\d\D]表示任何字符(所有数字和非数字,包括换行符),“.”表示除了换行符以外的所有字符。

    Perl字符集[\d\D]表示任何字符(所有数字和非数字,包括换行符),“.”表示除了换行符以外的所有字符.

  7. Error opening session. Cause: java.lang.NullPointerExcept.

    在学mybatis时遇到这个问题,后面发现时打错了一个字母,发现后分享出来,如果发现这个错误也能够更好的排除错误. 如图可以发现我不小心把default打成了defaule所以出现了这个错误,也找了好 ...

  8. Buffer.compare()

    Buffer.compare(buf1, buf2) buf1 {Buffer} buf2 {Buffer} 返回:{Number} 比较 buf1 和 buf2 通常用于 Buffer 数组的排序目 ...

  9. UVa 11998 破碎的键盘(数组实现链表)

    题意: 输入一行字符,其中包含'[' 和 ‘]’, 意思为键盘上的home 和 end 键, 然后模拟字符在键盘上输入. 输入一行最终的结果 分析: 用数组模拟一个链表, 在链表的头尾插入字母然后输出 ...

  10. JS判断滚动条是否停止滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...