OPENVPN拨入后给不同的用户分配不同的访问权限
来源:互联网 发布:mysql skipnetworking 编辑:程序博客网 时间:2024/05/20 13:39
需求:
我们想要给不同部门的或者级别的用户单独设置访问策略,比如
- 系统管理员:允许访问公司内网的所有的终端
- 普通职工:只允许访问Samba/email服务器
- 承包商:只允许访问特定的服务器
首先安装方面就不再多说,不会的可以参考:
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
下面就全部配置完毕了
- OPENVPN拨入后给不同的用户分配不同的访问权限
- wingvs不同用户设置不同的访问权限方法
- Django 权限认证 编写 -- 根据不同的用户,设置不同的显示和访问权限
- Sql2008不同用户指定访问数据库的权限设置!
- WIN2000下CVS不同用户设置不同的访问权限方法
- WIN2000下CVS不同用户设置不同的访问权限方法
- c++不同继承方式的访问权限
- vsftpd不同用户访问不同目录的解决办法
- samba 配置不同用户 不同访问权限 ubuntu14.04
- SQL2008和SQL2000下为每个登录用户设置不同表的访问权限
- XP设置不同用户对硬盘和文件夹的访问权限
- 给用户设置访问数据库的权限
- 给用户设置访问数据库的权限
- 用户多级权限判断,最适合不同级别用户可以浏览不同的面板组
- 使用chmod同时给目录、文件夹赋予不同的权限
- 给用户分配多表查询权限的小窍门!
- linux,给用户分配目录的读写权限
- 分配到不同的表
- Analytics.js简介
- 初识机器学习
- [P1801]黑匣子
- 如何根据MAC地址获取设备厂商
- [笔记]对于关键字volatile的理解
- OPENVPN拨入后给不同的用户分配不同的访问权限
- HTML5表单及其验证
- 尼科彻斯定理
- isInstance(Object)和instance of的区别
- 只知道RAID 0你就out了 带你了解12345
- linux Eclipse上c++调用使用了tensorflow库的python程序遇到的问题及解决方法
- 获取程序运行(函数单次运行)所需时间
- 在Python中进行基于稳健马氏距离的异常检验
- 【C++】明明的随机数