max number
服务器最大可以建立的连接数(状态数量),如果已经建立的连接数达到了这个数那么多处的连接将被丢弃。
source-track
跟踪每个IP的连接状态数它有中使用格式:source-track rule 和 source-track global
max-src-nodes number
最多允许连接的IP数量,它必须和“source-track rule”一块使用。
max-src-states number
单个IP的最大连接数。
例子:
pass in on $ext_if proto tcp to $web_server port www flags S/SA keep state \
(max 200, source-track rule, max-src-nodes 100, max-src-states 3)
这个例子达到了这样的效果:
1 绝对限制了最大连接状态数为200个。
2 所有连接状态数据依据source-track规则提供。
3 最大允许100个节点(IP地址)并发连接。
4 每个IP地址最大3个连接状态。
max-src-conn number
单个IP的最大连接数,注意这里是指完成了三次握手的并发连接数
max-src-conn-rate number/interval
但IP的连接建立的速率(个/秒)
例子:
table persist
block in quick from
pass in on $ext_if proto tcp to $web_server port www flags S/SA keep state \
(max-src-conn 100, max-src-conn-rate 15/5, overload flush)
flush [global] 这个例子达到这样的效果: 1 允许每个IP最大可以有100个非并发的连接 Packet Filter是非常优秀的包过滤防火墙,OpenBSD核心已经集成了Packet Filter防火墙,不过默认并没有启用,下面我们来启用Packet Filter的强大功能! # 指定可以使用SSH登录的IP,支持CIDR # 指定SSH端口。 # 维持一个持久的表,里面存放的是对本机发动DDoS攻击的IP # 选项设定 # TCP参数设定 # UDP、ICMP及其它参数设定 # 允许最多有65536个连接 # 包整形 # 阻止所有不匹配的包和从DDoS主机来的包 # 防止IP欺骗 # 允许本机访问其他机器 # 允许IPv4地址的客户机访问本地80(www)端口,发起过快连接(DDoS)的主机加入阻止列表。注意是一行,下同 # 允许IPv6地址的客户机访问本地80(www)端口,发起过快连接(DDoS)的主机加入阻止列表 # 允许管理IP远程连接本机SSH端口 保存退出。 修改系统配置,使得开机启用PF防火墙: 保存退出。 转自:http://linux.chinaunix.net/ebook/doc/2009/05/06/1110101.shtml
overload
在这里放置符合条件的IP
清除原来的IP状态
2 允许每个IP最大连接建立的速率小于每秒15个
3 把连接建立过快的IP放到abusive_hosts表中
4 一旦一个IP被放到了abusive_hosts表中后,立即应用block规测
vi /etc/pf.conf
跳到最后,加入下面的内容:
# 宏定义
# 请把下面的fxp0换成你自己用的外网网卡,不知道的可以输入ipconfig查看
ext_if="fxp0"
admin_add="192.168.0.0/24"
# 注意,如果在/etc/ssh/sshd_config文件中更改了SSH端口号,这里的也需要同样修改。否则连不上了不要怪偶没有提醒!
ssh_port="58937"
table persist
set require-order yes
set block-policy drop
set optimization aggressive
set loginterface none
set skip on lo0
set timeout {interval 3,frag 10}
set timeout {tcp.first 10,tcp.opening 2,tcp.established 600,tcp.closing 20,tcp.finwait 10,tcp.closed 10}
set timeout {udp.first 20,udp.single 10,udp.multiple 10}
set timeout {icmp.first 10,icmp.error 5}
set timeout {other.first 20,other.single 10,other.multiple 20}
set timeout {adaptive.start 0,adaptive.end 0}
set limit { states 65535, frags 200, src-nodes 65536, tables 65536, table-entries 1048576 }
scrub in all
scrub out all
block quick from
block return
block in all
block out all
antispoof quick for {lo0,$ext_if}
pass out quick on $ext_if inet from $ext_if to any flags S/SA keep state
pass in quick on $ext_if inet proto tcp from any to $ext_if port 80 flagsS/SA synproxy state (source-track rule,max-src-nodes 200,max-src-states100,max-src-conn 100,max-src-conn-rate 1000/10,overload flush global )
pass in quick on $ext_if inet6 proto tcp from any to $ext_if port 80 flagsS/SA synproxy state (source-track rule,max-src-nodes 200,max-src-states100,max-src-conn 100,max-src-conn-rate 1000/10,overload flush global )
pass in quick on $ext_if inet proto tcp from $admin_add to $ext_if port $ssh_port flags S/SA synproxy state
vi /etc/rc.conf.local
跳到最后,加入下面这行:
pf=YES