系统使用FreeBSD6.0
原理:
1、打开Polling防止DOS时大量的发包使网卡中断过多而拖垮系统(CPU)。
2、使用PF 防火墙防止SynFlood等Flood,以及防止不必要的包进入系统。
功效:
对DOS有较好的效果,DDOS也有一定的效果,慢速DDOS效果不大。
但是对DOS和DDOS带宽耗尽没有很好的防御(PS:其他方法也对此也无可奈何)。
网卡推荐使用Intel的intel pro 100(fxp)或intel pro 1000(em),因为FreeBSD对intel的网卡支持比较好。
配置内核时加上
options DEVICE_POLLING #打开 Polling
options HZ=1000
device pf #编译上PF防火墙模块
device pflog
以下以WEB服务器为例,网卡为em0(intel pro 1000)
1、PF防火墙配置
ext_if="em0"
table {}
scrub in all
block in on $ext_if #默认拒绝
pass out all
pass quick on lo
block in on $ext_if
block in quick on $ext_if from to any
pass in quick on $ext_if proto tcp from any to $ext_if port 80 /
flags S/SA modulate state (source-track rule, max-src-conn-rate 10/1,max-src-states 30, overload flush, src.track 1)
#同一原地址最大连接数30个,当每秒钟建立连接数超过10个/秒(Syn包)加入黑名单并断开所有这个ip的连接。
pass in quick on $ext_if proto udp from any port 53 to $ext_if keep state #打开DNS
pass out quick on $ext_if proto { tcp, udp} all keep state #PASS自身出去的包
2、优化网络参数:
net.isr.direct=1 #必要时打开
net.inet.tcp.sendspace=65536
net.inet.udp.recvspace=65536
net.inet.udp.maxdgram=65536
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=0
net.inet.ip.redirect=0
net.inet6.ip6.redirect=0
net.inet.tcp.msl=7500
3、攻击时打开polling
#ifconfig em0 polling