Bridge

BRIDGE

二個網域中間的連接器,可以用路由器 (router)、閘道、或是橋接器的方式來實作,再在該機器上設定防火牆的規則。

我們舉二種最常被應用結合防火牆設定來保護整個網路的方法,一個是 NAT,另一個是具封包過濾的橋接器。

12.1.1 NAT

所謂的 NAT 就是 (Network Address Translation),它可以讓你在只有一個 IP 的情形下讓多台電腦一起連上網路。舉個實例而言,一個公司有三十台電腦,而 ISP 所提供的 ADSL 卻只有八個實體 IP,這種情況下,我們可以將每台電腦的 IP 設定為 private IP,再讓它們經由一台有實體 IP 的 NAT 伺服器連上網路即可。

Private IP 是 RFC 所定義的私人 IP,這些 IP 不能夠直接在網際網路中出現,所以必需經由 NAT 的轉換,將它們偽裝成是由 NAT 伺服器連向外部網路。這些可以用的私人 IP 如下:

Class範圍子網路遮罩
Class A10.0.0.0 ~ 10.255.255.255255.0.0.0
Class B172.16.0.0 ~ 172.31.255.255255.255.0.0
Class C192.168.0.0 ~ 192.168.255.255255.255.255.0

我們只需在 NAT 伺服器中做好設定,再將其他使用 private IP 的電腦設定 gateway 為該伺服器的 IP 即可。另外,我們也可以在伺服器中設定一些防火牆的規則,來保全內部網路。

12.1.2 具封包過濾的橋接器

如果我們的網路中有多台不同網域的電腦,這些電腦都有它們的 IP 及網路設定,我們可以將 FreeBSD 設定成為橋接器 (bridge),讓這台橋接器作封包過濾的工作。這種做法對於網域內其他電腦原本的網路設定不會有影響,如果沒有設定任何防火牆規則,對它們而言幾乎不會發現橋接器的存在。我們可以使用橋接器來過濾同一個網域內的網路交通,如果您有一個很大的網域,想要降低同一網域內彼此網路封包的交互影響,卻又不想將這個大網域分割成數個小網域,您可以使用具封包過濾功能的橋接器來達成網路封包分割的功能。 我們也可以使用路由器來取代橋接器,但是路由器只能遶送二個不同網域,而且設定比較複雜,因此,我會使用橋接器來做為防火牆。

12.2.5 NAT Port Forwarding

NAT 還有一個功能叫作 Port Forwarding,它的用途在於從連到本機的封包導向到別的電腦或本機其他連接埠。例如,我們對外有一台防火牆,在 DNS 設定方面,我們設定了 ftp.mydomain.com 及 www.mydomain.com 都指向這台防火牆。但我們希望所有 HTTP 連線都重新導向到內部的 192.168.0.2 這台機器上,而所有 FTP 連線都交由 192.168.0.3 來處理。這時候我們就可以使用 port forwarding 的方式來達成。

首先,我們知道 HTTP 使用 TCP 協定 port 80,而 FTP 使用了 TCP 協定 port 20 及 port 21,接著我們就可以在 /etc 目錄下新增一個 NAT 的設定檔,名為 natd.conf,並編輯內容如下:

redirect_port tcp 192.168.0.2:80 80
redirect_port tcp 192.168.0.3:20 20
redirect_port tcp 192.168.0.3:21 21

第一行的目的就是將 port 80 的 tcp 連線重新導向到 192.168.0.2 的 port 80,而二、三行是將 port 20 及 port 21 的連線交由 192.168.0.3 來處理。在 192.168.0.2 及 192.168.0.3 這二台機器上,我們只要設定它們的 gateway 為防火牆的 IP,例如 192.168.0.1 即可。

接下來我們必須在 /etc/rc.conf 中加入下列這一行,讓 natd 在啟動時能讀取 /etc/natd.conf 的設定:

natd_flags="-f /etc/natd.conf"

重新啟動後,您就可以進行測試了。假設防火牆的對外 IP 是 11.22.33.44,當我們從外部網路使用 HTTP 連線到該 IP 時,雖然該伺服器並未架設 HTTP server,但你卻可以看到網頁,表示網路封包有被重導至內部的另一台伺服器。

小提示

Port Forwarding 的功能是將外部連線轉向到內部的電腦。所以,如果您從內部電腦連到 NAT 伺服器時,並不會被轉向到內部 IP 喔。

12.3.3 一些小建議

在建立一個封包過濾的防火牆時,應該盡可能阻擋一些不必要的服務。避免開放 port 1024 以下的 TCP 服務,例如只通過 SMTP 封包 (port 25) 給郵件伺服器;拒絕所有 UDP 連線 (只有少部份服務如 NFS 會用到);一些只有內部才會使用的服務,如資料庫等也不必對外開放。

另外,同樣的防火牆限制可以使用不同的語法來展現,應該要試著讓規則數量越少越好,以加快處理速度。

在更新 firewall 規則時,如果規則沒有寫好,而你又是以遠端登入的方式修改規則,很可能會因此無法繼續登入。因此建議更新規則時最好在 console 前執行,若迫不得已一定要使用遠端登入,建議您執行 /usr/share/examples/ipfw/change_rules.sh 這支程式來編輯規則:

# cd /usr/share/examples/ipfw
# sh change_rules.sh

接著會出現文書編輯軟體並最動載入 /etc/rc.firewall 讓你編輯,結束離開後,會詢問是否要執行更新。如果執行新的規則後造成斷線,它會自動載入舊的規則,讓我們可以再次連線。

12.4 封包過濾橋接器

如果您有三台機器全部都有 public IP,而您想使用其中一台做為防火牆,在不改變另外二台機器的設定下,我們可以使具封包過濾的橋接器來架設防火牆。只要將這台橋接器放在另外二台和對外網路之間即可。

另外,當我們的內部網路有不同 class 的主機時,例如內部有 140.115.2.3 及 140.115.5.6 這二台電腦時,就無法使用傳統的防火牆。如果要在這二台機器連到網際網路中途中使用防火牆,我們必須使用新的方式,也可以使用這裡介紹的橋接器。

我們可以使用 FreeBSD 為橋接器,利用它來做封包過濾的動作,而絲毫不影響內部的主機原本的設定。為了達到這個功能,我們必需要有二張支援 promiscuous mode 的網路卡,現在的網路卡大部份都有支援。二張網路卡當中,一張需要設定 IP,另一張不需要。至於您要將 IP 設定在哪一張卡都可以,建議是設在對外的網路卡上。