openvpn 访问控制策略实现

2023年 7月 16日 27.5k 0

1.需求

公司生产测试服务器在同一个机房,开发和运维使用同一个openvpn连接机房网络,我们想要给不同部门或者级别的用户单独设置访问策略,比如:

1、 运维人员拨入后可以访问所有服务器。开发测试人员仅能访问开发测试服务器。

2、 高级开发人员因为工作需求,可以访问某些特定的生产服务器。

1.1.实现方式

openvpn可以在配置文件中定义,拨入到vpn的用户设置固定的地址,这样我们就可以通过openvpn自带的功能实现拨入用户的区分,比如运维人员拨入后分配10.8.28.网段地址,开发人员拨入后分配10.8.29网段地址。有了固定的地址,我们就可以通过iptables来实现访问控制了。

比如我的生产网段是192.168.1.1那么我就可以通过iptables来限制只允许运维的10.8.28网段访问,禁止10.8.29访问。

下面是openvpn配置的一个简单实现方式。(注意:如下配置是在openvpn已经配置通过的情况下进行修改,openvpn安装配置请参考其它文档)

2.环境说明

操作系统:centos 6.8

openvpn:2.2.2

主机和网络环境:

主机名 IP地址 角色
c6-node1 192.168.28.61

192.168.29.61

openvpn服务器
c6-node2 192.168.29.62 内网服务器

3.openvpn配置

1、修改openvpn 主配置文件添加如下内容

[root@c6-node1 ~]# cat /etc/openvpn/server.conf 
server 10.8.0.0 255.255.255.0	
server 10.8.28.0 255.255.255.0	# 运维网段
server 10.8.29.0 255.255.255.0	# 开发网段
client-config-dir ccd           # 客户端文件目录

注意:新添加地址池需要添加iptables转换规则用来访问内网

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.8.28.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.8.29.0/24 -j MASQUERADE

内网主机也需要添加路由规则到vpn服务器

route add –net 10.8.28.0/24 gw 192.168.29.61
route add –net 10.8.29.0/24 gw 192.168.29.61

2、新建ccd目录及客户端文件:在/etc/openvpn/下新建ccd目录,在ccd目录下新建以用户名命名的文件,并且通过ifconfig-push分配地址,注意这里需要分配两个地址,一个是客户端本地地址,另一个是服务器的ip端点。

[root@c6-node1 openvpn]# cat ccd/xmfb 
ifconfig-push 10.8.29.237 10.8.29.238

3、使用用户名为xmfb的用户连接openvpn,验证地址分配
vpn拨入地址分配

特别注意:

ifconfig-push中的每一对IP地址表示虚拟客户端和服务器的IP端点。它们必须从连续的/30子网网段中获取(这里是/30表示xxx.xxx.xxx.xxx/30,即子网掩码位数为30),以便于与Windows客户端和TAP-Windows驱动兼容。明确地说,每个端点的IP地址对的最后8位字节必须取自下面的集合。

[  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]

4.客户端验证

1、验证ip地址分配

willwangdeMacBook-Pro:~ will.wang$ ifconfig utun1
utun1: flags=8051 mtu 1500
	inet 10.8.29.237 --> 10.8.29.238 netmask 0xffffffff

2、验证添加的路由表

willwangdeMacBook-Pro:~ will.wang$ netstat -r | grep utun1
10.8.0.1/32        10.8.29.238        UGSc            2        0   utun1
10.8.29.238        10.8.29.237        UH              4        0   utun1
192.168.29         10.8.29.238        UGSc            1        0   utun1

5.iptables 配置拒绝规则

我们在上面给xmfb用户分配了10.8.29.237的地址,下吗我们通过iptables来禁止xmfb用户访问内网的192.168.29.62服务器看看是否可以进行限制。

配置禁止10.8.29.237 访问 192.168.29.62

iptables -A FORWARD -s 10.8.29.237 -d 192.168.29.62 -j DROP

配置完成之后,xmfb用户ping 192.168.29.62就超时了,我们在看下iptables规则,可以看到我们刚才设置的拒绝规则已经匹配到了数据包,说明我们的策略是生效的。

[root@c6-node1 openvpn]# iptables -L -n -v
Chain INPUT (policy ACCEPT 50 packets, 4804 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   12  1008 DROP       all  --  *      *       10.8.29.237          192.168.29.62

Chain OUTPUT (policy ACCEPT 33 packets, 3275 bytes)
pkts bytes target prot opt in out source destination

6.后记

好了,配置到这里就算结束了,这里只是提供思路给大家。各位看官只需要根据自己公司的实际情况,进行网络的规划和iptables规则配置,即可实现vpn的访问控制。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论