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,验证地址分配
特别注意:
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的访问控制。