八、启用Packet Filter防火墙
Packet Filter是非常优秀的包过滤防火墙,OpenBSD核心已经集成了Packet Filter防火墙,不过默认并没有启用,下面我们来启用Packet Filter的强大功能!
vi /etc/pf.conf
跳到最后,加入下面的内容:
# 宏定义
# 请把下面的fxp0换成你自己用的外网网卡,不知道的可以输入ipconfig查看
ext_if="fxp0"
# 指定可以使用SSH登录的IP,支持CIDR
admin_add="192.168.0.0/24"
# 指定SSH端口。
# 注意,如果在/etc/ssh/sshd_config文件中更改了SSH端口号,这里的也需要同样修改。否则连不上了不要怪偶没有提醒!
ssh_port="58937"
# 维持一个持久的表,里面存放的是对本机发动DDoS攻击的IP
table
# 选项设定
set require-order yes
set block-policy drop
set optimization aggressive
set loginterface none
set skip on lo0
# TCP参数设定
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}
# UDP、ICMP及其它参数设定
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}
# 允许最多有65536个连接
set limit { states 65535, frags 200, src-nodes 65536, tables 65536, table-entries 1048576 }
# 包整形
scrub in all
scrub out all
# 阻止所有不匹配的包和从DDoS主机来的包
block quick from
block return
block in all
block out all
# 防止IP欺骗
antispoof quick for {lo0,$ext_if}
# 允许本机访问其他机器
pass out quick on $ext_if inet from $ext_if to any flags S/SA keep state
# 允许IPv4地址的客户机访问本地80(www)端口,发起过快连接(DDoS)的主机加入阻止列表。注意是一行,下同
pass in quick on $ext_if inet proto tcp from any to $ext_if port 80 flags S/SA synproxy state (source-track rule,max-src-nodes 200,max-src-states 100,max-src-conn 100,max-src-conn-rate 1000/10,overload
# 允许IPv6地址的客户机访问本地80(www)端口,发起过快连接(DDoS)的主机加入阻止列表
pass in quick on $ext_if inet6 proto tcp from any to $ext_if port 80 flags S/SA synproxy state (source-track rule,max-src-nodes 200,max-src-states 100,max-src-conn 100,max-src-conn-rate 1000/10,overload
# 允许管理IP远程连接本机SSH端口
pass in quick on $ext_if inet proto tcp from $admin_add to $ext_if port $ssh_port flags S/SA synproxy state
保存退出。
修改系统配置,使得开机启用PF防火墙:
vi /etc/rc.conf.local
跳到最后,加入下面这行:
pf=YES
保存退出。