假设我们正在设置公司 VPN,并且我们想为 3 个不同类别的用户建立单独的访问策略:
- 系统管理员 –对网络上所有机器的完全访问权限
- 员工 ——仅可访问 Samba/电子邮件服务器
- 承包商 ——仅可访问特殊服务器
我们采取的基本方法是:(a) 将每个用户类别隔离到其自己的虚拟 IP 地址范围内,(b) 通过设置以客户端的虚拟 IP 地址为关键的防火墙规则来控制对机器的访问。
在我们的示例中,假设我们的员工数量不定,但只有一名系统管理员和两名承包商。我们的 IP 分配方法是将所有员工放入 IP 地址池中,然后为系统管理员和承包商分配固定的 IP 地址。
请注意,本示例的先决条件之一是您在 OpenVPN 服务器计算机上运行了软件防火墙,这使您可以定义特定的防火墙规则。在我们的示例中,我们假设防火墙是 Linux iptables。
首先我们根据用户类别创建一个虚拟IP地址映射:
班级 | 虚拟 IP 范围 | 允许 LAN 访问 | 常用名称 |
雇员 | 10.8.0.0/24 | Samba/电子邮件服务器位于 10.66.4.4 | [多变的] |
系统管理员 | 10.8.1.0/24 | 整个 10.66.4.0/24 子网 | 系统管理员1 |
承包商 | 10.8.2.0/24 | 承包商服务器位于 10.66.4.12 | 承包商1、承包商2 |
接下来,让我们将此映射转换为 OpenVPN 服务器配置。首先,确保您已按照 上述步骤 使 10.66.4.0/24 子网可供所有客户端使用(虽然我们将配置路由以允许客户端访问整个 10.66.4.0/24 子网,但我们将使用防火墙规则施加访问限制以实现上述策略表)。
首先,为我们的tun接口定义一个静态单元号 ,以便我们稍后可以在防火墙规则中引用它:
dev tun0
在服务器配置文件中,定义员工IP地址池:
server 10.8.0.0 255.255.255.0
为系统管理员和承包商 IP 范围添加路由:
route 10.8.1.0 255.255.255.0 route 10.8.2.0 255.255.255.0
因为我们将为特定的系统管理员和承包商分配固定的 IP 地址,所以我们将使用客户端配置目录:
client-config-dir ccd
现在将特殊的配置文件放在 ccd 子目录中,为每个非员工 VPN 客户端定义固定 IP 地址。
ccd/系统管理员1
ifconfig-push 10.8.1.1 10.8.1.2
ccd/承包商1
ifconfig-push 10.8.2.1 10.8.2.2
ccd/承包商2
ifconfig-push 10.8.2.5 10.8.2.6
每对 ifconfig-push 地址代表虚拟客户端和服务器 IP 端点。它们必须取自连续的 /30 子网,以便与 Windows 客户端和 TAP-Windows 驱动程序兼容。具体来说,每个端点对的 IP 地址中的最后一个八位字节必须取自以下集合:
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18] [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38] [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58] [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78] [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98] [101,102] [105,106] [109,110] [113,114] [117,118] [121,122] [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150] [153,154] [157,158] [161,162] [165,166] [169,170] [173,174] [177,178] [181,182] [185,186] [189,190] [193,194] [197,198] [201,202] [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230] [233,234] [237,238] [241,242] [245,246] [249,250] [253,254]
这样就完成了 OpenVPN 的配置。最后一步是添加防火墙规则以完成访问策略。在本示例中,我们将使用 Linux iptables 语法中的防火墙规则:
# Employee rule iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 10.66.4.4 -j ACCEPT # Sysadmin rule iptables -A FORWARD -i tun0 -s 10.8.1.0/24 -d 10.66.4.0/24 -j ACCEPT # Contractor rule iptables -A FORWARD -i tun0 -s 10.8.2.0/24 -d 10.66.4.12 -j ACCEPT