§ 2.7 測試
以 eth1 做為對內的網絡介面,其虛擬 IP 位址為 192.168.1.0 ~ 192.168.1.255,因為其第一個為網絡號碼,最後一個為廣播號,所以可用的虛擬 IP 為 192.168.0.1 ~ 192.168.255.254,我們將閘道器(gateway)設為 192.168.0.1、子網絡遮罩設為 255.255.255.0,將 192.168.1.2 ~ 192.168.1.254 之間的 IP 分配給內部的機器,之後內部的機器就可以互相通訊(‘ping’),但對於要連出去,還需要一個步驟,那就是使用一支程序,ipchains 來達成這個目的。先針對上述的問題,如果要讓內部的機器連接到外部的網絡,可先執行:
/sbin/ipchains -A forward -s 192.168.0.0/24 - d 0.0.0.0/0 -j MASQ
/sbin/ipchains -P forward DENY
第一個命令會將來源 192.168.0.0 ~ 192.168.255.255 的封包使用 IP 偽裝,將偽裝的封包送轉送給預設的路由,到外部的網絡。
第二個命令會將 forward 的預設政策設為 DENY。
你可以將這兩行命令加在 /etc/rc.d/rc.local 檔案中,使其每次開機時執行。
對於 ipchains 的使用,會在下面作更詳細的說明。
第 3 章 封包過濾防火牆ipchains
若你使用的是新版的 Linux,裡面都會有 ipchains 的套件,直接使用就可以讓你建立封包過濾防火牆。
§ 3.1 ipchains語法
其選項、來源 ip、目的地 ip、port 可以不加,表示為全部。
ipchains語法:
ipchains 命令 input/forward/output 選項 源ip Port 目的ip port -j目標
范例: ipchains -A input -p all -s 192.168.1.2 -d eef.oit.edu.tw 23 -j DENY
§ 3.2 ipchains命令
可以有兩種形式來指定,全名方式或縮寫方式來表示
--add -A 增加新的 ipchains 規則
--delete -D 刪除第一個 ipchains 規則,或某一個 ipchains 規則
--inser -I 插入一個新 ipchains 規則,其插入需指定規則中的數字,如果數字為 1 表示為第一個。
--replace -R 取代所選擇的規則,其取代需指定規則中的數字。
--list -L 列出所選擇設定的 ipchains 規則,如果沒有規則被指定,會列出所有的規則出來。
--flush -F 將某個 ipchains 規則清除(例如:input、output、forward)這相當於去刪除掉規則的功效。
--zero -Z 將所有規則中的封包和位元組計數器歸零它也可以去指定-L, --list (list) 選項,會先列出之前的資料,再列出歸零的資料。
--check -C 檢查封包是否違反所設的規則,這是一個相當有用的測試,其是-s (來源), -d (目的地), -p(協定), -i (界面)更是必要。
--new -N 產生一個新的使用者定義規則(user-defined)。
--delete-chain -X 刪除使用者定義的規則,如果沒有指定任何的參數,它將會所有的定義的規則。
--policy -P 設定目標的政策,只有 input,forward,output 可以去設定。
--masquerade -M 這個選項可以去查看現在的偽裝連接狀況(須加上-L 選項),或是去設定 kernel 偽裝參數(-S選項)。
--set -S 設定偽裝停止時間變數
--help -h 列出描述命令語法的說明。
§ 3.3 ipchains參數選項
可以有兩種形式來指定,全名方式或縮寫方式來表示
使用’!’去定義相反的意義:驚歎號’!’有’not’的意義,有許多選項可以加上’!’去使用,表示不是的意思。
例如: -s ! localhost
說明: 表示除了localhost的來源位址都可以。
--proto -p [!] protocol 協定:可以用數字或名字,例如:tcp、icmp、udp及all。
范例:
ipchains -A input -p tcp -s 192.168.1.3 -d eef.oit.edu.tw FTP -j DENY
說明:
源地址為 192.168.1.3 的主機不能對 eef.oit.edu.tw 這台主機做 ftp 的動作請求。
-- source -s [!] 指定來源位址。
--source-port [!] port 指定來源的port。
--destination -d [!] 指定目的地位址
--destination-port [!] 指定目的地的port
--icmp-type [!] 類型名稱,指定ICMP類型
--interface -i [!] 網絡接口名稱 ,lo、eth0、eth1。
-- jump -j 指定規則的目標,如果沒有指定的話,這條規則算是沒有用處。
--numeric -n 取消DNS查詢,直接使用IP
-- log -l 將關於ipchains的訊息記錄起來,記錄於/var/log/messages內。
-- verbose -v 完整模式,會列出界面名稱、規則、TOS偽裝,封包和位元組計數也會列出,須和-L一起使用。
[!] --syn -y 只有當SYN設定時才會符合TCP封包
--TOS -t Type Of Service
[!] --version -V 列出ipchains的版本
--bidirectional -b 雙向模式