某些協定現在無法配合 masquerading 使用,因為它們不是假設有關埠號的一些事情,就是在位址及埠號的資料流裡編碼資料 - 後面這些協定需要在 masquerading 程式碼裡建立特定的代理程式使它們能運作.
Masquerading 完全不能處理外界的服務請求 (incoming services). 只有極少方法能允許它們,但這完全與 masquerading 無關,而且實在是標準的防火牆方式.
如果你並不要求高度的安全性那麼你可以簡單地重導(redirect)這些埠. 有幾種不同的方法可以做這件事 - 我使用一隻修改過的 redir 程式(我希望這隻程式很快就能從 sunsite 及其 mirrors 取得). 如果你希望能夠對外界進入系統的服務請求有某種程度的身分驗認(authorisation) 那麼你可以在 redir 的頂層(0.7 or above) 使用 TCP wrappers 或是 Xinetd 來允許特定 IP 位址通過,或使用其它的工具.TIS 防火牆工具集是尋找工具及資訊的好地方.
更多的詳節可在 IP Masquerade Resource 找到.
** 下面的列表將不再被維護了.可經由 Linux IP masquerading 運作的應用程式請參考這裡 和 IP Masquerade Resource 以取得進一步的細節. **
一般說來,使用傳輸控制協定(TCP) 或是使用者定義資料協定 (UDP)的應用程式應該都能運作. 如果你有任何關於應用程式與 IP Masquerade 相容的建議,提示或問題,請拜訪由 Lee Nevo 維護的 可與 Linux IP masquerading 運作的應用程式 網頁.
一般客戶端軟體
所有有支援的平臺,瀏覽網頁
所有有支援的平臺,電子郵件軟體
所有有支援的平臺,遠端簽入作業
所有有支援的平臺,配合 ip_masq_ftp.o 模組(不是所有站台都能配合各種客戶端軟體;例如某些不能使用 ws_ftp32 觸及的站臺卻能使用 netscape 進入)
所有有支援的平臺,檔案搜尋軟體(並非所有 archie 客戶端軟體都支援)
所有有支援的平臺,網路新聞軟體
Windows (可能所有有支援的平臺都可以),虛擬實境瀏覽
主要是 UNIX 系列的平臺,某些變種可能無法運作
所有平臺,配合 ICMP 修補檔
所有有支援的平臺,配合 ip_masq_irc.o 模組
所有有支援的平臺
所有有支援的平臺
多媒體客戶端軟體
Windows, 網路資料流音訊,配合載入 ip_masq_raudio 模組
Windows, 網路資料流音訊
Windows, 網路資料流音訊
Windows, 客戶-伺服端立體交談(3D chat) 程式
Windows, Windows, 客戶-伺服端立體交談(3D chat) 程式
Windows, 點對點文字聲音白板通訊,如果你呼叫別人,人們可以與你交談,但是他們不能呼叫你.
所有有支援的平臺,配合載入 cuseeme 模組,詳細細節請參 閱 IP Masquerade Resource
Windows, 配合 vdolive 修補檔
注意: 即使不是由你呼叫別人,使用 ipautofw 套件某些客戶端軟體像是 IPhone 以及 Powwow 可能還是可以運作(參閱 4.6 節)
其它客戶端軟體
DOS, 包含 telnet, ftp, ping 等等的一組套件.
MS-Windows, 經由 TCP/IP 遠端遙控 PC ,只有在作為客戶端而非主機端的情形下才能運作
使用 ntp - 網路時間協定
Linux, 網路帳號管理套件
可以連上但聲音只能單向(往外)傳送
無法連上伺服器
無法連接對方
這將不會運作 - 需要撰寫一份核心代理程式.
目前無法運作(它做了不合法的位址假設).
沒有測試過,但我想除非有人建立一套 X 代理程式否則它無法運作,這可能是 masquerading 程式碼之外的一個外部程式.一個讓它運作的方式是使用 ssh 作為鏈結並且使用其內部的 X 代理功能來執行!
這一節提供關於 ipfwadm 更深入的使用指引.
這是一個給在固定 PPP 位址之 PPP 連線後面的防火牆/偽裝系統使用的設定.信賴(trusted) 界面為 192.168.255.1, PPP 界面已經修改過以避免犯錯 :) .我分別列出每一個進入(incoming)以及送出(outgoing)界面來抓出變更遞送路徑(stuffed routing) 以及/或是偽裝(masquerading)等等這些個 IP spoofing 技巧.同時任何沒有明確允許的東西都是禁止的!
#!/bin/sh # # /etc/rc.d/rc.firewall, 定義防火牆配置,從 rc.local 執行. # PATH=/sbin:/bin:/usr/sbin:/usr/bin # 測試用,等待一段時間然後清除所有的防火牆規則. # 如果你希望防火牆十分鐘之後自動關閉就取消下列幾行的註解. # (sleep 600; \ # ipfwadm -I -f; \ # ipfwadm -I -p accept; \ # ipfwadm -O -f; \ # ipfwadm -O -p accept; \ # ipfwadm -F -f; \ # ipfwadm -F -p accept; \ # ) & # 進入偽裝閘道的設定,更新以及設定拒絕的策略(policy).事實上 # 預設的策略沒什麼關係,因為原先就希望拒絕以及記錄所有規則 ipfwadm -I -f ipfwadm -I -p deny # 偽裝閘道的本地(local) 界面,區域網路裡的機器,允許連往任何 # 地方 ipfwadm -I -a accept -V 192.168.255.1 -S 192.168.0.0/16 -D 0.0.0.0/0 # 偽裝閘道的遠端(remote)界面,聲稱是區域網路裡的機器,IP spoofing # 拒絕 ipfwadm -I -a deny -V your.static.PPP.address -S 192.168.0.0/16 -D 0.0.0.0/0 -o # 偽裝閘道的遠端界面,任何來源,允許送往固定 (permanent) PPP # 位址 ipfwadm -I -a accept -V your.static.PPP.address -S 0.0.0.0/0 -D your.static.PPP.address/32 # 回授(loopback)界面是允許的 ipfwadm -I -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0 # 捕捉所有規則,任何其它的進入方式都會被拒絕並記錄.可惜沒有 # 記錄用的選項但這可以代替 ipfwadm -I -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o # 送出偽裝閘道的設定,更新以及設定拒絕的策略(policy).事實上 # 預設的策略沒什麼關係,因為原先就希望拒絕以及記錄所有規則 ipfwadm -O -f ipfwadm -O -p deny # 本地界面,允許任何來源送出至區域網路 ipfwadm -O -a accept -V 192.168.255.1 -S 0.0.0.0/0 -D 192.168.0.0/16 # 遠端界面送出至區域網路,stuffed routing ,拒絕 ipfwadm -O -a deny -V your.static.PPP.address -S 0.0.0.0/0 -D 192.168.0.0/16 -o # 區域網路的機器從遠端界面送出,stuffed masquerading,拒絕 ipfwadm -O -a deny -V your.static.PPP.address -S 192.168.0.0/16 -D 0.0.0.0/0 -o # 區域網路的機器從遠端界面送出,stuffed masquerading,拒絕 ipfwadm -O -a deny -V your.static.PPP.address -S 0.0.0.0/0 -D 192.168.0.0/16 -o # 任何其它遠端界面送出的東西都是允許的 ipfwadm -O -a accept -V your.static.PPP.address -S your.static.PPP.address/32 -D 0.0.0.0/0 # 回授(loopback)界面是允許的 ipfwadm -O -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0 # 捕捉所有規則,任何其它的送出方式都會被拒絕並記錄.可惜沒有 # 記錄用的選項但這可以代替 ipfwadm -O -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o # 偽裝閘道的轉送設定,更新以及設定拒絕的策略(policy).事實上 # 預設的策略沒什麼關係,因為原先就希望拒絕以及記錄所有規則 ipfwadm -F -f ipfwadm -F -p deny # 偽裝區域網路的機器從本地界面送出至任何地方的資料 ipfwadm -F -a masquerade -W ppp0 -S 192.168.0.0/16 -D 0.0.0.0/0 # 捕捉所有規則,任何其它的轉送方式都會被拒絕並記錄.可惜沒有 # 記錄用的選項但這可以代替 ipfwadm -F -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o
你可以使用 -I, -O 或是 -F 來控制到某特定節點的流量.記得這些規則集是由上往下掃描的而 -a 代表"附加(append)"到目前現有的規則集中所以任何限制必須在全域(global)規則之前出現.例如(沒測試過) :-
使用 -I 規則.可能是速度最快的但是它只能阻止區域網路裡的機器,防火牆本身仍然可以存取"禁止"的節點.當然你可能想允許這樣的組合.
... start of -I rules ... # 拒絕並記錄本地界面,區域網路裡的機器通往 204.50.10.13 ipfwadm -I -a reject -V 192.168.255.1 -S 192.168.0.0/16 -D 204.50.10.13/32 -o # 本地界面,區域網路裡的機器,允許通往任何地方 ipfwadm -I -a accept -V 192.168.255.1 -S 192.168.0.0/16 -D 0.0.0.0/0 ... end of -I rules ...
使用 -O 規則.最慢,因為封包首先經過偽裝但這個規則阻止防火牆存取禁止的節點.
... start of -O rules ... # 拒絕並記錄送出至 204.50.10.13 的資料 ipfwadm -O -a reject -V your.static.PPP.address -S your.static.PPP.address/32 -D 204.50.10.13/32 -o # 允許任何其它遠端界面送出的東西 ipfwadm -O -a accept -V your.static.PPP.address -S your.static.PPP.address/32 -D 0.0.0.0/0 ... end of -O rules ...
使用 -F 規則.可能比 -I 慢而這仍然只能阻止偽裝的機器(例如內部的機器),防火牆仍然可以取得禁止的節點.
... start of -F rules ... # 拒絕並記錄 PPP 界面送出從區域網路到 204.50.10.13 的資料. ipfwadm -F -a reject -W ppp0 -S 192.168.0.0/16 -D 204.50.10.13/32 -o # 偽裝本地界面從區域網路送出至任何地方的資料. ipfwadm -F -a masquerade -W ppp0 -S 192.168.0.0/16 -D 0.0.0.0/0 ... end of -F rules ...
不需要有個特定的規則來允許 192.168.0.0/16 通往 204.50.11.0, 這涵蓋於全域規則中.
有一種以上的方法可以對界面設定上述規則.例如可以使用 -W eth0 來取代 -V 192.168.255.1,可以使用 -W ppp0 來取代 -V your.static.PPP.address.個人的選擇最重要.
IPautofw 是一個給 Linux masquerading 使用的一般性 TCP 及 UDP 轉送程式.一般使用需要 UDP 的套件的時候,需要載入特定的 ip_masq 模組;ip_masq_raudio, ip_masq_cuseeme,... Ipautofw 以更一般化的方式運作,它將會轉送包含這些應用程式特定模組都不會轉送的任何資料流型態.如果沒有正確地管理這可能造成安全上的漏洞.