總算又可以來寫我的OpenVPN 了,自從上一次寫了OpenVPN(1-6)集,獲得了廣大網友,不錯的迴響。本來想接著把後面的其它應用,再寫出來,但無奈被派外出差,整個人泡在酒裏,思緒不是那麼清楚,不敢隨便寫技術資料,怕寫錯了,誤人子弟囉!現在頭腦有清楚一點,就接著把後面小瑞對OpenVPN 的應用,接著分享出來^_^
Logo Ref Open VPN Project
前情提要:OpenVPN 建置筆記(第6集)
這一集,要分享些什麼呢?
1.將VPN User 分不同的群組,給不同的IP Range ,以方便做權限控管。
2.對VPN User 除了使用憑證的認證外,另外再加入User / Password 的認證機制。
3.將VPN User 登入及登出的時間點,做記錄,以便後續稽核人員,要查資料可以用。
先針對不同的VPN User 分不同的群組,設定不同的權限。這個我覺得還蠻有用的,一般在公司的環境中,會有些正式環境,及測試環境;通常我們會開放正式的環境給公司的使用者使用,但對於外部的人員,例如:外部的軟體公司,有幫我們公司做一些專案的開發,需要連到我們公司的測試環境,那就可以對外部的使用者做一些Service 或機器的訪問限制,減少一些不必要的資安風險。
在這個應用上,小瑞模擬兩個群組,一個是VIP 群組,使用10.10.0.0/24 的網段,可以訪問袐密花園的所有服務;另一個群組為 Guest 群組,使用10.20.0.0/24的網段,只可以訪問袐密花園的Web 服務,也就是只有80 port 可以訪問。
要實現這個作業,必須再搭配iptables 這個工具,做一些IP , 封包的限制。
首先,必須修改Server.conf 的設定:
vi /etc/openvpn/server.conf
mode server
tls-server
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh2048.pem
persist-key
persist-tun
ifconfig 10.8.0.1 10.8.0.2
push "route 10.8.0.1"
push "route 192.168.100.0 255.255.255.0"
client-config-dir ccd
route 10.10.0.0 255.255.255.0
route 10.20.0.0 255.255.255.0
ccd-exclusive
keepalive 10 120
tls-auth ta.key 0
comp-lzo
status openvpn-status.log
log openvpn.log
verb 3
其中比較重要的是那個 ccd ,必須先建立好ccd 的目錄,這個目錄下,會針對不同的user 登入時,給予不同的IP ,以利後面做相關的限制!
mkdir /etc/openvpn/ccd
規劃如下:
client1 這個user 登入時設定為VIP 群組,取得 10.10.0.5 的IP
client2 這個user 登入時設定為Guest 群組,取得 10.20.0.5 的IP
接著建立 client1 的設定檔:
vi /etc/openvpn/ccd/client1
ifconfig-push 10.10.0.5 10.10.0.6
接著建立 client2 的設定檔:
vi /etc/openvpn/ccd/client2
ifconfig-push 10.20.0.5 10.20.0.6
OpenVPN Server 的設定完成,接著要設定 iptables 進行封包的轉送及限制!
修改一下我們的firewall.sh
vi /etc/openvpn/firewall.sh
#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
PRIVATE=192.168.100.0/24
VIP=10.10.0.0/24
GUEST=10.20.0.0/24
LOOP=127.0.0.1iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -Fiptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROPiptables -A INPUT -i eth0 -s $LOOP -j DROP
iptables -A FORWARD -i eth0 -s $LOOP -j DROP
iptables -A INPUT -i eth0 -d $LOOP -j DROP
iptables -A FORWARD -i eth0 -d $LOOP -j DROP#limit some ip traffic
iptables -A FORWARD -p tcp -s $GUEST -d 192.168.100.100 --dport ! 80 -j DROPiptables -A INPUT -s $LOOP -j ACCEPT
iptables -A INPUT -d $LOOP -j ACCEPTiptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPTiptables -A INPUT -i eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT# Keep state of connections from local machine and private subnets
iptables -A OUTPUT -m state --state NEW -o eth0 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state NEW -o eth0 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
因為 VIP 群組,可以進行所有的Service 訪問,所以就不特別寫入firewall 了,直接寫入限制條件,如果來源為GUEST 的IP ,目的為PRIVATE (192.168.100.0/24),且port 不是 80(web) 則禁止防問。
firewall 設定完成後,重啟OpenVPN Server 及 新的 firewall。
/etc/init.d/openvpn restart
sh /etc/openvpn/firewall.sh
接著先使用 client1 連入我們的測試VPN 主機!
登入 client1,同時得到 10.10.0.5 IP
檢視一下 Route Table ,果然使用 10.8.0.1 當做 192.168.100.100 的GateWay
接著使用Ping 及 Tracert 檢視一下到 192.168.100.100 的路徑通不通! (通的)
接著在本機端使用SSH 登入 192.168.100.100 ,成功登入,上次登入的IP 10.10.0.5
接著於本機端使用WWW服務,可成功使用,顯示IP 為 10.10.0.5
client1 的測試己經完成,斷開client1 的VPN 連線!
接著做 client2 的測試,使用Client2 做連線,並成功取得 10.20.0.5 的IP !
使用 Client2 的IP 進行SSH 連線,結果--無法取得連線!
接著使用WEB 服務,結果,可以成功連入Web Service ,並顯示連入IP 為10.20.0.5
綜合以上的測試結果,小瑞非常滿意,完成了另一個好玩的任務!基本上各位網友可以自行延申,自己所需求的不同VPN User 群組,再加上iptables 的限制,應該可以實現自己特殊的群組限制功能!
至於本篇筆記原本要做帳號密碼認證及,Log 的記錄,要留待下一篇再寫了,不好意思啦!
搜索过来的,这个还是挺有帮助的,谢了
great~ you are so nice~
透過CCD機制,讓不同使用者取得不同網段IP。可是試用過後感覺只有一個憑證對映一個IP,另一個使用者使用相同憑證就會相衝。
可以試試在server.conf 中使用 duplicate-cn 這個選項, 只是我們沒有這樣使用!
在正式的環境中, 都是一個User 配發一個憑證加一個IP , 當某一個User 離職時,
只要作廢該User 的憑證即可防止他登入VPN , 也不會影響其它的user , 參考看看!
[…] OpenVPN 建置筆記(第7集) 日期:2010/04/07 | 留言:7 個 | 作者:Rico | 瀏覽:123人次 分類:MIS易筋經, 網路篇 標籤:CentOS 5.4, Open VPN, OpenVPN, ping, site to site, tracert, Xen 留言 (5) 引用 (2) […]
[…] 前情提要:OpenVPN 建置筆記(第7集) […]