預(yù)備知識(轉(zhuǎn)): iptable有三種隊列(表)規(guī)則,mangle queue, filter queue, nat queue。
1。The first is the mangle table which is responsible for the alteration of quality of service bits in the TCP header.
2。The second table is the filter queue which is responsible for packet filtering.
* Forward chain: Filters packets to servers protected by the firewall.
* Input chain: Filters packets destined for the firewall.
* Output chain: Filters packets originating from the firewall.
3。The third table is the nat queue which is responsible for network address translation. It has two built-in chains; these are:
* Pre-routing chain: NATs packets when the destination address of the packet needs to be changed.
* Post-routing chain: NATs packets when the source address of the packet needs to be changed
個人總結(jié):
iptables執(zhí)行規(guī)則時,是從從規(guī)則表中從上至下順序執(zhí)行的,如果沒遇到匹配的規(guī)則,就一條一條往下執(zhí)行,如果遇到匹配的規(guī)則后,那么 就執(zhí)行本規(guī)則,執(zhí)行后根據(jù)本規(guī)則的動作(accept, reject, log等),決定下一步執(zhí)行的情況,后續(xù)執(zhí)行一般有三種情況。
1。一種是繼續(xù)執(zhí)行當(dāng)前規(guī)則隊列內(nèi)的下一條規(guī)則。比如執(zhí)行過Filter隊列內(nèi)的LOG后,還會執(zhí)行Filter隊列內(nèi)的下一條規(guī)則。
2。一種是中止當(dāng)前規(guī)則隊列的執(zhí)行,轉(zhuǎn)到下一條規(guī)則隊列。比如從執(zhí)行過accept后就中斷Filter隊列內(nèi)其它規(guī)則,跳到nat隊列規(guī)則去執(zhí)行
3。一種是中止所有規(guī)則隊列的執(zhí)行。
iptables 是采用規(guī)則堆棧的方式來進行過濾,當(dāng)一個封包進入網(wǎng)卡,會先檢查 Prerouting,然后檢查目的 IP 判斷是否需要轉(zhuǎn)送出去,接著就會跳到 INPUT 或 Forward 進行過濾,如果封包需轉(zhuǎn)送處理則檢查 Postrouting,如果是來自本機封包,則檢查 OUTPUT 以及 Postrouting。過程中如果符合某條規(guī)則將會進行處理,處理動作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,還多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些處理動作不會中斷過濾程序,某些處理動作則會中斷同一規(guī)則煉的過濾,并依照前述流程繼續(xù)進行下一個規(guī)則煉的過濾(注意:這一點與 ipchains 不同),一直到堆棧中的規(guī)則檢查完畢為止。透過這種機制所帶來的好處是,我們可以進行復(fù)雜、多重的封包過濾,簡單的說,iptables 可以進行縱橫交錯式的過濾(tables)而非煉狀過濾(chains)。
ACCEPT 將封包放行,進行完此處理動作后,將不再比對其它規(guī)則,直接跳往下一個規(guī)則煉(nat:postrouting)。
REJECT 攔阻該封包,并傳送封包通知對方,可以傳送的封包有幾個選擇:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(這個封包會要求對方關(guān)閉聯(lián)機),進行完此處理動作后,將不再比對其它規(guī)則,直接 中斷過濾程序。 范例如下:
iptables -A FORWARD -p TCP ——dport 22 -j REJECT ——reject-with tcp-reset
DROP 丟棄封包不予處理,進行完此處理動作后,將不再比對其它規(guī)則,直接中斷過濾程序。
REDIRECT 將封包重新導(dǎo)向到另一個端口(PNAT),進行完此處理動作后,將 會繼續(xù)比對其它規(guī)則。 這個功能可以用來實作通透式 porxy 或用來保護 web 服務(wù)器。例如:iptables -t nat -A PREROUTING -p tcp ——dport 80 -j REDIRECT ——to-ports 8080
MASQUERADE 改寫封包來源 IP 為防火墻 NIC IP,可以指定 port 對應(yīng)的范圍,進行完此處理動作后,直接跳往下一個規(guī)則煉(mangle:postrouting)。這個功能與 SNAT 略有不同,當(dāng)進行 IP 偽裝時,不需指定要偽裝成哪個 IP,IP 會從網(wǎng)卡直接讀取,當(dāng)使用撥接連線時,IP 通常是由 ISP 公司的 DHCP 服務(wù)器指派的,這個時候 MASQUERADE 特別有用。范例如下:
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE ——to-ports 1024-31000
LOG 將封包相關(guān)訊息紀(jì)錄在 /var/log 中,詳細位置請查閱 /etc/syslog.conf 組態(tài)檔,進行完此處理動作后,將會繼續(xù)比對其它規(guī)則。例如:
iptables -A INPUT -p tcp -j LOG ——log-prefix "INPUT packets"
SNAT 改寫封包來源 IP 為某特定 IP 或 IP 范圍,可以指定 port 對應(yīng)的范圍,進行完此處理動作后,將直接跳往下一個規(guī)則煉(mangle:postrouting)。范例如下:
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT ——to-source 194.236.50.155-194.236.50.160:1024-32000
DNAT 改寫封包目的地 IP 為某特定 IP 或 IP 范圍,可以指定 port 對應(yīng)的范圍,進行完此處理動作后,將會直接跳往下一個規(guī)則煉(filter:input 或 filter:forward)。范例如下:
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 ——dport 80 -j DNAT ——to-destination 192.168.1.1-192.168.1.10:80-100
MIRROR 鏡射封包,也就是將來源 IP 與目的地 IP 對調(diào)后,將封包送回,進行完此處理動作后,將會中斷過濾程序。
QUEUE 中斷過濾程序,將封包放入隊列,交給其它程序處理。透過自行開發(fā)的處理程序,可以進行其它應(yīng)用,例如:計算聯(lián)機費用……等。
RETURN 結(jié)束在目前規(guī)則煉中的過濾程序,返回主規(guī)則煉繼續(xù)過濾,如果把自訂規(guī)則煉看成是一個子程序,那么這個動作,就相當(dāng)于提早結(jié)束子程序并返回到主程序中。
MARK 將封包標(biāo)上某個代號,以便提供作為后續(xù)過濾的條件判斷依據(jù),進行完此處理動作后,將會繼續(xù)比對其它規(guī)則。范例如下:
iptables -t mangle -A PREROUTING -p tcp ——dport 22 -j MARK ——set-mark 2