2005-12-19

好用的 iptables 設定工具 shorewall

眾所皆知,iptables 的設定實在不是件很 friendly 的事,而且稍一設定有誤,可能結果就出乎意料之外。因此在設定 iptables 時,老手都建議一定要在這台電腦上旁設,千萬不要在遠端設定,以免出問題時,要修改就很麻煩了。

有沒有其它的輔助方法呢?如果你有這個需求,不妨考慮 shorewall 這個軟體。在 UBUNTU 上安裝 shorewall 是很容易的,如下:

# apt-get install shorewall

這樣 shorewall 就安裝好了。shorewall 會在以下目錄安裝一些東東:

1. /sbin/shorewall

這個是 shorewall 的執行程式

2. /etc/shorewall

shorewall 的一些相關設定檔都是放在這裏,安裝完後只有一個 shorewall.conf 檔,另外一些必需的檔案,如 zones、policy、interfaces、rules.. 必需由我們產生。

shorewall.conf 這個檔案是 shorewall 的主要設定檔,在一般情況下,我們不用動到它
interfaces 則是我們電腦上的網路卡設定,一般都是 eth0
policy 這個是用來設定 shorewll 的內定規矩或策略
zones 這個比較難解釋,簡單的說就是一個區域,如以下在設定這個項目時,我們會用到 net 來代替連結到外部 internet 的區域,這就是一個 zone
rules 這個就是一些進出 firewall 的設定

3. /etc/init.d/shorewall

在 /etc/init.d/ 下的這些檔案都是一些設定檔,這可讓 shorewall 在開機時自動啟動。不過還有另一個地方需要設定,就是將 /etc/default/shorewall 檔案中的 startup=0 改為 startup=1,這樣 shorewall 在電腦啟動時,就可以自行啟動了。

4. /usr/share/shorewall/

這個目錄下都是一些預先設定好的協定,如

action.AllowDNS
action.AllowFTP
share/shorewall/action.AllowIMAP
action.AllowPing
action.AllowPOP3
action.AllowSMTP
..... 以下略 ....

不妨看一下其內容,就可了解這是做什麼用的,這可用來簡化我們設定 shorewall 的 rules。這在設定 rules 這個檔案時會加以說明。

5. /usr/share/doc/shorewall/default-config

前面說過,在 /etc/shorewall/ 這個目錄下都是 shorewall 的相關設定檔,除了 shorewall.conf 外,一般還需要 interfaces、zones、pilicy 及 rules 這四個檔案。

在這個目錄下有一些類似的檔案可供參考與修改,不妨將相關檔案 co 到 /etc/shorewall/ 這個目錄下,再做修改成符合自己需求的樣示,這樣可節省不少時間;同時參考這些檔案內部的說明,也有助於對其運作的了解。

/usr/share/doc/shorewall/default-config/zones
/usr/share/doc/shorewall/default-config/policy
/usr/share/doc/shorewall/default-config/interfaces
/usr/share/doc/shorewall/default-config/rules

---------------------------------------------------------------------------------

可以把 shorewall 想像成將一些煩人的 iptables 設定及行為都以一些設定檔來設,這樣就可以簡化設定了。另外個人覺得 shorewall 好似一些硬體 firewall,這類產品通常也是將一些設定規格、檔案化,於是設定 firewall 就給它很容易了。

首先說說我的環境及使用需求:

1. 環境

單一固定 ip,不使用 nat 功能
介面卡為 eth0
系統開放 smtp、pop3、dns、http

2. 使用需求

對外連線不限制,但由外連到這台電腦時,只開放如上的一些服務(port)

要注意的是 shorewall 需要 iproute 這個套件,我們可藉由

# which ip

來查是否已經安裝了 iproute 這個程式,其中 ip 是 iproute 的安裝後的一個程式

再來談談 shorewall 的設定。如前所言,shorewall 將一些 iptables 的相關煩人設定都已規格及檔案化,所以我們只要修改相關的設定檔(這些檔案都在 /etc/shorewall/ 目錄下),這樣是不是很簡單。

1. interfaces

這個檔案用來設定使用的網路介面,一般我們設成這樣即可

#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect

2. policy

用來設定 shorewall 的內定政策,可設成這樣

#SOURCE DEST POLICY LOG LEVEL LIMIT:BURST
fw net ACCEPT
net all DROP info
all all REJECT info

其中 fw 代表 firewall(也可想像成內部到外面的 internet),所以第一項表示由內連到時一律開放。

第二項表示由外連到內時一律 drop 掉,所以待會我們需在 rules 中將我們所開放的服務(port)開放。

第三項是 shorewall 必需加上的,同時需在最後一個項目

3. zones

這項設定成以下即可

#ZONE DISPLAY COMMENTS
net Net Internet

這個 net 在 policy 及 interfaces 中也有設定,它們之間有著共同關連。

4. rules

這個檔案是重點中的重點,由於在 policy 中內定由內至外一律開放,但由外至內全部關閉,所以像我的情形有開放 smtp、web、dns、pop3 時,就必需在這個檔案中加以註明,如下:

#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/
# PORT PORT(S) DEST LIMIT GROUP
AllowWeb net fw
AllowDNS net fw
AllowSMTP net fw
AllowPOP3 net fw

這些 Allow* 是從那來的呢,請參考上面的說明,這些可說是 shorewall 先定義好的一些服務,所以我們可直接叫用,我們如果不用這種方式,也可用以下的格式(以 http 為例):

ACCEPT net fw tcp 80

上項設法和 AllowWeb net fw 是一樣的。這是說由 net 到 fw(記得這兩項的意義嗎)加以開放。

---------------------------------------------------------------------------------

除了在先前說過的在電腦啟動時,開啟 shorewall 服務的方式外。我們可使用以下的方式來啟動:

# shorewall start

要停止 shorewall

# shorewall stop

重新啟動 shorewall

# shorewall restart

另外 shorewall 這個指令有一些好用的其它參數,不妨使用 shorewall help 來了解一下

---------------------------------------------------------------------------------

shorewall 官方網址:

http://www.shorewall.net

參考設定資料:

http://www.shorewall.net/2.0/standalone.htm

沒有留言 :

張貼留言