赞
踩
此防御系统位于应用层,可以有效防止非法用户对服务器资源的滥用:
只要是发送高频率地、应用层请求以实现大量消耗系统资源的攻击方式,皆可有效防御。
其实现的基本思想是:
定期分析所有访问用户在过去各个时间段内的请求频率,将频率高于指定阈值的用户判定为资源滥用者,将其封杀一段时间,时效过后,防御系统自动将其解封。
在线效果测试:
进入网站-> 点击右上侧在线查询,此时将会进入/shell/yf
域内,/shell/yf
是一个用bash scripts
写的动态web-cgi
程序,用户每一次提交信息,此程序将会执行一些服务器端的查询操作,然后将数据处理后返回到客户端。
为了防止非法用户高频率地访问这个程序,而影响到其他正常用户的访问,故需要进行一些保护措施。
最终效果:
被封信息页面
- 在/shell/yf域内,按住F5不放,一直刷新,几秒后松开,就能看到被封信息和解封时间。
- 只要某个用户对/shell/yf的访问超过了正常的频率,服务将会对这个用户关闭一段时间,期满后自动解封。
操作系统: CentOS 6.5 x86_64
开发语言: Bash Shell Scripts
Web服务器: Apache Httpd
(此图为系统结构的鸟瞰图 可存至本地后放大查看)
(自定义日志文件的格式)
在httpd.conf的日志参数中,加入如下两行:
- LogFormat "%a \"%U\" %{local}p %D %{%s}t " yfddos
- CustomLog logs/yfddos_log yfddos
我们接下来重点分析日志文件/etc/httpd/logs/yfddos_log.
LogFormat "%a \"%U\" %{local}p %D %{%s}t " yfddos
解释:
- %a -> 用户的IP
- %U -> 请求的URL地址,但并不包含query string(The URL path requested, not including any query string.)
- %{local}p -> 用户请求的服务器端口(一般为80)
- %D -> 这个请求共消耗了服务器多少微秒(The time taken to serve the request, in microseconds.)
- %{%s}t -> 服务器收到这个请求时,时间戳的值(seconds since 1970-01-01 00:00:00 UTC)
例子:
192.168.31.1 "/shell/yf" 80 118231 1417164313
译为: IP为192.168.31.1的主机,在时间戳为1417164313的时候,访问了/shell/yf,并由服务器的80端口向其提供服务,共耗时118231微秒
或为: IP为192.168.31.1的主机,在2014-11-28 16:45:13的时候,访问了/shell/yf,并由服务器的80端口向其提供服务,共耗时0.118231秒
至于为什么不使用httpd.conf中官方定义的日志,原因如下:
- - 用户访问日志的一条记录可大约控制在60Bytes以内,数据量小,便于后期分析,官方定义的日志太过臃肿,影响分析速度
- - 使用时间戳标志时间,便于后期分析,官方定义的日志时间参数为常规的表达方式,不便于直接进行处理
- - httpd的日志系统本身就是从旧到新进行排序记录的,所以/etc/httpd/logs/yfddos_log日志条目的时间戳,亦为从小到大进行排序的,数据记录更加鲜明
黑名单文件格式
yfddosd黑名单文件/etc/yfddos/web-yf-search.b格式如下:
- # ip add-stamp rmv-stamp
- 1.2.3.4 1416046335 1416046395
- 1.2.3.5 1416046336 1416046396
- 1.2.3.6 1416046339 1416046399
每一行为一个黑名单条目,上面第一个条目的意义为:
- IP地址 :1.2.3.4
- 开始时间:时间戳1416046335,即 2014-11-15 18:12:15
- 终止时间:时间戳1416046395,即 2014-11-15 18:13:15
直观意义为:
IP地址:1.2.3.4,从2014-11-15 18:12:15开始,被封杀1分钟,在2014-11-15 18:13:15时自动解封。
这个文件将由驻留在系统中的daemon守护进程yfddosd进行维护更新。
守护进程的原理图
守护进程yfddosd是整个C
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。