1. 程式人生 > >Linux防火牆系統

Linux防火牆系統

     Linux系統上的防火牆是由iptables/netfilter組成,其中iptables是規則的制定工具,netfilter在核心協議框架中定義了5個卡點位置,並在這5個位置通過鉤子函式對進出的資料包進行過濾,從而達到防火牆的功能,iptables工具工作在使用者空間,它可以制定一些規則然後送達到核心空間,然後結合netfilter的鉤子函式及處理方法對資料包進行放行或者拒絕處理。防火牆裡面有許多個table,每個表格裡面都定義許多的規則,並且每個表格的用途不同,iptables按用途和功能對其分類成四個表,這四個表又由五個鏈組成,這五個鏈對應上面五個鉤子函式。


     防火牆的四個表分別為:filter,nat,mangle,raw;預設表是filter,表的處理優先順序依次為:raw,mangle,nat,filter。每個表的處理功能分別為

    ##filter:一般的過濾功能;

    ##nat:用於nat功能(地址轉換、隱射,埠隱射);

    ##mangle:用於對特定資料包的修改,(較少使用);

    ##raw:一般是為了不在讓iptables做資料包的連結跟蹤處理,從而提高效能;

     四個表下的五個鏈分別為:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

    ##INPUT:通過路由表判斷後目的地是本機,然後進入本機內部資源

blob.png

    ##OUTPUT:由本機產生的資料向外部轉發

blob.png

    ##FORWARD:通過路由表判斷後目的地不是本機,然後通過路由轉發到其他地方

blob.png

blob.png

blob.png

blob.png

blob.png

    ##PREROUTING:流入的資料包進入路由表之前

    ##POSTROUTING:傳出的資料包到達網絡卡出口前

iptables的語法格式:  iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET

    ## -t TABLE: 指定表,預設為filter,包括filter,nat,mangle,raw四表

    ## SUBCOMMAND:對鏈的操作(被引用中的鏈,無法刪除和改名)

        -F 清空指定表的指定鏈上所有的規則;省略鏈名時,清空表中的所有鏈

blob.png

        -N 新建一個使用者自定義的鏈;自定義鏈只能作為預設鏈上的跳轉物件,即在預設鏈通過引用來生效自定義鏈

blob.png

        -X 刪除使用者自定義的空鏈;非空自定義鏈和內建鏈無法刪除

blob.png

        -Z 將規則的計數器置為0

        -P 設定鏈的預設處理機制;當所有都無法匹配或有匹配有無法做出有效處理機制時,預設策略即生效

blob.png

        -E 重新命名自定義鏈

blob.png

    ##iptables 規則管理

        -A 在鏈尾追加一條規則

blob.png

blob.png

        -I 在指定位置插入一條規則

blob.png

blob.png

        -D 刪除指定規則

blob.png

        -R 替換指定的規則

blob.png

        -L 列出指定鏈上的所有規則

blob.png

blob.png

blob.png

    ##CRETERIA: 匹配條件

檢查IP首部、檢查TCP、UDP或ICMP首部,也可以基於擴充套件機制,進行額外的檢查,如做連線追蹤;注意,可同時指定多個條件,預設多條件要同時滿足。匹配條件又分通用匹配和擴充套件匹配

        ##通用匹配

            [!] -s,-src,--source  IP|Network  :檢查報文中的IP地址

            -d,--dst--destination  :檢查報文中的目標IP地址

            -p      :檢查報文中的協議,包括tcp,udp,icmp

            -i,--in-interface   :資料報文的流入介面,通常用於PREROUTING,INPUT,FORWARD鏈上的規則

            -o,--out-interface  :資料報文的流入介面,通常用於FORWARD,OUTPUT,POSTROUTING鏈上的規則

        ##擴充套件匹配

            隱形擴充套件:如果在通用匹配上使用-p選項指明瞭協議的話,則使用-m選項指明對其協議的擴充套件就變得可有可無

                tcp:針對tcp協議

                    --dport PORT[-PORT]

                    --sport

                    --tcp-flags LIST1 LIST2

                        LIST1 :要檢查的標誌位

                        LIST2 :在LIST1中出現過的且為1標記位;而餘下的則必須為0;

                    --syn :用於匹配tcp會話三次握手中的第一次

blob.png

                udp:針對udp協議

                    --sport

                    --dport

blob.png

                icmp:針對icmp協議

                    --icmp-types

                        8:echo request

                        0:echo reply

blob.png

blob.png

            顯式擴充套件:必須指明使用的擴充套件機制

                -m 模組名稱 (每個模組會引入新的匹配機制)

                    multiport擴充套件: 定義多埠匹配,最多指定15個埠

                        --source-ports,--sport

                        --destination-ports

                        --ports

blob.png

                    iprange擴充套件:指定連續的IP地址範圍,在匹配非整個網段地址時使用

                        [!]--src-range IP

                        [!]--dst-range IP

blob.png

                    srting擴充套件:檢查報文中出現的字串,與給定的字串做匹配

                        --algo

                        --string"STRING"

                        --hex-string"HEX_STRING":HEX_STRING為編碼成16進位制格式的字串

blob.png

                    time擴充套件:基於時間區間的訪問控制

                        --datestart

                        --dattestop

                        --timestart

                        --timestop

                        --weekdays

blob.png

                    connlimit擴充套件:基於連線數作限制;對每個IP能夠發起的併發連線數作限制

                        --connlimit-above

blob.png

                    limit擴充套件:基於發包速率作限制

                        --limit

                        --limit-burst

blob.png

                    state擴充套件:啟用連線追蹤模板記錄連線

                        NEW:新建立的連線,連線追蹤模板中無相應記錄時,客戶端第一次發出的請求

blob.png

                        ESTABLISHED:NEW狀態後,邊距追蹤模板中的記錄刪除之前進行的通訊過程

blob.png

                        RELATED:相關聯的連線

blob.png

                        INVALIED:無法識別的狀態

    ##TARGET:採取的動作

        -j :跳轉目標

            ACCEPT :允許接受

            DROP :丟棄

            REJECT :拒絕

SNAT:主要用於實現內網客戶端訪問外部主機時使用,要定義在POSTOUTING鏈,也可以在OUTPUT上使用

blob.png

blob.png

blob.png

DNAT:主要用於釋出內部伺服器,讓內網中的伺服器在外網中可以被訪問到,要定義在PREROUTING鏈

blob.png

blob.png

blob.png

blob.png