OPENVPN拨入后给不同的用户分配不同的访问权限

来源:互联网 发布:mysql skipnetworking 编辑:程序博客网 时间:2024/05/20 13:39

需求:
我们想要给不同部门的或者级别的用户单独设置访问策略,比如

  • 系统管理员:允许访问公司内网的所有的终端
  • 普通职工:只允许访问Samba/email服务器
  • 承包商:只允许访问特定的服务器
Class Virtual IP Range Allowed LAN Access Common Names 普通职工 10.8.0.0/24 Samba/email服务器为10.66.4.4 [数量众多] 系统管理员 10.8.1.0/24 10.66.4.0/24整个网段 sysadmin1 承包商 10.8.2.0/24 承包商服务器为10.66.4.12 contractor1, contracter2



首先安装方面就不再多说,不会的可以参考:
Linux下安装openvpn安装,配置
配置openvpn使用账号、密码方式验证登录
openvpn开机自动启动 自动连接解决方案
下面直接说配置客户端权限过程,首先说明,此功能只需在服务器配置,客户端不需要做改动,需要改动的地方有两个

  • server.conf
  • 新建ccd目录及客户端文件
  • iptables规则

修改server.conf
#在服务器配置文件中,定义普通职工的IP地址池:
server 10.8.0.0 255.255.255.0
#管理员的IP范围
route 10.8.1.0 255.255.255.0
#承包商的IP范围
route 10.8.2.0 255.255.255.0
client-config-dir ccd
新建ccd目录及客户端文件
在/etc/openvpn/下新建ccd目录,在ccd目录下新建以客户用户名命名的文件,
ccd/sysadmin1

ifconfig-push 10.8.1.1 10.8.1.2

ccd/contractor1:

ifconfig-push 10.8.2.1 10.8.2.2

文件ccd/contractor2

ifconfig-push 10.8.2.5 10.8.2.6

特别注意:
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]

修改iptables规则

# 普通职工规则iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 10.66.4.4 -j ACCEPT# 系统管理员规则iptables -A FORWARD -i tun0 -s 10.8.1.0/24 -d 10.66.4.0/24 -j ACCEPT# 承包商规则iptables -A FORWARD -i tun0 -s 10.8.2.0/24 -d 10.66.4.12 -j ACCEPT

这里要根据你自己的iptables实际规则做相应的修改,只加上上面的三条有时候是不可以的,需要注意几点:
1. 我们在安装openvpn的时候,会加如下一条规则

-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

现在我们要把10.8.1.0 10.8.2.0这两个网络也加进去

-A POSTROUTING -s 10.8.1.0/24 -o eth0 -j MASQUERADE-A POSTROUTING -s 10.8.2.0/24 -o eth0 -j MASQUERADE

如果还有10.8.3.0网段的话,可以考虑整合成一条规则(用掩码来控制范围,根据自己情况来吧^_^):

-A POSTROUTING -s 10.8.0.0/22 -o eth0 -j MASQUERADE

2.注意这条规则:

-A FORWARD -i tun+ -o eth0 -j ACCEPT

这条规则加上了,前面的forward就没用了,因为匹配不到上面的FORWARD规则的,到这条全匹配上了,就放行了,就限制不住权限了,但禁用了这条,系统管理员就不能访问内网了,要改下,让管理员网段放行,其它需要控制权限的网段不放行

#-A FORWARD -i tun+ -s 10.8.1.0/24 -o eth0 -j ACCEPT

下面我贴出自己的iptables配置文件:

# Generated by iptables-save v1.4.7 on Mon Jan 16 11:17:30 2017*nat:PREROUTING ACCEPT [0:0]:POSTROUTING ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE-A POSTROUTING -s 10.8.1.0/24 -o eth0 -j MASQUERADE-A POSTROUTING -s 10.8.2.0/24 -o eth0 -j MASQUERADECOMMIT# Completed on Mon Jan 16 11:17:30 2017# Generated by iptables-save v1.4.7 on Mon Jan 16 11:17:30 2017*filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [1:152]-A FORWARD -i tun0 -s 10.8.0.0/24 -d 10.66.4.4 -j ACCEPT-A FORWARD -i tun0 -s 10.8.1.0/24 -d 10.66.4.0/24 -j ACCEPT-A FORWARD -i tun0 -s 10.8.2.0/24 -d 10.66.4.12 -j ACCEPT#需要只访问某主机的某个端口-A FORWARD -i tun0 -s 10.8.2.5 -d 10.66.4.15 --dport 80 -j ACCEPT-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT-A INPUT -p icmp -j ACCEPT-A INPUT -i lo -j ACCEPT-A FORWARD -i tun+ -s 10.8.0.0/24 -o eth0 -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 1194 -j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited-A FORWARD -j REJECT --reject-with icmp-host-prohibitedCOMMIT# # Completed on Mon Jan 16 11:17:30 2017

下面就全部配置完毕了

1 0