蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 系统管理


    

蓝森林 http://www.lslnet.com 2006年4月6日 20:18


(转)小记配合网卡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的指南(感谢小龙女回答很多很多问题)


看起来不错啊,ipv6必须要吗?

可以试试效果如何:lol:

[quote]原帖由 [i]剑心通明[/i] 于 2006-1-10 19:58 发表
看起来不错啊,ipv6必须要吗? [/quote]

测试下来必须要

[quote]原帖由 [i]hongzjx[/i] 于 2006-1-11 10:09 发表
可以试试效果如何:lol: [/quote]


14wpps攻击量,每5个ping包剩1个,普通的1w-3w没问题

[quote]原帖由 [i]coolcmm[/i] 于 2006-1-11 11:08 发表



14wpps攻击量,每5个ping包剩1个,普通的1w-3w没问题 [/quote]

在这个流量下,网卡还能提供正常的服务吗

服务当然也是20%的连通率拉!!!

是什么方式的攻击?按最小单位包长度算
140k pps * 64 * 8 /1024 =70Mbits/s
难道不是synflood?pf能抵抗到这种程度?这跟我以前的测试结果不太符合。

inet6并不是必须的,参见使用手册

25.4.1 启用 PF

  PF 作为 FreeBSD 5.3 和更高版本基本系统安装的一部分,作为一个可以动态加载的模块出现。 如果在 rc.conf 中配置了 pf_enable="YES" 则系统会自动加载对应的内核模块。可加载内核模块在构建时启用了 pflog(4)。

    注意: 这个模块假定 options INET 和 device bpf 是存在的。 除非编译时指定了 NOINET6 (例如在 make.conf(5) 中) 则还需要 options INET6。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com