Openwrt開發日誌:iptables的各個表

Mission 5

                                                                                                         ——iptable的控制

Tool:

Xshell; WinSCP; Openwrt;Newifi

Reference:

《智能路由器開發指南》

Procedure:

學完了UCI API,其實我也不知道問什麼要學。這時候先總結一下之前的內容。

我已經掌握的了,或者說可以做到的事情,是在web頁面上創建一個額外的界面,然後這些界面上的選項可以基於我得選擇自己設計,並且每個選項都能對應到一個UCI配置文件中,修改配置文件裏的值。

那下面如何實現在openwrt的界面上增加一個添加黑名單的功能,允許用戶添加特定的ip地址清單,然後過濾掉來自和去向這個清單中的報文。

這個功能就要用到iptable這個自帶功能,所以開始學習書的12和13章,iptable防火牆和UCI防火牆。

12.1 防火牆概述

       Firewall在計算機網絡中,是在兩個或多個網絡之間用於設置安全策略的一個或多個系統的組合。防火牆起到隔離異常訪問的作用,僅允許可靠的流量通過,從而保護了家庭和企業內部網絡信息的安全。

       Linux防火牆通常包含iptable和netfilter兩部分。iptable是Linux管理防火牆規則的命令行工具,處於用戶空間。netfilter執行報文過濾,處於Linux內核空間。有時候也會用iptable來統稱Linux防火牆。

       iptables是一個報文狀態檢測防火牆,這意味着防火牆內部儲存每一個連接的信息,並且可以將每一個報文關聯到它所屬的連接。這個信息非常有用,它用於自動打開相應報文的傳輸路徑,因此在創建防火牆規則時,通常沒有必要創建相反方向的防火牆規則,防火牆將自動計算出這個規則。

12.2 iptables中的表

       iptables是用C語言實現的,以GNU許可發佈。它實際上包含兩部分,即netfilter和iptables。管理員通過iptables工具集和內核打通,將防火牆規則寫入內核中。內核netfilter執行報文過濾規則。iptables根據功能劃分不同的表來處理不同的邏輯功能,當前包含五個表,分別爲filter、nat、mangle、raw和security。這裏先介紹了幾個表的功能,隨後將

12.2.1 filter(過濾表)

       Filter是iptables的默認表,主要用於過濾報文,在這裏根據報文的內容對報文進行丟棄或者接收。它包含有3個內置鏈。

n  INPUT輸入鏈,處理目標地址爲本機IP地址的報文。

n  OUTPUT輸出鏈,處理本機IP地指產生的報文。

n  FORWARD轉發鏈,處理經過本機路由的報文。

這樣每一個IP報文只經過3個內置鏈中的一個,便於進行數據報文匹配和處理。這裏是真正實現防火牆處理的地方。注意:

n  經過本機轉發的報文是FORWARD鏈,不經過INPUT和OUTPUT鏈。

n  本機產生的報文經過OUTPUT鏈不經過其他的。

n  去往主機的報文經過該主機的INPUT鏈,其他的鏈不經過。

12.2.2 nat(網絡地址轉換表)

       nat用來完成源/目的地址和端口的轉換,當一個報文在創建一個新的連接時進入該表。它也有3個內置規則鏈。

n  PREROUTING:用於修改到來的報文,只用來做網絡地址轉換。

n  OUTPUT:用於修改本機產生的並且在路由處理之前的報文。

n  POSTROUTING:用於修改準備出去的報文的地方。

通過目的地址轉換,你可以將服務器放在防火牆後面,並使用私有IP地址。一些協議通過nat轉換有困難(例如FTP或SIP),連接跟蹤將打開這些協議的數據/媒體流路徑。nat表不能用於報文過濾和報文修改,因爲每一個連接流僅有一次機會進入該表中的規則鏈。

網絡地址轉換在路由功能前後都可能發生,源地址轉換是在數據包通過路由之後在POSTROUTING規則鏈進行地址轉換。目的地址轉換是在路由之前,在PREROUTING規則鏈進行地址轉換。

12.2.3 mangle(修改表)

       這個表主要用來進行報文修改,有5個內置規則鏈。

n  PREROUTING:針對到來的報文,在路由之前修改的地方。

n  INPUT:針對目的地址爲網關本身的報文。

n  FORWARD:針對通過網關路由轉發的報文。

n  POSTROUTING:將要發送出去的報文的地方。

n  OUTPUT:本機產生報文在路由之前修改的地方。

通常使用該表進行報文修改,以便進行QoS和策略路由(即解決網絡擁堵反方案)。通常每一個報文都進入該表,但不使用它來過濾報文。

12.2.4 raw(原始表)

       這個表很少被用到,主要用於配置連接跟蹤相關內容,在ip_conntrack之前調用。它提供了兩個內置規則鏈。

n  PREROUTING:到達本機的報文。

n  OUTPUT:本機進程產生的報文。

這裏是能夠在連接跟蹤生效之前處理報文的地方,你可以標記符合某種條件的報文不被連接跟蹤處理。一般很少使用。此外,還有security表, 這個表用於安全Linux的防火牆規則,是iptables最近的新增表,在實際項目中還很少用到。(2015)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章