?? vpn.txt
字號:
drwx------ 2 slave slave 1024 Apr 7 23:49 ./drwx------ 4 slave slave 1024 Apr 24 14:05 ../-rwx------ 1 slave slave 328 Apr 7 03:04 authorized_keys-rw------- 1 slave slave 660 Apr 14 15:23 known_hosts-rw------- 1 slave slave 512 Apr 21 10:03 random_seed 其中,第一行是 ~slave/.ssh,第二行是 ~slave。 4.8 加強 ssh 在 bastion 主機上的安全性。 請按照我在 sshd_conf 上的設定: PermitRootLogin noIgnoreRhosts yesStrictModes yesQuietMode noFascistLogging yesKeepAlive yesRhostsAuthentication noRhostsRSAAuthentication noRSAAuthentication yesPasswordAuthentication noPermitEmptyPasswords no 密碼認證(PasswordAuthentication)被關閉了,所以,你只有使用授權過的 key ,才能夠 完成登入的動作。(當然,你也已經關閉了,telnet 與 'r' 命令)。 4.9 允許 ppp 的執行,和這兩個帳戶的路由。 當你的 master 帳戶是 root 時(以我的例子而言),你不必做任何事情。至於 slave 帳戶,則會在你的 /etc/sudoers 的檔案中出現一行: Cmnd_Alias VPN=/usr/sbin/pppd,/usr/local/vpn/routeslave ALL=NOPASSWD: VPN 正如你所看到的,我在次防火墻主機上,使用了一些命令稿(scripts),來設定 ppp 和路由表。 4.10 撰寫命令稿程式 在主防火墻主機上,我使用了一個成熟的啟始命令稿:#! /bin/sh# 程式架構 這個檔案是個建立在 /etc/init.d/ 目錄下的命令稿實例。# 你應該在 /etc/init.d 目錄下使用這個命令稿。## 作者 Miquel van Smoorenburg <miquels@cistron.nl>.# Debian GNU/Linux 修訂版作者# Ian Murdock <imurdock@gnu.ai.mit.edu>.## 版本: @(#)skeleton 1.6 11-Nov-1996 miquels@cistron.nl#PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11/:PPPAPP=/home/slave/pppROUTEAPP=/home/slave/routePPPD=/usr/sbin/pppdNAME=VPNREDIR=/usr/local/bin/pty-redirSSH=/usr/bin/sshMYPPPIP=192.168.0.1TARGETIP=192.168.0.2TARGETNET=193.6.37.0MYNET=193.6.35.0SLAVEWALL=polanski-outSLAVEACC=slavetest -f $PPPD || exit 0set -ecase "$1" in start) echo setting up vpn $REDIR $SSH -o 'Batchmode yes' -t -l $SLAVEACC $SLAVEWALL sudo $PPPAPP>/tmp/device TTYNAME=`cat /tmp/device`echo tty is $TTYNAME sleep 10s if [ ! -z $TTYNAME ] then $PPPD $TTYNAME ${MYPPPIP}:${TARGETIP} else echo FAILED! logger "vpn setup failed" fi sleep 5s route add -net $TARGETNET gw $TARGETIP $SSH -o 'Batchmode yes' -l $SLAVEACC $SLAVEWALL sudo $ROUTEAPP ;; stop) ps -ax | grep "ssh -t -l $SLAVEACC " | grep -v grep | awk '{print $1}'| xargs kill ;; *) # echo "Usage: /etc/init.d/$NAME {start|stop|reload}" echo "Usage: /etc/init.d/$NAME {start|stop}" exit 1 ;;esacexit 0 slave 帳戶可以使用命令稿來設定路由 (/usr/local/vpn/route):#!/bin/bash/sbin/route add -net 193.6.35.0 gw 192.168.0.1 而其 .ppprc 的內容,如下:passive5. 讓我們檢視執行的結果: master 會登入到 slave 帳戶里、啟動 pppd、以及,將所有的資料重導至本機的 pty( 虛擬終端機)。整個執行流程如下: * 配置一個新的 pty * 透過 ssh 登入 slave 帳戶 * 在 slave 帳戶中執行 pppd * master 在本機的 pty 執行 pppd * 并且在用戶端設定路由表。 此處我們考慮到了時序的問題(不是太嚴格的要求),這就是為什麼我們會使用 到 'sleep 10s' 這個敘述的原因。 6. 著手執行。6.1 登入 現在,你應該已經測試過 ssh 是否能夠正常地工作。如果,slave 拒絕你登入, 請閱讀 記錄檔。也許是檔案使用權限或 sshd ,在設定上的問題。 6.2 啟動 ppp 登入到 slave 帳戶,并執行:sudo /usr/sbin/pppd passive 此時,如果工作正常你應該會看到一些亂碼。假設,沒有出現亂碼,不是 sudo 就是 pppd 有問題。請參考,記錄檔、/etc/ppp/options 、和 .ppprc ,等檔案 ,以便找出是那個命令出了問題。問題排除後,將 'passive' 這個字寫到 .ppprc 里,然 後再試一次。以壓下 enter、'~'、和 '^Z'等按鍵的方式,清除 螢幕上的亂碼,繼續 工作。現在,你應該會看到 master 的“輸入提示符 號(prompt)”,然後執行 kill %1 。如果你想知道更多有關“逸出字元(escape character)”的說明,請參閱“調整(tuning)” 那一節。 6.3 一次完成兩個動作 當然,你也可以這麼做 ssh -l slave polanski sudo /usr/sbin/pppd 如果工作正常,它就會當著你的面,傳送一些看似亂碼的資料。 6.4 Pty 的重導功能 這次,我們試著重導上面的動作:/usr/local/bin/pty-redir /usr/bin/ssh -l slave polanski sudo /usr/sbin/pppd 好長的句子,不是嗎?你應該使用 ssh 執行檔的完全路徑名稱,為了安全的理由 ,pty-redir 程式只允許你使用這種方式。現在,你會透過這個程式取得一個裝 置名稱。假設,你取得的 是 /dev/ttyp0 。你可以使用 ps 命令來檢視目前的狀 況。請找尋 'p0' 這個裝 置的相關敘述。 6.5 這個裝置上面,會有些什麼東西? 試著執行/usr/sbin/pppd /dev/ttyp0 local 192.168.0.1:192.168.0.2 來建立連線。然後,檢視 ifconfig 命令的輸出結果,看是否已經建立了這個裝 置,然後 ,使用 ping 來檢查你的虛擬網路。 6.6 設定路由 除了設定主防火墻主機的路由,次防火墻主機也要設定。現在,你應該能夠從公 司的一個 內部網路上的主機,ping 到其它內部網路上的主機。接著,設定額外 的防火墻規則。現 在,你已經擁有了 VPN 的環境,你可以設定公司兩個內部網 路之間的連接規則。 7. 調整7.1 設定的調整 正如我所說的,這份文件只是我個人設定 VPN 的備忘錄而已。設定中有部分的內 容,我還 未測試過。等到我測試過後,會給它們正確的定位,或有任何人告訴我 “它是如何工作的” 。有個最重要的事情大家必須銘記在心,ppp 網路連線尚未 使用 8-bit。我自己也覺得 ssh 或 pty 的設定,一定還有要加強的地方。在 ssh 的設定中,使用了“顎化符號(tilde)” (~) 字元做為逸出字元。它可以停 止或減緩兩端之間的通訊,當任何的“新行符號- 顎化符號(newline-tilde)”逸 出順序的出現,會使得 ssh 跳到輸入提示符號的模式。ssh 的文件上說: < 在 大部分的系統上,若設定不使用逸出字元,則就算是你使用了 tty ,也會造成通 訊對話的透通化。> 這個功能相對於 ssh 的選項標記是 '-e' ,你也可以在設定 檔中設定它。 7.2 頻寬與安全誰重要 不論建置任何的虛擬網路,都會浪費掉實際資源。VPN 會吃掉頻寬和計算的資源 。你的目標 應該是如何取得雙贏的局面。你可以使用 '-C' 開關或 'CompressionLevel' 選項,來調整 它。你也以嘗試使用另一種加密法,但是, 我并不建議這麼做。也請注意,如果你使用越高 的壓縮等級,你傳送資料的來回 時間就越長。歡迎提供任何相關的測試報告。 8. 分析易受攻擊的弱點 我試著在此處說明一下,這個特別的設定和 VPNs 一般有那些易受攻擊的弱點。 熱誠地歡迎 各位發表任何意見。 * sudo 程式:我承認,我過度地使用了 sudo。我深信目前它仍然比使用 setuid bits 還安全。Linux 上仍然沒有好的存取控制機制,是個不爭的事 實。只有等到相容 POSIX.6 標準的核心正式發行了< http://www.xarius.demon.co.uk/software/posix6/>。更 糟糕的是,我居 然透過 sudo 來呼叫執行 shell 的命令稿程式。實在糟糕透了。你有任何 建議麼? * pppd 程式:它也會使用 suid root (譯注) 的執行方式。你可以透過使用者 的 .ppprc 來設定它。留心,它可能會有“緩沖區超限運轉(buffer overrun)”的狀況發生。底限是 :盡可能地保護你的 slave 帳戶的安全性 。 * ssh 程式:當心,ssh 在 1.2.20 以前的版本有安全的漏洞。更糟糕的是, 我們的 設定是,當我們對 master 帳戶的安全性做出了讓步,相對地,也棄 守了 slave 帳戶的安 全底限,而且,我們使用了兩個透過 sudo 啟動的程 式,也大開了攻擊之門。那是因為,為 了能夠自動設定 VPN,我們選擇讓 master 使用沒有密碼的“私人鑰匙(secret key)”。 * firewall 程式: bastion 主機上的防火墻,若規則設定的不恰當,就等於 是大開公 司內部網路的方便之門。我建議大家使用 IP“偽 裝(Masquerading)”的技術(此時,就算是 路由設定不正確,所造成的影響 也是微不足道的),以及,在 VPN 的界面上做嚴格的控制 。 譯注: suid root 是指任何執行該程式的人,在執行的當時會取得 root 的權限 。其中,suid( 設定使用者識別代碼)是指設定檔案屬性的第 11 個位元,讓執 行該檔案的人,成為檔案的 擁有者。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -