pfSense中如何基于用户账户配置防火墙规则限制OpenVPN访问指定IP
pfSense中如何基于用户账户配置防火墙规则限制OpenVPN访问指定IP
Hey there! 你遇到的问题其实挺常见的——pfSense的防火墙规则默认是基于IP地址或别名来识别源的,直接填用户账户名foo.extern当然会报错啦,咱们来一步步解决这个问题:
为什么会报错?
防火墙规则的「源地址」字段只接受IP地址、子网或者预先定义的别名,不支持直接输入用户账户名称,所以你直接填foo.extern才会收到那个提示。
解决方案一:给用户绑定固定OpenVPN IP,再基于IP做规则
这是最稳妥且通用的方法,不管你用的是证书认证还是用户名密码认证都适用:
- 给用户分配固定VPN IP
进入pfSense后台,依次打开VPN > OpenVPN > Client Specific Overrides,点击「Add」新建一条覆盖规则。- 在「Common Name」栏填写
foo.extern(如果是证书认证,这里要和用户证书里的通用名完全一致;如果是用户名密码认证,就填用户账户名)。 - 在「IPv4 Tunnel Network」栏指定一个固定IP,比如
10.8.0.10(要确保这个IP在你的OpenVPN隧道网段里,比如你的隧道网段是10.8.0.0/24,就选这个网段里未被占用的IP)。 - 保存并应用配置。之后这个用户每次连接OpenVPN都会拿到这个固定IP。
- 在「Common Name」栏填写
- 创建防火墙规则
回到Firewall > Rules > [你的OpenVPN接口],新建规则:- 动作设为「Pass」
- 接口选你的OpenVPN接口
- 地址家族选「IPv4」
- 协议选「Any」
- 源地址类型选「Single host or alias」,填入刚才给用户分配的固定IP(比如
10.8.0.10) - 目标地址类型选「Single host or alias」,填入
192.168.56.20 - 保存并应用规则,这样就只有这个用户的VPN连接能访问目标IP了。
解决方案二:用用户组配合防火墙规则的用户匹配(适合新版pfSense)
如果你的pfSense版本比较新(2.5+以上),可以直接基于用户/用户组来做规则:
- 创建用户组
进入System > User Manager > Groups,点击「Add」新建一个组,比如命名为VPN_Restricted_Access,然后把foo.extern添加到这个组里,保存应用。 - 创建基于用户组的防火墙规则
在Firewall > Rules > [你的OpenVPN接口]新建规则:- 动作设为「Pass」
- 接口、地址家族、协议按你的需求设置
- 源地址类型选「User Group」,然后选择刚才创建的
VPN_Restricted_Access组 - 目标地址填
192.168.56.20 - 保存应用规则即可。
注意事项
- 如果用的是用户名密码认证的OpenVPN,要确保你的OpenVPN服务器配置里的「Authentication Method」选择了
Local Database或者对应的认证源,这样pfSense才能识别到连接的用户身份。 - 防火墙规则的顺序很重要!要把这条允许规则放在「拒绝所有」的规则前面,否则会被先匹配到拒绝规则而无法生效。
备注:内容来源于stack exchange,提问作者Yaegaki2




