iptables 補充本

淺談iptables
一 什么是iptables
iptables 是工作在內核之上的netfilter框架的前端工具(iptables是netfilter的管理工具這樣說也不為過)
Firewall:隔離工具,工作于主機或網絡的邊緣處,對經由的報文根據預先定義的規則(識別標準)進行檢測,對于能夠被規則匹配到的報文實行某種預定義的處理機制的一套組件;
 硬件防火墻:在硬件級別實現部分功能的;
 軟件防火墻:應用軟件邏輯在通用硬件基礎上實現;
常說的iptables一共有四張表和五條鏈   就是人們俗稱的四表五鏈 其實iptables并不是只有四張表只是有一個不常用而已既然不常用鄙人也就不再贅述。
netfilter五鏈
        prerouting  (入路由前規則) 在對數據包作路由選擇之前,應用此鏈中的規則,如DNA
   input       (入主機前規則) 當接收到防火墻本機地址的數據包(入站)時,應用此鏈中的規則
forward     (轉發前規則)   當接收到需要通過防火墻發送給其他地址的數據包(轉發)時,應用此鏈中的規則。
output      (出主機前規則) 當防火墻本機向發送數據包(出站時),應用此鏈中規則。
postrouting (出路由前規則) 在對數據包作路由選擇之后,應用此鏈中的規則,如SNAT
netfilter四表
        filter: 包過濾(用途最多的表netfilter防火功能最直觀的表)
NAT:    地址轉換表(常用作地址轉換,例如:DNAT SNAT等)
mangle: 拆解報文,做出修改,而后重新封裝(對報文打標記,或更改TOS TTL等值)
raw:    關閉nat表上啟用的連接追蹤機制(因為raw表的優先級是最高的通過匹配raw表的規則可以跳過nat表規則從而實現減輕nat鏈接追蹤的負載)

每張表上所對應的功能
filter:input, forward, output
主要用于對數據包進行過濾,根據具體規則決定是否放行該數據包(如DROP/ACCEPT/REJECT/LOG)。filter表對應的內核模塊為iptable_filter,包含三個規則鏈:
INPUT 鏈:INPUT針對哪些目的地是本地的包
FORWARD鏈:FORWARD過濾所有不是本地產生的并且目的地不是本地(即本機只負責轉發)的包
OUTPUT鏈:OUTPUT是用來過濾所有本地生成的包
nat:prerouting, input, output, postrouting
主要用于修改數據包的IP地址、端口號等信息(網絡地址轉換,如SNAT、DNAT、MASQUERADE、REDIRECT)。屬于一個流的包只會經過這個表一次。如果第一個包被允許經做NAT或Masqueraded,那么余下的包會自動被做相同的動作,也就是說,余下的包不會再通過這個表(因為包的大小限制導致數據可能會自動地做相同的操作)。表對應的內核模塊為iptable_nat,包含三個鏈:
PREROUTING鏈:作用是在包剛剛到達防火墻時改變它的目的地址
    OUTPUT鏈:改變本地產生的包的目的地址
    POSTROUTING鏈:在包就要離開防火墻之前改變其源地址
mangle:prerouting, input, forward, output, postrouting
    主要用于修改數據包的TOS、TTL以及為數據包設置Mark標記,以實現Qos(Quality Of Service,服務質量)調整以及策略路由等應用,由于需要相應的路由設備支持,因此應用并不廣泛。包含五個規則鏈——PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。
raw:prerouting, output
主要用于決定數據包是否被狀態跟蹤機制處理。在匹配數據包時,raw表的規則要優先于其他表。包含兩條規則鏈 OUTPUT、PREROUTING
iptables的四種狀態追蹤機制  
    NEW:該包想要開始一個連接(重新連接或連接重定向)
RELATED:該包是屬于某個已經建立的新連接。例如:FTP的數據傳輸連接就是控制連接所RELATED出來的連接。–icmp-type 0(ping應答)就是–icmp-type 8(ping請求)鎖RELATED出來的
ESTABLISHED:只要發送并接到應答,一個數據連接從NEW變為ESTABLISHED,而且該狀態會繼續匹配這個連接后續數據包
INVALID:數據包不能被識別屬于哪個連接或者沒有任何狀態比如內存溢出、收到不知屬于哪個連接的ICMP錯誤信息,一般應該DROP這個狀態的任何數據
添加規則時需要考量的因素:
(1) 實現的功能:用于判定將規則添加至哪個表;
(2) 報文的流經位置:用于判斷將規則添加至哪個鏈;
(3) 報文的流向:判定規則中何為”源“,何為”目標“;
(4) 匹配條件:用于編寫正確的匹配規則;
(a) 專用于某種應用的同類規則,匹配范圍小的放前面;
(b) 專用于某些應用的不同類規則,匹配到的可能性較多的放前面;同一類別的規則可使用自定義鏈單獨存放;
(c) 用于通用目的的規則放前面;
同類規則 匹配范圍小的放前面
不同類別規則 訪問量大的放前面
nat表會自動開啟連接追蹤功能
LOG要放在accept或DROP之前

iptables數據包的流向
    client–>INTERNET–>server{raw(PREROUTING)–>mangle(PREROUTING)–>nat(PREROUTING)–>[主機路由]–↓到這里要分兩種情況
    1.經過本機路由后目的地址是本機的–>{mangle(INPUT)–>filter(INPUT)–>本地主機進程–>[路由選擇(到達本機的OUTPUT鏈或跳過OUTPUT鏈直接到達POSTROUTING鏈)]}
        直接到達本機的OUTPUT鏈的比較常見   直接到達本機的POSTROUTING鏈的比較少(例如:lvs的實現都是從INPUT鏈進行修改然后直接路由到POSTROUTING鏈)
        到達的是本機OUTPUT的–>{raw(OUTPUT)–>mangle(OUTPUT)–>filter(OUTPUT)–>[路由選擇(查看本機的路由表找到出口)]–>mangle(POSTROUTING)–>nat(POSTROUTING)}–>(WAN/LAN)
    2.經過本機路由后目的地址是其他主機的–{mangle(FORWARD)–>nat(FORWARD)–>filter{FORWARD}–>[路由選擇(查看本機的路由表找到出口)]–>mangle(POSTROUTING)–>nat(POSTROUTING)}–>(WAN/LAN)
    
iptables中4個表的優先級由高到低的順序為:raw–>mangle–>nat–>filter
1.raw表
    raw表只工作在netfilter框架中的PREROUTING和OUTPUT鏈上
    在PREROUTING鏈上工作著raw表mangle表和nat表
    在PREROUTING鏈上raw表的優先級是最好的所以先匹配raw表之后才會匹配其他表的規則
    raw的使用場景  用戶使用了raw表 在某個鏈上 raw表處理完后 將跳過nat表和ip_conntrack處理 即不再做地址轉換和數據包的狀態鏈接跟蹤處理了
    例如高訪問量的web網站服務器的nat地址追蹤表示無法滿足這么巨大的訪問量可以在PREROUTING鏈上設置規則如果目的端口是80端口可以直接跳過nat地址追蹤(前提后端的服務器使用的是公網地址)
    iptables -t raw -A PREROUTING -d 1.1.1.1 -p tcp –dport 80 -j NOTRACK  這條規則匹配的是  如果目的端口是80的且目的主機是1.1.1.1到跳過鏈接地址追蹤
    iptables -t raw -A PREROUTING -s 1.1.1.1 -p tcp –sport 80 -j NOTRACK                   如果源地址是1.1.1.1且源端口是80的主機跳過鏈接地址追蹤
    iptables -t filter -A FORWARD -m state –state UNTRACKED -j ACCEPT                      對于在PREROUTIGN鏈上沒有追蹤的鏈接直接轉發
2.mangle表
    iptables -A PREROUTING -t mangle -p tcp –dport telnet -j TOS –set-tos TOS_value
mangle表工作在netfilter的5個鏈上
1 Minimize-Delay 16 (0x10),要求找一條路徑使延時最小,一些標準服務如telnet、SSH、FTP- control 就需要這個選項。
2 Maximize-Throughput 8 (0x08),要求找一條路徑能使吞吐量最大,標準服務FTP-data能用到這個。
3 Maximize-Reliability 4 (0x04),要求找一條路徑能使可靠性最高,使用它的有BOOTP和TFTP。
4 Minimize-Cost 2 (0x02),要求找一條路徑能使費用最低,一般情況下使用這個選項的是一些視頻音 頻 流協議,如RTSP(Real Time Stream Control Protocol)。
5 Normal-Service 0 (0x00),一般服務,沒有什么特殊要求。這個值也是大部分包的缺省值。
mangle表可以直接修改數據包的TOS和TTL
mangle表對鏈接或數據包打標記
     -j connmark
    選項 功能
    –set-mark value[/mask] 給鏈接跟蹤記錄打標記。
    –save-mark [–mask mask] 將數據包上的標記值記錄到鏈接跟蹤記錄上
    –restore-mark [–mask mask] 重新設置數據包的nfmark值。
    -j mark
    選項 功能
    –set-mark value 設置數據包的nfmark值。
    –and-mark value 數據包的nfmark值和value進行按位與運算。
    –or-mark value 數據包的nfmark值和value進行按或與運算。
mangle表修改ttl值
    iptables -A OUTPUT -m ttl –ttl 60
3.nat表 iptables -t nat 的任何操作都會觸發鏈接追蹤功能
    gateway不建議打開自動追蹤功能,如打開,要把內核空間調大
    /proc/net/nf_conntrack:記錄了已追蹤到的鏈接
    /proc/sys/net/nf_conntrack_max定義了能追蹤的最大連接數
    /proc/sys/net/netfilter/ :該目錄下有各種超時時間的的限定文件
    對目的地址進行轉換
    -j DNAT –to-destination [ipaddr[-ipaddr]][:port[-port]]
    對源地址進行轉換
    -j SNAT –to-source [ipaddr[-ipaddr]]
    MASQUERADE
    SNAT場景中應用于POSTROUTING鏈上的規則實現源地址轉換 但外網地址不固定時 使用此target

4.filter表
    -j DROP 對匹配到的數據包執行丟棄操作
    -j REJECT 對匹配到的數據包執行拒絕操作
    -j ACCEPT 對匹配到的數據包執行通過操作
    filter網上能找到的太多   這里就不再贅述了  這個表也是最常用的表

原創文章,作者:wode,如若轉載,請注明出處:http://www.www58058.com/75873

(0)
wodewode
上一篇 2017-05-15
下一篇 2017-05-15

相關推薦

  • 始于此

         “路漫漫其修遠兮,吾將上下而求索”,一段路程的結束,意味著一段路程的開始,同歲月般,永遠也不能回到出發的那一刻,你所能做的,就是一路走下去?;仡櫿湎?,卻不能逗留。         我的學習宣言是“功崇惟志,業廣惟勤”,時刻告訴自己,“功”出…

    Linux干貨 2016-11-28
  • 網絡管理2

    六、配置網絡     跨網絡通信:路由     路由分類:         主機路由         網絡路由 &nbs…

    Linux干貨 2016-09-09
  • date 命令練習

    一、課外資料補充: 1.命令格式: date[參數]…[+格式] 2.命令功能: date可以用來顯示或設定系統的日期與時間。 3.命令參數: 必要參數: %H小時(以00-23來表示)。 %I小時(以01-12來表示)。 %K小時(以0-23來表示)。 %l小時(以0-12來表示)。 %M分鐘(以00-59來表示)。 %P AM或PM…

    Linux干貨 2016-08-05
  • Linux源程序包管理器之RPM

    一、 RPM功能描述 l  打包 l  安裝 l  卸載 l  升級 l  校驗 l  數據庫管理 二、 RPM包命名格式 1.       命名格式舉例 name-version-relase.arch.rpm 例如:bash-4.2.3…

    系統運維 2015-09-25
  • rpm包管理

    前言    RPM(簡稱RPM,全稱為The RPM Package Manager)是在Linux下廣泛使用的軟件包管理器。RPM此名詞可能是指.rpm的文件格式的軟件包,也可能是指其本身的軟件包管理器(RPM Package Manager)。最早由Red Hat研制,現在也由開源社區開發。RPM通常隨附于Linux發行版,…

    Linux干貨 2015-05-13
欧美性久久久久