Chinaunix首页 | 论坛 | 博客
  • 博客访问: 486700
  • 博文数量: 100
  • 博客积分: 7010
  • 博客等级: 少将
  • 技术积分: 995
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-22 15:44
文章分类

全部博文(100)

文章存档

2006年(90)

2005年(10)

我的朋友

分类: BSD

2006-02-09 10:37:00


前往页面 1,   
 
发表新文章   回复文章     ->
::  
作者 留言
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调大
阅览会员资料 发送站内信件 MSN Messenger  
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是独立的一蹴,我们有自己的圈子,我们不以商业驱动,追求完美是我们的源动力,任何不好的代码都不能在这里存活。
阅览会员资料 发送站内信件 发送电子邮件 浏览发表者的主页 MSN Messenger  
ICQ
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是独立的一蹴,我们有自己的圈子,我们不以商业驱动,追求完美是我们的源动力,任何不好的代码都不能在这里存活。
阅览会员资料 发送站内信件 发送电子邮件 浏览发表者的主页 MSN Messenger  
ICQ
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 写到:
摆脱,给一个完整的方案吧!批评完要给一个正确的方案



也不顶用
阅览会员资料 发送站内信件 MSN Messenger  
delphij
精神病


注册时间: 2002-08-07
文章: 5423
来自: 北京

文章发表于: Sat 2006-01-21 00:53:03    发表主题: 引用并回复

anthony 写到:
摆脱,给一个完整的方案吧!批评完要给一个正确的方案


DDoS没有什么太好的办法,我只能说点我觉得还算管用的办法:

0. 改进应用。
攻击者不用做别的,只要找到你的网页刷的最慢的一页去发给几千个客户端,服务器立刻应声而倒。要做的第一件事情是让应用尽可能健壮。

1. 提高带宽/增加设备。
这个就不用说了,“抗”DDoS说白了就是拼带宽和处理能力。

2. 启用流量整形和负载分散的专用设备或服务器。
将来自用户的请求重整为长连接,将压缩/加密用专门的设备/服务器来处理,等等

在内核里面可以采取的防护措施能够解决很多问题,但很多DDoS表面上看并不是真正的攻击,就好比喊来1万人去一个小银行,每个人办理一笔小业务,那么别的人就别想干事了——解决方法是要么把喊人的人抓住,要么再多建一些营业窗口或者把人转到其他银行,而不是在银行门口增加警卫。

_________________
BSD是独立的一蹴,我们有自己的圈子,我们不以商业驱动,追求完美是我们的源动力,任何不好的代码都不能在这里存活。
阅览会员资料 发送站内信件 发送电子邮件 浏览发表者的主页 MSN Messenger  
ICQ
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的转载和摘抄以及自己狗屁不通的东西。
阅览会员资料 发送站内信件 浏览发表者的主页 MSN Messenger  
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是独立的一蹴,我们有自己的圈子,我们不以商业驱动,追求完美是我们的源动力,任何不好的代码都不能在这里存活。
阅览会员资料 发送站内信件 发送电子邮件 浏览发表者的主页 MSN Messenger  
ICQ
litrin
道童


注册时间: 2004-09-08
文章: 233
来自: Shanghai

文章发表于: Mon 2006-01-23 13:01:43    发表主题: 引用并回复

Confused sorry!我有些概念混乱了,多谢提醒
_________________
我在潜水,别踩到我!

小站上有各种Linux Unix发行版下载,7788的转载和摘抄以及自己狗屁不通的东西。
阅览会员资料 发送站内信件 浏览发表者的主页 MSN Messenger  
大排
半仙


注册时间: 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的指南(感谢小龙女回答很多很多问题)
阅读(994) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~