:: |
作者 |
留言 |
anthony 半仙
注册时间: 2006-01-10 文章: 36
|
发表于: Thu 2006-01-19 11:20:06 发表主题: 在FreeBSD 6上面怎么防DDOS攻击 |
|
|
FreeBSD已经到6了 对防DDOS的技术有没有改进, 前辈做个总结吧! | |
|
|
|
llzqq 道童
注册时间: 2004-07-16 文章: 247
|
发表于: Thu 2006-01-19 11:59:16 发表主题: |
|
|
这个谁都头疼 _________________ 个人业务:
1. 域名策略解析服务 2. 企业mail系统解决方案 3. unix类os网络应用方案 4. unix类os远程系统维护
msn: mail: | |
|
|
|
anthony 半仙
注册时间: 2006-01-10 文章: 36
|
发表于: Thu 2006-01-19 16:07:18 发表主题: 两年前的办法现在怎么看这种办法 |
|
|
两年前的办法现在怎么看这种办法
ipfw add check-state ipfw add deny tcp from any to any established ipfw add allow tcp from my-net to any setup keep-state
上面原理已经介绍完了,看看有什么好办法解决: 1,增加被攻击者自己的抵抗力,比如增大允许tcp同时连接进来的包(考验你的os的稳定性了,solaris和freebsd稳定性都不错),增加网卡的缓存,比如 kern.ipc.nmbclusters, kern.ipc.maxsockbuf kern.ipc.somaxconn //这个应该就是允许同时进来的tcp连接数 net.inet.tcp.delayed_ack=0 //把这个设为0,这样浪费掉的是电信的带宽速率而不是你的处理时间。 net.inet.tcp.sendspace=32768 net.inet.tcp.recvspace=65535 上面这两个值是比较好的最大化web性能的一个比例值(对付ddos来说,也是增加自己承受力的一方面), net.inet.udp.recvspace=65535 net.inet.udp.maxdgram=57344 net.local.stream.recvspace=65535 net.local.stream.sendspace=65535
2。缩减tcp syn等待超时的时间,freebsd的我不太熟悉,不知是不是这个net.inet.tcp.syncache.bucketlimit: 30 //等待30秒? 这种方式有一定效果,一般现在的firewall,比如pix,cisco,checkpoint都是通过减小这个值来加快丢掉那些syn状态的攻击包,但是那些低带宽、高延时的moden用户可能会牺牲掉。
3。现在有一些高端的硬件产品,比如耀腾的i810e,cisco的11000系列的cdn产品中的一部分。在这方面改进了不少,比如我用过i810e,他有两个特性,一个是支持每秒(还是每分钟?忘了)30万的tcp session连接数,支持七层过滤,当打开七层过滤和tcp代理的时候,i810e会代替你的server与攻击者完成tcp三次握手的动作,因为一台主机目前好像最多也只能建立65535个tcp连接,还不包括低位1024去掉,系统内核参数限制:比如我freebsd上的 net.inet.ip.portrange.lowfirst: 1023 net.inet.ip.portrange.lowlast: 600 net.inet.ip.portrange.first: 1024 net.inet.ip.portrange.last: 5000 net.inet.ip.portrange.hifirst: 49152 net.inet.ip.portrange.hilast: 65535 你可以算算看看你的机器最多可有多少个tcp连接,(一个port number可以建立一个tcp连接), 这样攻击者就必须制造更多更大流量来冲击i810e,直到超过i810e的极限为止。 还有一个更有趣的特性,就是七层过滤,它可以分析数据包中的内容,看看有没有请求内容,如果没有的话,直接drop掉,现在大部分的ddos工具都是仅仅制造一个仅仅能完成tcp三次握手的包(无任何请求无内容)。比如你现在用浏览器访问,包内会封装上http1.1协议的请求l,比如http://:80, http1.1等内容。如果七层过滤扫描到包头没有任何请求服务内容,drop掉。 这种方案目前是最有效的,但是是最昂贵的,一般都要几十万一台,如果攻击者只是偶尔有兴趣时找你玩玩,有点划不来。 | |
|
|
|
llzqq 道童
注册时间: 2004-07-16 文章: 247
|
发表于: Thu 2006-01-19 19:01:31 发表主题: |
|
|
我看到网上很多人把这个设置为1:
net.inet.tcp.delayed_ack=1
到底设置为0还是1对DOS这类攻击更有效呢 _________________ 个人业务:
1. 域名策略解析服务 2. 企业mail系统解决方案 3. unix类os网络应用方案 4. unix类os远程系统维护
msn: mail: | |
|
|
|
llzqq 道童
注册时间: 2004-07-16 文章: 247
|
发表于: Thu 2006-01-19 21:19:52 发表主题: |
|
|
#当一台计算机发起TCP连接请求时,系统会回应ACK应答数据包。 #该选项设置是否延迟ACK应答数据包,把它和包含数据的数据包一起发送, #在高速网络和低负载的情况下会略微提高性能,但在网络连接较差的时候, #对方计算机得不到应答会持续发起连接请求,反而会降低性能。 net.inet.tcp.delayed_ack=0 _________________ 个人业务:
1. 域名策略解析服务 2. 企业mail系统解决方案 3. unix类os网络应用方案 4. unix类os远程系统维护
msn: mail: | |
|
|
|
hunreal 道童
注册时间: 2002-06-30 文章: 346
|
发表于: Thu 2006-01-19 23:06:32 发表主题: |
|
|
详细问题详细解决 不过超大量的ddos, 只有增加机器、带宽来解决了,除非icp这边愿意协助
btw: 6的ipfw2,我用起来比4 ipfw2的效率稍微低一点.
check-state 这种方式对于伪造ip ddos不好,动态表很快就满,即使sysctl调大 | |
|
|
|
delphij 精神病
注册时间: 2002-08-07 文章: 5423 来自: 北京
|
发表于: Thu 2006-01-19 23:29:58 发表主题: Re: 两年前的办法现在怎么看这种办法 |
|
|
anthony 写到: |
两年前的办法现在怎么看这种办法 ipfw add check-state ipfw add deny tcp from any to any established ipfw add allow tcp from my-net to any setup keep-state |
DDoS会让ipfw状态表迅速填满。
anthony 写到: |
1,增加被攻击者自己的抵抗力,比如增大允许tcp同时连接进来的包(考验你的os的稳定性了,solaris和freebsd稳定性都不错),增加网卡的缓存,比如 |
网卡缓存如何增加?
anthony 写到: |
net.inet.tcp.delayed_ack=0 //把这个设为0,这样浪费掉的是电信的带宽速率而不是你的处理时间。 |
打垮交换机对于防止[D]DoS恐怕没有什么大的好处……
anthony 写到: |
net.inet.tcp.sendspace=32768 net.inet.tcp.recvspace=65535 上面这两个值是比较好的最大化web性能的一个比例值(对付ddos来说,也是增加自己承受力的一方面) |
对于HTTP而言,sendspace应该大于recvspace。
anthony 写到: |
net.inet.udp.recvspace=65535 net.inet.udp.maxdgram=57344 net.local.stream.recvspace=65535 net.local.stream.sendspace=65535 |
同上,这些完全要根据应用的性质来。
anthony 写到: |
2。缩减tcp syn等待超时的时间,freebsd的我不太熟悉,不知是不是这个net.inet.tcp.syncache.bucketlimit: 30 //等待30秒?
这种方式有一定效果,一般现在的firewall,比如pix,cisco,checkpoint都是通过减小这个值来加快丢掉那些syn状态的攻击包,但是那些低带宽、高延时的moden用户可能会牺牲掉。 |
不是。应该是 net.inet.tcp.msl,单位是ms。目前的网络上出现几秒内无法建立连接的用户,你完全可以把他们丢掉,因为他们打开网页的时间显然要超过人的忍耐力。
anthony 写到: |
3。现在有一些高端的硬件产品,比如耀腾的i810e,cisco的11000系列的cdn产品中的一部分。在这方面改进了不少,比如我用过i810e,他有两个特性,一个是支持每秒(还是每分钟?忘了)30万的tcp session连接数,支持七层过滤,当打开七层过滤和tcp代理的时候,i810e会代替你的server与攻击者完成tcp三次握手的动作,因为一台主机目前好像最多也只能建立65535个tcp连接,还不包括低位1024去掉,系统内核参数限制: |
我个人认为所谓七层过滤产品就是互联网行业的“X白金”。*5:年轻态,健康品!
anthony 写到: |
比如我freebsd上的 net.inet.ip.portrange.lowfirst: 1023 net.inet.ip.portrange.lowlast: 600 net.inet.ip.portrange.first: 1024 net.inet.ip.portrange.last: 5000 net.inet.ip.portrange.hifirst: 49152 net.inet.ip.portrange.hilast: 65535 |
基本概念错误。这个是你主动发起连接时的临时端口的范围。
anthony 写到: |
你可以算算看看你的机器最多可有多少个tcp连接,(一个port number可以建立一个tcp连接), 这样攻击者就必须制造更多更大流量来冲击i810e,直到超过i810e的极限为止。 |
DDoS就是要用大流量来冲击服务器。流量整形和压缩有助于分担服务器负载,但简单地做连接代理在我看来不会有什么作用。
anthony 写到: |
还有一个更有趣的特性,就是七层过滤,它可以分析数据包中的内容,看看有没有请求内容,如果没有的话,直接drop掉 |
FreeBSD内核内建了accept_filter(9)机制来实现这种功能。
anthony 写到: |
现在大部分的ddos工具都是仅仅制造一个仅仅能完成tcp三次握手的包(无任何请求无内容)。 |
这种工具我们一般称为DoS工具。
anthony 写到: |
比如你现在用浏览器访问,包内会封装上http1.1协议的请求l,比如http://:80, http1.1等内容。如果七层过滤扫描到包头没有任何请求服务内容,drop掉。 这种方案目前是最有效的,但是是最昂贵的,一般都要几十万一台,如果攻击者只是偶尔有兴趣时找你玩玩,有点划不来。 |
一般这类设备最有用的是流量整形(将多个HTTP短连接请求重整为长连接)和压缩加速,当然,前提是设备不先被打死并且不把后面的服务器打死。 _________________ BSD是独立的一蹴,我们有自己的圈子,我们不以商业驱动,追求完美是我们的源动力,任何不好的代码都不能在这里存活。 | |
|
|
|
tulong 半仙
注册时间: 2003-05-12 文章: 177
|
发表于: Fri 2006-01-20 10:41:25 发表主题: |
|
|
嘿嘿,我一用ipfw add deny tcp from any to any established ,服务器就连不上! | |
|
|
|
antijp 老妖
注册时间: 2004-10-16 文章: 1134
|
发表于: Fri 2006-01-20 11:30:23 发表主题: Re: 两年前的办法现在怎么看这种办法 |
|
|
anthony 写到: |
两年前的办法现在怎么看这种办法
ipfw add check-state ipfw add deny tcp from any to any established ipfw add allow tcp from my-net to any setup keep-state
上面原理已经介绍完了,看看有什么好办法解决: 1,增加被攻击者自己的抵抗力,比如增大允许tcp同时连接进来的包(考验你的os的稳定性了,solaris和freebsd稳定性都不错),增加网卡的缓存,比如 kern.ipc.nmbclusters, kern.ipc.maxsockbuf kern.ipc.somaxconn //这个应该就是允许同时进来的tcp连接数 net.inet.tcp.delayed_ack=0 //把这个设为0,这样浪费掉的是电信的带宽速率而不是你的处理时间。 net.inet.tcp.sendspace=32768 net.inet.tcp.recvspace=65535 上面这两个值是比较好的最大化web性能的一个比例值(对付ddos来说,也是增加自己承受力的一方面), net.inet.udp.recvspace=65535 net.inet.udp.maxdgram=57344 net.local.stream.recvspace=65535 net.local.stream.sendspace=65535
2。缩减tcp syn等待超时的时间,freebsd的我不太熟悉,不知是不是这个net.inet.tcp.syncache.bucketlimit: 30 //等待30秒? 这种方式有一定效果,一般现在的firewall,比如pix,cisco,checkpoint都是通过减小这个值来加快丢掉那些syn状态的攻击包,但是那些低带宽、高延时的moden用户可能会牺牲掉。
3。现在有一些高端的硬件产品,比如耀腾的i810e,cisco的11000系列的cdn产品中的一部分。在这方面改进了不少,比如我用过i810e,他有两个特性,一个是支持每秒(还是每分钟?忘了)30万的tcp session连接数,支持七层过滤,当打开七层过滤和tcp代理的时候,i810e会代替你的server与攻击者完成tcp三次握手的动作,因为一台主机目前好像最多也只能建立65535个tcp连接,还不包括低位1024去掉,系统内核参数限制:比如我freebsd上的 net.inet.ip.portrange.lowfirst: 1023 net.inet.ip.portrange.lowlast: 600 net.inet.ip.portrange.first: 1024 net.inet.ip.portrange.last: 5000 net.inet.ip.portrange.hifirst: 49152 net.inet.ip.portrange.hilast: 65535 你可以算算看看你的机器最多可有多少个tcp连接,(一个port number可以建立一个tcp连接), 这样攻击者就必须制造更多更大流量来冲击i810e,直到超过i810e的极限为止。 还有一个更有趣的特性,就是七层过滤,它可以分析数据包中的内容,看看有没有请求内容,如果没有的话,直接drop掉,现在大部分的ddos工具都是仅仅制造一个仅仅能完成tcp三次握手的包(无任何请求无内容)。比如你现在用浏览器访问,包内会封装上http1.1协议的请求l,比如http://:80, http1.1等内容。如果七层过滤扫描到包头没有任何请求服务内容,drop掉。 这种方案目前是最有效的,但是是最昂贵的,一般都要几十万一台,如果攻击者只是偶尔有兴趣时找你玩玩,有点划不来。 | 65535怎么来的?怎么看也看不懂么? | |
|
|
|
loser 半仙
注册时间: 2004-04-12 文章: 180
|
发表于: Fri 2006-01-20 13:19:36 发表主题: 嘻嘻,, |
|
|
露脸的时候到了,,
好像是2的32次方
------------------------------ 又长学问了.. _________________ erp是工作 网络安全是爱好..
| |
|
|
|
delphij 精神病
注册时间: 2002-08-07 文章: 5423 来自: 北京
|
发表于: Fri 2006-01-20 14:34:19 发表主题: Re: 嘻嘻,, |
|
|
loser 写到: |
露脸的时候到了,,
好像是2的32次方
------------------------------ 又长学问了.. |
2^16=65536 2^32=4G _________________ BSD是独立的一蹴,我们有自己的圈子,我们不以商业驱动,追求完美是我们的源动力,任何不好的代码都不能在这里存活。 | |
|
|
|
anthony 半仙
注册时间: 2006-01-10 文章: 36
|
发表于: Fri 2006-01-20 19:55:18 发表主题: |
|
|
摆脱,给一个完整的方案吧!批评完要给一个正确的方案 | |
|
|
|
yarshure 精神病
注册时间: 2002-06-11 文章: 1758 来自: ShangHai
|
发表于: Fri 2006-01-20 20:00:24 发表主题: |
|
|
这里只是技术讨论,要方案要找集成商,譬如“黑洞”这东西就顶用。
anthony 写到: |
摆脱,给一个完整的方案吧!批评完要给一个正确的方案 | _________________ msn or gtalk:yarshure#gmail.com | |
|
|
|
hunreal 道童
注册时间: 2002-06-30 文章: 346
|
发表于: Sat 2006-01-21 00:07:30 发表主题: |
|
|
yarshure 写到: |
这里只是技术讨论,要方案要找集成商,譬如“黑洞”这东西就顶用。
anthony 写到: |
摆脱,给一个完整的方案吧!批评完要给一个正确的方案 | |
也不顶用 | |
|
|
|
delphij 精神病
注册时间: 2002-08-07 文章: 5423 来自: 北京
|
发表于: Sat 2006-01-21 00:53:03 发表主题: |
|
|
anthony 写到: |
摆脱,给一个完整的方案吧!批评完要给一个正确的方案 |
DDoS没有什么太好的办法,我只能说点我觉得还算管用的办法:
0. 改进应用。 攻击者不用做别的,只要找到你的网页刷的最慢的一页去发给几千个客户端,服务器立刻应声而倒。要做的第一件事情是让应用尽可能健壮。
1. 提高带宽/增加设备。 这个就不用说了,“抗”DDoS说白了就是拼带宽和处理能力。
2. 启用流量整形和负载分散的专用设备或服务器。 将来自用户的请求重整为长连接,将压缩/加密用专门的设备/服务器来处理,等等
在内核里面可以采取的防护措施能够解决很多问题,但很多DDoS表面上看并不是真正的攻击,就好比喊来1万人去一个小银行,每个人办理一笔小业务,那么别的人就别想干事了——解决方法是要么把喊人的人抓住,要么再多建一些营业窗口或者把人转到其他银行,而不是在银行门口增加警卫。 _________________ BSD是独立的一蹴,我们有自己的圈子,我们不以商业驱动,追求完美是我们的源动力,任何不好的代码都不能在这里存活。 | |
|
|
|
litrin 道童
注册时间: 2004-09-08 文章: 233 来自: Shanghai
|
发表于: Sat 2006-01-21 19:11:40 发表主题: |
|
|
delphij 写到: |
anthony 写到: |
摆脱,给一个完整的方案吧!批评完要给一个正确的方案 |
DDoS没有什么太好的办法,我只能说点我觉得还算管用的办法:
0. 改进应用。 攻击者不用做别的,只要找到你的网页刷的最慢的一页去发给几千个客户端,服务器立刻应声而倒。要做的第一件事情是让应用尽可能健壮。
1. 提高带宽/增加设备。 这个就不用说了,“抗”DDoS说白了就是拼带宽和处理能力。
2. 启用流量整形和负载分散的专用设备或服务器。 将来自用户的请求重整为长连接,将压缩/加密用专门的设备/服务器来处理,等等
在内核里面可以采取的防护措施能够解决很多问题,但很多DDoS表面上看并不是真正的攻击,就好比喊来1万人去一个小银行,每个人办理一笔小业务,那么别的人就别想干事了——解决方法是要么把喊人的人抓住,要么再多建一些营业窗口或者把人转到其他银行,而不是在银行门口增加警卫。 |
单凭靠调整参数防DDOS的时候总有“绝望”的感觉,您这边搞了几天,那边只要再开台机器,粘住F5就成了。倒不如直接设置好脚本,一旦发现DDOS的机器Deny掉算了。 _________________ 我在潜水,别踩到我!
小站上有各种Linux Unix发行版下载,7788的转载和摘抄以及自己狗屁不通的东西。
| |
|
|
|
delphij 精神病
注册时间: 2002-08-07 文章: 5423 来自: 北京
|
发表于: Sat 2006-01-21 21:57:50 发表主题: |
|
|
litrin 写到: |
单凭靠调整参数防DDOS的时候总有“绝望”的感觉,您这边搞了几天,那边只要再开台机器,粘住F5就成了。倒不如直接设置好脚本,一旦发现DDOS的机器Deny掉算了。 |
DDoS无法Deny,除非你能找到这种DDoS的特征。
04年底的时候曾经做过一次针对FreeBSDChina.org主站的DDoS测试,我当时并不知情,所以采取的临时措施是将TCP msl缩短,并改进了一下实际受到影响的脚本使其迅速结束。注意这次的“DDoS”完全都是正常用户使用浏览器的访问行为,这种东西你没有办法Deny的。能deny的只有DoS。 _________________ BSD是独立的一蹴,我们有自己的圈子,我们不以商业驱动,追求完美是我们的源动力,任何不好的代码都不能在这里存活。 | |
|
|
|
litrin 道童
注册时间: 2004-09-08 文章: 233 来自: Shanghai
|
发表于: Mon 2006-01-23 13:01:43 发表主题: |
|
|
sorry!我有些概念混乱了,多谢提醒 _________________ 我在潜水,别踩到我!
小站上有各种Linux Unix发行版下载,7788的转载和摘抄以及自己狗屁不通的东西。
| |
|
|
|
大排 半仙
注册时间: 2005-01-17 文章: 3
|
发表于: Tue 2006-01-24 09:21:09 发表主题: |
|
|
前两天自己给自己写了个备注 小记配合网卡polling使用FB6.0下pf抗拒绝服务
环境 FB6.0 stable 普通服务器 P2.4 1G内存 一块xl0 一块rl0 帮一个朋友装一台FB抗拒绝服务
什么是polling模式 本来网卡工作模式:需要的时候请求中断。但在拒绝服务攻击情况下,包数太多,就不太可行,polling模式就是让cpu定期去取网卡内存中的数据包。虽然平时看上去这种方法比较效率低,但在拒绝服务攻击情况下就比较好用。
打开网卡的polling模式 内核 options DEVICE_POLLING
polling支持网卡类型 dc(4), em(4), fwe(4), fwip(4), fxp(4), ixgb(4), nge(4), re(4), rl(4), sf(4), sis(4), ste(4), vge(4), vr(4), and xl(4)
polling在sysctl中参数的含义 kern.polling.enable=1 打开polling模式 kern.polling.burst 每个时间片,系统在每个网卡可以抓的最多的包值,不可以改的值,根据其他值系统自己算的 kern.polling.burst_max 每次取多少内存中的包默认150,是 一个参数,和内核里面的HZ相乘(HZ * burst_max)就是每秒cpu极限可以抓的包量 默认HZ=1000 kern.polling.each_burst 没搞懂用处,默认5 好像用处不大 kern.polling.idle_poll=1 man 中推荐打开选项 kern.polling.reg_frac 多久检测一次网卡错误 默认20 kern.polling.user_frac=10 cpu预留给userland tasks的量 默认50, 做防火墙推荐少留一点 kern.polling.handlers 有多少网卡注册了polling服务 不用改
注:HZ的含义以及burst_max的关系,HZ就是赫兹,时间的倒数,就是多久cpu去取一次网卡内存中的包 HZ越大,CPU去取的时间间隔越短,burst_max就是每次取多少内存中的包。 这个参数需要自行测试,HZ越大,在大流量下用top看中断就越多 感觉范围在500-2000比较合适,再大就。。。。。
在内核中为:options HZ=500 (我设置500,burst_max设置150,可保证我的服务器稳定和抗攻击能力比较好)
pf部分 内核(编进去总是快一点) device pf device pflog device pfsync
options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build 在/etc/rc.conf中还有若干选项 要打开
特别注意,编译内核一定要 :options INET6 可用 否则pf不可用,启动报 Apr 25 20:49:29 ds9 kernel: link_elf: symbol in6_cksum undefined Apr 26 20:39:58 ds9 kernel: link_elf: symbol in6_cksum undefined Apr 27 21:41:22 ds9 kernel: link_elf: symbol in6_cksum undefined
其他部分参看pf说明
注:也不是什么pf详细指南什么的,只是拿出自己的一点心得与大家分享,肯定有错,请大家指正,也希望以后可以出一个pf的指南(感谢小龙女回答很多很多问题) | |