Solaris 10 OS ( IPFilter and NAT) 設定

作者:Andrew Choi (蔡健發)

Since : 18 Oct 2006

Version : 1.1

Last Update : 20 Oct 2006


聲明:任何形式的摘抄必須保留上述作者和http地址

Solaris 10 OS ( IPFilter and NAT ) 設定

  1. 前言
  2. 相關網站
  3. 硬件要求
  4. 安裝 IP Filter
  5. 在 Solaris 10 上設定 IP Filter
  6. 啟動 IP Filter 服務
  7. 測試
  8. 其它 IP Filter 深入設定技巧
  9. 使用 PHP 和 MySQL 來管理 IP Filter

前言:

NAT 和 IPFilter ,相信很多人都知道是什麼來的。

如果你不太清楚這是什麼? 這個連結的前言,應該可以理解是什麼來的。http://solaris.tophk.net/nat/index.htm

簡單點說,就是可以利用它們來把 Solaris 當成 NAT Router 使用,而且還可的使用 Firewall 、 Port Forward 和 封鎖 Port 的功能,並且還可以限制那些本地 IP 的上網權限和指定那些網站不能通訊。

總括來說,就是對外和對內都可以受到 IPFilter 來管理限制。 但同時,也會影響 Solaris 本身對外的功能。 E-mail 、 NFS 、 DNS 、 Apache 和 Ftp server 也不例外。

試想想,如果你有一個網站,只想給全世界的分公司看,但又不想對外開放,這個時候,IPFilter 可說是一個又簡單,又好用的方法。

當然,還有很多不同的應用方法。

Solaris 10 OS 版本中,已經內置了 IPFilter。所以,本文的主要目標是介紹,如何在 Solaris 10 OS 中啟動和使用 IPFilter和 NAT 的基本功能。

到最後,文中會有一些在不同要求下的設定技巧。

P.S. NAT = Network Address Translation

相關網站:

IP Filter
for Network Address Translation. http://coombs.anu.edu.au/~avalon

Setting Up NAT on Solaris Using IP Filter
http://www.rite-group.com/rich/solaris_nat.html

硬件要求:

跟據經驗,NAT需要使用兩張網卡才能正常使用 ( 使用虛擬網卡是不能正常操作的,例如:hme0 和 hme0:1 的情況。)

但是,還有例外的情況。例如把網卡接到 Hub 上,然後再用 pppoe 撥接功能,這樣,你使用 ifconfig -a 來查看網卡的時候,你便會發現多了一個 ppp0的網卡。這樣把 hme0 和 ppp0來當成兩張網卡都免強以。

我是使用 hme1 接到 Router 或 Cable Modem 上,hme0 就接到 Local Network 上。 hme0 的 IP address 已經定址好(192.168.10.1)可跟 Local Network 通訊。hme1 定址成真實 IP adderess ( 202.134.116.34 )

目標是 hme1 用來對外的,而 hme0 用來對內。當然,你不一定像我這樣設定,只不過在說明起來時簡單一點。因為這樣 hme1 在設定上一開始可以上網。我不想給 pppoe 或其它上網連接方法攪亂本文章。

備注:在系統中使用不同的網卡,網卡的名稱都會不相同。

我的例子是 hme,但還有很多種類的。

例如: iprb、elxl、e1000g、bge、nf、fa、ci、el、ipdptp、lane、dnet、pcelx、spwr和pcn 等。

所以,跟本就不可能在本文中說明不同網卡安裝在 Solaris 後會使用什麼網卡名稱,所以你必須要對 Solaris 的基本設定有了解才能明白現在做什麼。

本文的例子中,會使用 hme 的網卡名稱來作為舉例。

安裝 IP Filter:

在 Solaris 10 OS 上,不需要再安裝 IP Filter 了,Solaris 10 已經內建了 IP Filter,所以,只要做一些設定就可以使用。

在舊版本的 Solaris 10 系統上是需要自行下載和安裝 IP Filter 的。

在 Solaris 10 上設定 IP Filter :

本文的例子會使用 hme1 作為對外, hme0 作為對內。所以你一定要肯定你的 Solaris 系統能透過 hme1 上網及對外通訊。如果可以的話, hme1 連接的網絡上不要有任何 Firewall 或 安全性封鎖,被免因為這些問題而出現測試錯誤的情況出現。

檢查 IP forwarding 功能是否打開:

SHELL> routeadm

              Configuration   Current              Current
                     Option   Configuration        System State
---------------------------------------------------------------
            IPv4 forwarding   disabled             disabled
               IPv4 routing   default (disabled)   disabled
            IPv6 forwarding   disabled             disabled
               IPv6 routing   disabled             disabled

        IPv4 routing daemon   "/usr/sbin/in.routed"
   IPv4 routing daemon args   ""
   IPv4 routing daemon stop   "kill -TERM `cat /var/tmp/in.routed.pid`"
        IPv6 routing daemon   "/usr/lib/inet/in.ripngd"
   IPv6 routing daemon args   "-s"
   IPv6 routing daemon stop   "kill -TERM `cat /var/tmp/in.ripngd.pid`"

現時的 IPv4 forwarding 的設定為 disabled,你一定要把設定改為 enable 才能啟動 IPv4 Forwarding 功能。

啟動 IP forwarding 功能:

使用以下指令就可以把 ipv4-forwarding 功能打開。

SHELL> routeadm -u -e ipv4-forwarding

'-e ipv4-forwarding' 是用來使到 ipv4-forwarding 功能啟動。而 '-u' 是用來使到 Solaris 系統在從新啟動後還會繼續啟動 ipv4_forwarding。

設定 NAT 規則:

當你把 IP forwarding 啟動後,你就需要設定 NAT (的規則。

NAT 規則在檔案 /etc/ipf/ipnat.conf 裡面。

我的對內網絡 IP 範圍為 192.168.10.1 至 192.168.10.254,所以你應該改變 hme1-> 之間的設定來迎合你的需要。 ( 注意:hme1為我的對外網卡名稱,你應該把這個名稱更改成你的對外網卡名稱,如果是 連接 pppoe 的話,很多時候名稱都是為 ppp0,但當然,你一定要啟動了 pppoe 連結才會有這個網卡名稱。)

/etc/ipf/ipnat.conf 的內容:

    map hme1 192.168.10.0/24 -> 0/32 proxy port ftp ftp/tcp
    map hme1 192.168.10.0/24 -> 0/32 portmap tcp/udp auto
    map hme1 192.168.10.0/24 -> 0/32

0/32 是一個特別功能。 hme1 的 IP address 為 202.134.116.34,正常是應該把 0/32 改為 202.134.116.34/32。但我們不需要這樣做。因為,如果 hme1 不是使用固定IP Address,而是透過 DHCP獲得 IP Address 時,那個時候,我們便要經常改變這個設定。所以,使用 0/32 由 IP Filter 自行檢查正確的 IP 位置。特別是對使用 pppoe的人,這是最好不過。

不要隨意改變以上的規則,否則其它Local Network 上的電腦便會無法正常上網。

第一行規則用來允許所有 Local Network 上的電腦可以使用 FTP 功能。

第二行規則用來 maps the source port 去到較高的範圍 (10000 to 40000 為預設)

第三行規則用來 maps 所有 TCP traffic

*** 如果有人知道上面兩行的英文如何翻譯成中文,請 E-mail 給我。

設定packets (封包) 過慮使用那張網卡

設定好 NAT 規則後,你需要通知系統那個網絡卡上使用packets (封包) 過慮。檔案 /etc/ipf/pfil.ap為設定檔。

內容:

    #le     -1      0       pfil
    #qe     -1      0       pfil
    hme     -1      0       pfil 

hme0 和 hme1 我都需要使用packets (封包) 過慮,只要把 hme -1 0 pfil 加在 /etc/ipf/pfil.ap 裡就可以,hme 後的數字是不需要的。換句話說,如果你是使用 pppoe 連線的話,名稱應該為 ppp0,所以,你只需要把 ppp -1 o pfil 加入檔案中就可以了。

啟動 IP Filter 服務:

SHELL> svcadm restart network/pfil
SHELL> svcadm restart ipfilter

若果你層經更改過 /etc/ipf/pfil.ap 的packets (封包) 過慮設定,你就需要把 Solaris 系統從新啟動或 replumb 網卡才可以正式使用 IP Filter。

replumb 方法:

我的 hme1 ip Address 為 202.134.116.34,Netmask 為 255.255.255.248。

SHELL> ifconfig hme1 unplumb
SHELL> ifconfig hme1 plumb 202.134.116.34 netmask 255.255.255.248 up

如果,你的hme1是透過 DHCP 獲得 IP 的話,可以使用以下方法。

SHELL> ifconfig hme1 unplumb
SHELL> ifconfig hme1 plumb dhcp start

最簡單的方法還是從啟 Solaris 系統。而且也有利於測試 Firewall 和 IP Filter 是否真正的正常運作。

測試:

SHELL> ifconfig -a

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000 
hme0: flags=1100843<UP,BROADCAST,RUNNING,MULTICAST,ROUTER,IPv4> mtu 1500 index 2
        inet 192.168.10.1 netmask ffffff00 broadcast 202.134.126.0
        ether 0:c:29:4:88:b8 
hme1: flags=1100843<UP,BROADCAST,RUNNING,MULTICAST,ROUTER,IPv4> mtu 1500 index 3
        inet 202.134.116.34 netmask fffffff8 broadcast 202.134.116.39
        ether 0:c:29:4:88:c2 
      

hme0 IP Address 為 192.168.10.1

hme0 是我的對內網絡。

找一台 Microsoft Windows 系統,做一些網絡設定:

IP Address = 192.168.10.2
Sub Netmask = 255.255.255.0
Gateway = 192.168.10.1
DNS Server = 202.134.105.130 或使用你喜歡的 DNS Server IP Address

用 ping 測試,是否可以 ping 到 192.168.10.1。

然後再用 ping 測試,是否可以 ping 到 對外網絡,例如: ping 218.102,23,36。

最後再試一試,能否正常上網看網頁和其它你喜愛的功能。

其它 IP Filter 深入設定技巧:

  1. 基本 NAT 設定
  2. 基本 Port Forward 的應用實例
  3. 限際網外(Internet)對網內的訪問

基本 NAT 設定

基本資料:-

ppp0 - ( 對外 ) 透過 PPP 連接到網絡供應商(ISP), IP Address 為 a.b.c.d/32

ed0 - (對內) 網絡卡, IP Address 為 w.x.y.z/32

備注: a.b.c.d/32 中的 /32 是 Sub NetMask 來的, /32 為二進的32個1即 255.255.255.255,/24 為二進的24個1即 255.255.255.0, /16 為二進的16個1即 255.255.0.0 如此類推。

如果你在 ISP 只獲得一個有效的固定 IP Address ,你可以做以下工作:

檔案 /etc/ipf/ipnat.conf 內容:

# 使到 ftp 能正常工作,使用 internal ftp proxy
map ppp0 w.x.y.z/24 -> a.b.c.d/32 proxy port ftp ftp/tcp

# 使到正常的 TCP/UDP 和其它通訊際式正常工作
map ppp0 w.x.y.z/24 -> a.b.c.d/32 portmap tcp/udp 40000:60000
map ppp0 w.x.y.z/24 -> a.b.c.d/32

如果你每次連接到 ISP時,所獲得的 IP Address都不同的話,你可以做以下工作:

檔案 /etc/ipf/ipnat.conf 內容:
map ppp0 w.x.y.z/24 -> 0/32 proxy port ftp ftp/tcp
map ppp0 w.x.y.z/24 -> 0/32 portmap tcp/udp 40000:60000
map ppp0 w.x.y.z/24 -> 0/32

如果你從 ISP 獲得一組有效的 Class C IP Address ,你可以這樣做:

檔案 /etc/ipf/ipnat.conf 內容:
map ppp0 w.x.y.z/24 -> a.b.c.d/24 portmap tcp/udp 40000:60000
map ppp0 w.x.y.z/24 -> a.b.c.d/24

或 如果你的電腦不多,也可以這樣做:

檔案 /etc/ipf/ipnat.conf 內容:
map ppp0 w.x.y.v/32 -> a.b.c.E/32 portmap tcp/udp 40000:60000
map ppp0 w.x.y.v/32 -> a.b.c.E/32
map ppp0 w.x.y.u/32 -> a.b.c.F/32 portmap tcp/udp 40000:60000
map ppp0 w.x.y.u/32 -> a.b.c.F/32
map ppp0 w.x.y.t/32 -> a.b.c.G/32 portmap tcp/udp 40000:60000
map ppp0 w.x.y.t/32 -> a.b.c.G/32
map ppp0 w.x.y.s/32 -> a.b.c.H/32 portmap tcp/udp 40000:60000
map ppp0 w.x.y.s/32 -> a.b.c.H/32
map ppp0 w.x.y.r/32 -> a.b.c.I/32 portmap tcp/udp 40000:60000
map ppp0 w.x.y.r/32 -> a.b.c.I/32
map ppp0 w.x.y.q/32 -> a.b.c.J/32 portmap tcp/udp 40000:60000
map ppp0 w.x.y.q/32 -> a.b.c.J/32
map ppp0 w.x.y.p/32 -> a.b.c.K/32 portmap tcp/udp 40000:60000
map ppp0 w.x.y.p/32 -> a.b.c.K/32

當對外網絡有人訪問 a.b.c.E 的時候,相等於訪問內網的 w.x.y.v

基本 Port Forward 的應用實例

實例一:

我希望使用 192.168.0.2 這台電腦建立一台 FTP Server,並且 Internet 以外的用戶都可以使用。

基本資料:-

pcn0 - (對外) 網絡卡, IP Address 為有效的固定 IP 202.134.116.34/32 ,並且可以對外上網通訊。

pcn1 - (對內) 網絡卡, IP Address 為虛擬 IP 192.168.0.1/24可與內部網絡通訊 (192.168.0.1 至 192.168.0.254)

Port 20 和 Port 21 為 FTP Server 專用 Port

檔案 /etc/ipf/ipnat.conf 內容:
rdr pcn0 0.0.0.0/0 port 20 -> 192.168.0.2 port 20
rdr pcn0 0.0.0.0/0 port 21 -> 192.168.0.2 port 21

把任何一個從外部 Internet IP( 0.0.0.0/0 ) 訪問 pcn0 IP 202.134.116.34 port 20 和 port 21 轉指向 ( rdr .... -> ) 內網 192.168.0.2 的 port 20 和 port 21

在 Internet 外界的眼中 202.134.116.34 為一台 FTP Server,但實際上是由另一台電腦管理。

實例二:

我希望使用 192.168.0.3 這台電腦建立一台 Web Server,並且 Internet 以外的用戶都可以使用。

基本資料:-

pcn0 - (對外) 網絡卡, IP Address 為有效的固定 IP 202.134.116.34/32 ,並且可以對外上網通訊。

pcn1 - (對內) 網絡卡, IP Address 為虛擬 IP 192.168.0.1/24可與內部網絡通訊 (192.168.0.1 至 192.168.0.254)

Port 80 為 Web Server 專用 Port

檔案 /etc/ipf/ipnat.conf 內容:
rdr pcn0 0.0.0.0/0 port 80 -> 192.168.0.3 port 80

把任何一個從外部 Internet IP( 0.0.0.0/0 ) 訪問 pcn0 IP 202.134.116.34 port 80 轉指向 ( rdr .... -> ) 內網 192.168.0.3 的 port 80

在 Internet 外界的眼中 202.134.116.34 為一台 Web Server,但實際上是由另一台電腦管理。

實例三:

我希望在家中使用 Microsoft 的 "遠端桌面連線",連接到公司中的 192.168.0.4這台 Microsoft Windows XP 電腦進行遠端操作。

基本資料:-

pcn0 - (對外) 網絡卡, IP Address 為有效的固定 IP 202.134.116.34/32 ,並且可以對外上網通訊。

pcn1 - (對內) 網絡卡, IP Address 為虛擬 IP 192.168.0.1/24可與內部網絡通訊 (192.168.0.1 至 192.168.0.254)

Port 3389 為 Microsoft "遠端桌面連線" 的專用 Port

檔案 /etc/ipf/ipnat.conf 內容:
rdr pcn0 0.0.0.0/0 port 3389 -> 192.168.0.4 port 3389

把任何一個從外部 Internet IP( 0.0.0.0/0 ) 訪問 pcn0 IP 202.134.116.34 port 3389 轉指向 ( rdr .... -> ) 內網 192.168.0.4 的 port 3389

當在家中使用 Microsoft "遠端桌面連線"連接到 IP Address 202.134.116.34 時,相等於你連接到公司的 192.168.0.4 的 Windows XP 中。

實例四:

我希望在家中使用 Microsoft 的 "遠端桌面連線",連接到公司中任何一台 Microsoft Windows XP 電腦進行遠端操作。

基本資料:-

pcn0 - (對外) 網絡卡, IP Address 為有效的固定 IP 202.134.116.34/32 ,並且可以對外上網通訊。

pcn1 - (對內) 網絡卡, IP Address 為虛擬 IP 192.168.0.1/24可與內部網絡通訊 (192.168.0.1 至 192.168.0.254)

Port 3389 為 Microsoft "遠端桌面連線" 的專用 Port

檔案 /etc/ipf/ipnat.conf 內容:
rdr pcn0 0.0.0.0/0 port 10000 -> 192.168.0.5 port 3389
rdr pcn0 0.0.0.0/0 port 10001 -> 192.168.0.6 port 3389
rdr pcn0 0.0.0.0/0 port 10002 -> 192.168.0.7 port 3389
rdr pcn0 0.0.0.0/0 port 10003 -> 192.168.0.8 port 3389
rdr pcn0 0.0.0.0/0 port 10004 -> 192.168.0.9 port 3389

把任何一個從外部 Internet IP( 0.0.0.0/0 ) 訪問 pcn0 IP 202.134.116.34 port 10000 至 10004 轉指向 ( rdr .... -> ) 內網 192.168.0.5 至 192.168.9.9 的 port 3389

當在家中使用 Microsoft "遠端桌面連線"連接到 IP Address 202.134.116.34:10000 時,相等於你連接到公司的 192.168.0.5 的 Windows XP 中。

連接到 IP Address 202.134.116.34:10001 時,相等於你連接到公司的 192.168.0.6 的 Windows XP 中。 如此類推。

限際網外(Internet)對網內的訪問

實例一:

我不希望 202.66.8.3 這個 IP 從 Internet 訪問我的 Solaris 系統任何服務。

基本資料:-

pcn0 - (對外) 網絡卡, IP Address 為有效的固定 IP 202.134.116.34/32 ,並且可以對外上網通訊。

pcn1 - (對內) 網絡卡, IP Address 為虛擬 IP 192.168.0.1/24可與內部網絡通訊 (192.168.0.1 至 192.168.0.254)

檔案 /etc/ipf/ipf.conf 內容:
block in quick on pcn0 from 202.66.8.3/32 to any

當 202.66.8.3 透過 pcn0 嘗試訪問 Solaris 系統時,系統便不會作出任何回應。

在指令中 quick 的意思,IP Filter 便不進行 Data Log 和 IPFilter 內部一些不必要的處理,減低系統運作負荷。

實例二:

我不希望 202.66.8.1 至 202.66.8.254 這組 IP 從 Internet 訪問我的 Solaris 系統任何服務。

基本資料:-

pcn0 - (對外) 網絡卡, IP Address 為有效的固定 IP 202.134.116.34/32 ,並且可以對外上網通訊。

pcn1 - (對內) 網絡卡, IP Address 為虛擬 IP 192.168.0.1/24可與內部網絡通訊 (192.168.0.1 至 192.168.0.254)

檔案 /etc/ipf/ipf.conf 內容:
block in quick on pcn0 from 202.66.8.0/24 to any

當 202.66.8.1 至 202.66.8.254 這組 IP Address 透過 pcn0 嘗試訪問 Solaris 系統時,系統便不會作出任何回應。

 

遍寫中 05:44 20 Oct, 2006 ,未完成。想睡覺了!

使用 PHP 和 MySQL 來管理 IP Filter

遍寫中

 

 


E-mail : andrew@tophk.net