OPENVPN撥入後給不同的用戶分配不同的訪問權限

需求:
我們想要給不同部門的或者級別的用戶單獨設置訪問策略,比如

  • 系統管理員:允許訪問公司內網的所有的終端
  • 普通職工:只允許訪問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 MASQUERADE
COMMIT
# 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-prohibited
COMMIT
# # Completed on Mon Jan 16 11:17:30 2017

下面就全部配置完畢了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章