Next Previous Contents

4. 其它 IP Masquerade 的問題及軟體支援

4.1 IP Masquerade 的問題

某些協定現在無法配合 masquerading 使用,因為它們不是假設有關埠號的一些事情,就是在位址及埠號的資料流裡編碼資料 - 後面這些協定需要在 masquerading 程式碼裡建立特定的代理程式使它們能運作。

4.2 進入系統的服務(incoming services)

Masquerading 完全不能處理外界的服務請求 (incoming services)。 只有極少方法能允許它們,但這完全與 masquerading 無關,而且實在是標準的防火牆方式。

如果你並不要求高度的安全性那麼你可以簡單地重導(redirect)這些埠。 有幾種不同的方法可以做這件事 - 我使用一隻修改過的 redir 程式(我希望這隻程式很快就能從 sunsite 及其 mirrors 取得)。 如果你希望能夠對外界進入系統的服務請求有某種程度的身分驗認(authorisation) 那麼你可以在 redir 的頂層(0.7 or above) 使用 TCP wrappers 或是 Xinetd 來允許特定 IP 位址通過,或使用其它的工具。TIS 防火牆工具集是尋找工具及資訊的好地方。

更多的詳節可在 IP Masquerade Resource 找到。

將會加上一小節更多關於轉送服務的的資訊。

4.3 已支援的客戶端軟體以及其它設定方面的注意事項

** 下面的列表將不再被維護了。可經由 Linux IP masquerading 運作的應用程式請參考 這裡IP Masquerade Resource 以取得進一步的細節。 **

一般說來,使用傳輸控制協定(TCP) 或是使用者定義資料協定 (UDP)的應用程式應該都能運作。 如果你有任何關於應用程式與 IP Masquerade 相容的建議,提示或問題,請拜訪由 Lee Nevo 維護的 可與 Linux IP masquerading 運作的應用程式 網頁。

可以使用的客戶端軟體

一般客戶端軟體

HTTP

所有有支援的平臺,瀏覽網頁

POP & SMTP

所有有支援的平臺,電子郵件軟體

Telnet

所有有支援的平臺,遠端簽入作業

FTP

所有有支援的平臺,配合 ip_masq_ftp.o 模組(不是所有站台都能配合各種客戶端軟體;例如某些不能使用 ws_ftp32 觸及的站臺卻能使用 netscape 進入)

Archie

所有有支援的平臺,檔案搜尋軟體(並非所有 archie 客戶端軟體都支援)

NNTP (USENET)

所有有支援的平臺,網路新聞軟體

VRML

Windows (可能所有有支援的平臺都可以),虛擬實境瀏覽

traceroute

主要是 UNIX 系列的平臺,某些變種可能無法運作

ping

所有平臺,配合 ICMP 修補檔

anything based on IRC

所有有支援的平臺,配合 ip_masq_irc.o 模組

Gopher client

所有有支援的平臺

WAIS client

所有有支援的平臺

多媒體客戶端軟體

Real Audio Player

Windows, 網路資料流音訊,配合載入 ip_masq_raudio 模組

True Speech Player 1.1b

Windows, 網路資料流音訊

Internet Wave Player

Windows, 網路資料流音訊

Worlds Chat 0.9a

Windows, 客戶-伺服端立體交談(3D chat) 程式

Alpha Worlds

Windows, Windows, 客戶-伺服端立體交談(3D chat) 程式

Powwow

Windows, 點對點文字聲音白板通訊,如果你呼叫別人,人們可以與你交談,但是他們不能呼叫你。

CU-SeeMe

所有有支援的平臺,配合載入 cuseeme 模組,詳細細節請參 閱 IP Masquerade Resource

VDOLive

Windows, 配合 vdolive 修補檔

注意: 即使不是由你呼叫別人,使用 ipautofw 套件某些客戶端軟體像是 IPhone 以及 Powwow 可能還是可以運作(參閱 4.6 節)

其它客戶端軟體

NCSA Telnet 2.3.08

DOS, 包含 telnet, ftp, ping 等等的一組套件。

PC-anywhere for windows 2.0

MS-Windows, 經由 TCP/IP 遠端遙控 PC ,只有在作為客戶端而非主機端的情形下才能運作

Socket Watch

使用 ntp - 網路時間協定

Linux net-acct package

Linux, 網路帳號管理套件

無法使用的客戶端軟體

Intel Internet Phone Beta 2

可以連上但聲音只能單向(往外)傳送

Intel Streaming Media Viewer Beta 1

無法連上伺服器

Netscape CoolTalk

無法連接對方

talk,ntalk

這將不會運作 - 需要撰寫一份核心代理程式。

WebPhone

目前無法運作(它做了不合法的位址假設)。

X

沒有測試過,但我想除非有人建立一套 X 代理程式否則它無法運作,這可能是 masquerading 程式碼之外的一個外部程式。一個讓它運作的方式是使用 ssh 作為鏈結並且使用其內部的 X 代理功能來執行!

已測試過可以作為其它機器的平臺/作業系統

基本上,所有支援 TCP/IP 而且允許你指定匣道器/路由器(gateway/router)的作業系統都應該能和 IP Masquerade 一起工作。

4.4 IP 防火牆管理 (ipfwadm)

這一節提供關於 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。個人的選擇最重要。

4.5 IP 防火牆鏈 (ipchains)

這個主要是給 2.2.x 核心使用的防火牆規則管理工具(加上一個修補檔後也可在 2.0.x 上運作)。

我們會儘快更新此節,給一些使用 ipchains 的範例。

細節請參考 Linux IP Firewalling Chains page 以及 Linux IPCHAINS HOWTO

4.6 IP Masquerade 以及需求式撥接(Demand-Dial-Up)

  1. 如果你想把網路設定成自動撥接上網際網路,那麼 diald demand 撥接套件將會是很棒的工具。
  2. 要設定 diald, 請查看 Setting Up Diald for Linux Page 網頁
  3. 一旦 diald 以及 IP masq 設定完成,你可以在任何客戶端機器上啟動 web, telnet 或是 ftp 連線。
  4. Diald 將會偵測到進入系統的請求,然後撥接到你的 ISP 並建立連線。
  5. 第一次連線將會發生逾時(timeout) 的情形。如果你使用類比式的數據機那這是無可避免的。 建立數據機連結以及 PPP 連線所花費的時間將會使你的客戶端軟體不耐。 如果你使用 ISDN 連線那這是可以避免的。你得做的只是結束客戶端軟體現行的程序再重新啟動即可。

4.7 IPautofw 封包轉送程式

IPautofw 是一個給 Linux masquerading 使用的一般性 TCP 及 UDP 轉送程式。一般使用需要 UDP 的套件的時候,需要載入特定的 ip_masq 模組;ip_masq_raudio, ip_masq_cuseeme,... Ipautofw 以更一般化的方式運作,它將會轉送包含這些應用程式特定模組都不會轉送的任何資料流型態。如果沒有正確地管理這可能造成安全上的漏洞。

4.8 CU-SeeMe 與 Linux IP-Masquerade 的簡短說明

Michael Owings 所提供。

簡介

本節解釋讓 CU-SeeMe (包括 Cornell 及 White Pine 版本) 與 Linux 的 IP 偽裝功能一起運作的方法。

CU-SeeMe 是一個桌上視訊會議的軟體,有 Windows 及 Macintosh 兩種客戶端。 一個免費的版本可從 Cornell University 取得。商業的加強版可從 White Pine Software 取得。

IP 偽裝允許一部或更多部在區域網路上的工作站"偽裝"在一部連接到網際網路的 Linux 主機之後。 區域網路內的工作站可以幾乎透通地取用網際網路,即使它沒有合法的 IP 地址。 Linux 主機重寫從內部網路到網際網路的外送封包,使它們看起來就像是從這部 Linux 機器發出的一樣。 送進來的回應封包也被改寫並轉送至內部網路的正確工作站上。 這項安排使得許多網際網路的應用程式可以透通地從內部網路的工作站上執行。 然而,對某些應用程式來說(像 CU-SeeMe), Linux 的偽裝程式需要一些小技巧的輔助才能使得封包轉送得以正確運作。 這些輔助技巧通常來自於某些特殊的核心可載入模組。 關於 IP-Masquerading 的更多資訊,請參考 The Linux IP Masquerading Website

讓它運作

首先你需要適當地配置核心。你應該加入 IP-Masquerading 及 IP AutoForwarding 的完整支援。IP Autoforwarding 出現在 2.0.30 及其後的核心選項 -- 更早的核心你需要修補檔。 參見 Linux IP Masquerade Resource 關於 IP-Autoforwarding 的資訊指引。

接下來,你要取得最新版本的 ip_masq_cuseeme.c。 這可經由匿名 FTP 從 ftp://ftp.swampgas.com/pub/cuseeme/ip_masq_cuseeme.c 取得。 這個新的模組也已經加入 2.0.31 的核心之中。你可以用新的版本來取代核心中的版本。 ip_masq_cuseeme.c 通常位於 Linux 核心原始碼的 net/ipv4 目錄中。 你必須編譯並安裝此模組。

接下來,你必須建立 UDP 埠號 7648-7649 的自動轉送如下:

ipautofw -A -r udp 7648 7649 -c udp 7648 -u
ipautofw -A -r udp 7648 7649 -h www.xxx.yyy.zzz 

第一個形式允許呼叫利用埠號 7648 (主要的 cu-seeme 埠號)進出工作站。 第二個使用 ipautofw 的方式僅允計 cu-seeme 進出 www.xxx.yyy.zzz。 我較喜歡前面這種形式,因為它更有彈性而且沒有必要指定一個特別的工作站 IP。 然而,這個方式會要求一工作站能收到呼叫前先送出呼叫。

注意這兩種方式都將客戶端機器的 UDP 埠號 7648-7649 開放給外界 -- 雖然這不至於有嚴重的安全危險,你還是應特別小心。

最後,以下法載入新的 ip_masq_cuseeme 模組:

modprobe ip_masq_cuseeme 

現在你可以從你區域網路上一部被偽裝的機器上執行 CU-SeeMe 並連接到遠端的回應器(reflector)上,或另一個 CU-SeeMe 的使用者。 你應該也可以收到呼叫。注意外界的呼叫者必須使用你 Linux 匣道器的 IP, 而不是被偽裝工作站的 IP。

限制/警告

密碼保護的回應器

目前沒有任何辦法使用。 White Pine 使用來源 IP (由客戶端程式計算)在傳送前將密碼編碼保護。 因為我們改寫了位址,回應器使用錯誤的來源 IP 來解碼,因此得到不正確的密碼。 除非 White Pine 改變他們密碼編碼的策略(我已經建議過了),或是他們願意開放他們密碼編碼的公式以便讓我能加到 ip_masq_cuseeme。 由於後面一個辦法的可能性很小,因此我非常鼓勵看到這份文件的人與 White Pine 聯絡並建議他們採用前一種作法。 因為本頁的流量相當滿高的,我懷疑我們能否產生足夠的電子郵件以使此問題能進入 White Pine 的優先處理名單中。

感謝 Thomas Griwenka 提醒我這件事。

執行回應器

你不能嘗試在你跑 ip_masq_cuseeme 及 ipautoforwarding 埠號 7648 的相同機器上執行回應器(reflector)。 這沒有用,因為兩者都需要配置埠號 7648。 或者用另一部可直達網際網路的主機來執行,或是在執行回應器前卸下 CU-SeeMe 的客戶端支援。

多 CU-SeeMe 使用者

你不能一次有多位 CU-SeeMe 使用者同時在一個區域網路上面。 這是由於 CU-SeeMe 頑固地堅持使用埠號 7648, 使得在區域網路內一次僅能有一台工作站能(容易地)被重導向。

使用 -c (control port) 來呼叫 ipautofw, 你可以避免指定一固定的工作站位址去使用 CU-SeeMe -- 第一部使用控制埠號 7648 送出任何東西的工作站會被指定為接收來自埠號 7648-7649 的流量。 如果經過五分鐘左右這部工作站不再使用埠號 7648, 另一部工作站就可接著使用。

協助設定 CU-SeeMe

若有任何評論或問題請寫信到 mikey@swampgas.com。 或者如果你願意的話,你可以 透過 CU-SeeMe 來呼叫我

4.9 其它相關工具

我們會儘快更新此節加上更多其它偽裝相關的工具如 ipportfw 以及 masqadmin。


Next Previous Contents