- NPF documentation 网址:http://www.netbsd.org/~rmind/npf/
- man npf.conf
1,需求
除了允许openvpn用户端发起的vpn会话,其它所有的会话都被禁止。注:我的openvpn server只有一个物理网卡,我只需要VPN用户端与server端通信即可,很简单的架构。
2,编辑npf.conf
创建/etc/npf.conf文档,可以参照/usr/share/examples/npf目录下的文档内容来创建,或者man npf.conf。
下面贴出我的配置文件:
# 这是一种定义方法,这里定义的是物理网卡
$pub_if = "wm0"
$pub_v4 = { inet4(wm0) }
# 这是另一种定义方法,这里定义的是openvpn的TUN设备
$openvpn_if = { inet4(tun0) }
group (name "test", interface $pub_if) {
block all
# allow openvpn incoming from anywhere with stateful
pass stateful in final family inet4 proto udp to $pub_v4 port 1194
# allow ssh incoming from A.B.C.D with stateful - 这里指定一台公网上的特定电脑可以通过SSH访问openvpn server,以便应急使用
pass stateful in final family inet4 proto tcp flags S/SA from A.B.C.D to $pub_v4 port ssh
}
# 这里允许openvpn隧道内的会话
group (name "openvpn", interface $openvpn_if) {
# allow all session within openvpn tunnel
pass all
}
group (default) {
pass final on lo0 all
block all
}
3,启动NPF
这里照抄文档:
srv# echo 'npf=YES' >> /etc/rc.conf
srv# /etc/rc.d/npf reload
Reloading NPF ruleset.
srv# /etc/rc.d/npf start
Enabling NPF.
如修改了npf.conf文件,要想生效,只需:/etc/rc.d/npf reload 然后 npfctl start 即可。
查看npf的简单状态,npfctl show 和 npfctl stats 命令。