0x00 系统效果
此DDOS应用层防御系统已经部署在了http://www.yfdc.org网站上(如果访问失败,请直接访问位于国内的服务器http://121.42.45.55进行在线测试)。
此防御系统位于应用层,可以有效防止非法用户对服务器资源的滥用:
1 2 |
|
其实现的基本思想是:
1 2 |
|
在线效果测试:
进入http://www.yfdc.org -> 点击右上侧在线查询,此时将会进入/shell/yf
域内,/shell/yf
是一个用bash scripts
写的动态web-cgi
程序,用户每一次提交信息,此程序将会执行一些服务器端的查询操作,然后将数据处理后返回到客户端。
为了防止非法用户高频率地访问这个程序,而影响到其他正常用户的访问,故需要进行一些保护措施。
最终效果:
被封信息页面
1 2 3 |
|
0x01 系统原理
操作系统: CentOS 6.5 x86_64
开发语言: Bash Shell Scripts
Web服务器: Apache Httpd
(此图为系统结构的鸟瞰图 可存至本地后放大查看)
2.1 自定义日志:/etc/httpd/logs/yfddos_log
(自定义日志文件的格式)
在httpd.conf的日志参数中,加入如下两行:
1 2 3 |
|
我们接下来重点分析日志文件/etc/httpd/logs/yfddos_log.
LogFormat "%a \"%U\" %{local}p %D %{%s}t " yfddos
解释:
1 2 3 4 5 6 |
|
例子:
1 2 |
|
译为: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中官方定义的日志,原因如下:
1 2 3 4 |
|
2.2 yfddosd黑名单文件格式
黑名单文件格式
yfddosd黑名单文件/etc/yfddos/web-yf-search.b格式如下:
1 2 3 4 5 |
|
每一行为一个黑名单条目,上面第一个条目的意义为:
1 2 3 4 |
|
直观意义为:
IP地址:1.2.3.4,从2014-11-15 18:12:15开始,被封杀1分钟,在2014-11-15 18:13:15时自动解封。
这个文件将由驻留在系统中的daemon守护进程yfddosd进行维护更新。
2.3 守护进程yfddosd:防御系统的逻辑核心
守护进程的原理图
守护进程yfddosd是整个CC防御系统的核心,而function analyze_and_insert_black()
则是yfddosd的核心。
yfddosd的配置参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
函数analyze_and_insert_black
有三个输入参数:
例子: analyze_and_insert_black "4" "10" "5"
1 2 3 |
|
例子: analyze_and_insert_black "150" "2700" "905"
1 2 3 |
|
简记为: analyze_and_insert_black "limit" "ttl" "time"
1 2 3 |
|
从上述中可看出,守护进程yfddosd至少需要完成如下三个任务:
- 分析日志文件/etc/httpd/logs/yfddos_log中指定时间内的用户访问记录
- 将资源滥用者的IP加入文件/etc/yfddos/web-yf-search.b,并设置封杀TTL参数值
- 将/etc/yfddos/web-yf-search.b中已经过期的条目全部及时删除
守护进程yfddosd
是如何实现上面三个逻辑的:
-
分析日志文件/etc/httpd/logs/yfddos_log中指定时间内的用户访问记录:
1
2
3
4
5
<code>(1) 取出
/etc/httpd/logs/yfddos_log
中过去
time
秒的访问日志数据,使用二分法将这一操作的时间复杂度压缩到K*log2(N)以内,
其中N为
/etc/httpd/logs/yfddos_log
中日志总行数,K为一次测试的耗时量,一般为1ms以内,即如有1048576条访问记录,这一操作将仅需要20*1ms
(2) 使用正则RE对这些数据进行二次处理,过滤出所有访问指定URL的用户IP(这个URL为想要防御的http服务url,例如在http:
//www
.yfdc.org系统中,
所防御的就是
/shell/yf
,这个服务向访问者提供信息的search与get服务),再次使用
sort
与
uniq
对这些IP进行处理,以统计出每个IP的访问次数并进行高低排序
<
/code
>
-
将资源滥用者的IP加入文件/etc/yfddos/web-yf-search.b,并设置封杀TTL参数值
1
2
<code>将所有访问次数超过阈值limit的IP更新到黑名单文件
/etc/yfddos/web-yf-search
.b中,每个黑名单条目的封杀时间为ttl秒
<
/code
>
-
将/etc/yfddos/web-yf-search.b中已经过期的条目全部及时删除
1
2
<code>遍历
/etc/yfddos/web-yf-search
.b中所有黑名单条目,结合当前时间戳,将所有已经过期的条目一一删去
<
/code
>
下面是守护进程yfddosd状态机的伪代码:(略去了一些处理细节)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
防御者应斟酌调整每个检测时间点的参数值(封杀时间ttl与判定阈值limit),以调节系统应对CC攻击到来时的反应时间。
0x02 源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
|
本文章来源于乌云知识库,此镜像为了方便大家学习研究,文章版权归乌云知识库!