2009年10月27日

防火牆-iptables(1)

iptables相當複雜,所以這個文章我會慢慢寫
=============================
iptables不只能夠filter(過濾)packet的資料,甚至修改資料,也就是能夠做packet改寫達到NAT的功能
對於過濾的部分可以由一群群有次序的規則做判斷

Linux底下防火牆這功能幾乎由iptables一手包辦,其他儲存規則跟回覆規則的指令則是iptables-save跟iptables-restore
一開始如果系統沒有預設的規則,應該是等同全開、沒有限制,可借由
iptables -L -n

來觀察規則表,其中參數n的意思表示不要使用DNS反查,速度會快許多,結果如下圖表
iptables的語法大致上如同鳥哥網站提到的
iptables [-AI 鏈] [-io 網路介面] [-p 協定] \
> [-s 來源IP/網域] [-d 目標IP/網域] -j [ACCEPT|DROP]
參數:
-AI 鏈:針對某的鏈進行規則的 "插入" 或 "累加"
-A :新增加一條規則,該規則增加在原本規則的最後面。例如原本已經有四條規則,
使用 -A 就可以加上第五條規則!
-I :插入一條規則。如果沒有指定此規則的順序,預設是插入變成第一條規則。
例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5 號
鏈 :有 INPUT, OUTPUT, FORWARD 等,此鏈名稱又與 -io 有關,請看底下。

-io 網路介面:設定封包進出的介面規範
-i :封包所進入的那個網路介面,例如 eth0, lo 等介面。需與 INPUT 鏈配合;
-o :封包所傳出的那個網路介面,需與 OUTPUT 鏈配合;

-p 協定:設定此規則適用於哪種封包格式
主要的封包格式有: tcp, udp, icmp 及 all 。

-s 來源 IP/網域:設定此規則之封包的來源項目,可指定單純的 IP 或包括網域,例如:
IP  :192.168.0.100
網域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
若規範為『不許』時,則加上 ! 即可,例如:
-s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源;

-d 目標 IP/網域:同 -s ,只不過這裡指的是目標的 IP 或網域。

-j :後面接動作,主要的動作有接受 (ACCEPT)、丟棄 (DROP) 及記錄 (LOG)
一般而言建議練習時先把INPUT的Policy設定為DROP,先全部擋住,在慢慢開啟允許進入的部分
iptables -P INPUT DROP

比方說允許SSH Server的port則開啟port # 22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

不過我也很懷疑為何iptables不能進化一點,只有A跟I,只能把rule放在最前跟最後,何不妨讓人可以插入到某一條規則之後
使用如
iptables -A INPUT 2 -p tcp --dport 22 -j ACCEPT
就可以在規則2後加入一條規則

最後補上一條方便的規則,讓已經建立連線或者是由我們主機發出的封包引起對方回覆的封包進入,不然一些類似更新(apt/yum)可能無法正常運作
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

當然還可以擋掉一些討厭的網域區段或者mac address,這樣就完成了基本的INPUT Chain的部分
初學者可能常會想問,我知道service的名字或者套件的名字,但我怎麼知道他用的是tcp或者udp,還有走的port number呢?要用google去查嗎?其實大多知名的服務都不假外求,只要察看/etc/services這個檔案裡面就有了

以Fedora而言,完成之後記得把檔案寫到/etc/sysconfig/iptables這個檔案內,這樣下次開機他就會自動啟動了

沒有留言: