iptables

iptables簡介

  iptables 是與最新的 3.5 版本 Linux 內核集成的 IP 信息包過濾系統。如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器, 則該系統有利于在 Linux 系統上更好地控制 IP 信息包過濾和防火墻配置。

iptables基礎

  規則(rules)其實就是網絡管理員預定義的條件,規則一般的定義為“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息 包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規 則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的 主要工作就是添加、修改和刪除這些規則。

iptables和netfilter:

  雖然 netfilter/iptables IP 信息包過濾系統被稱為單個實體,但它實際上由兩個組件netfilter 和 iptables 組成。

  • netfilter:netfilter組件也稱為內核空間(kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。

  • iptables:iptables 組件是一種工具,也稱為用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規則變得容易。

iptables的規則表和鏈

  表(tables):提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用于實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。
  鏈(chains):數據包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,每一條鏈中可以有一 條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否滿足規則所定義的條件。如果滿足,系統就會根據 該條規則所定義的方法處理該數據包;否則iptables將繼續檢查下一條規則,如果該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定 義的默認策略來處理數據包。

i2.png

規則鏈:

  • PREROUTING(路由前):對數據包作路由選擇前應用此鏈中的規則,所有的數據包進來的時侯都先由這個鏈處理。

  • INPUT(輸入隊列):進來的數據包應用此規則鏈中的策略。

  • FORWARD(輸出隊列):轉發數據包時應用此規則鏈中的策略。

  • OUTPUT(轉發隊列):外出的數據包應用此規則鏈中的策略。

  • POSTROUTING(路由后):對數據包作路由選擇后應用此鏈中的規則,所有的數據包出來的時侯都先由這個鏈處理。

規則表:

  • Filter表:過濾數據包, 對應三個鏈INPUT、FORWARD、OUTPUT。

  • Nat表:用于網絡地址轉換(IP、端口),對應三個鏈PREROUTING、POSTROUTING、OUTPUT。

  • Mangle表:修改數據包的服務類型、TTL、并且可以配置路由實現QOS,對應五個鏈PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。

  • Raw表:決定數據包是否被狀態跟蹤機制處理,對應兩個鏈OUTPUT、PREROUTING。

  同一鏈上的不同的表的規則的應用優先級(高–>低): raw——mangle——nat——filter

iptables的報文流向

  1、當一個數據包進入網卡時,它首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉送出去。
  2、如果數據包就是進入本機的,它就會沿著圖向下移動,到達INPUT鏈。數據包到了INPUT鏈后,任何進程都會收到它。本機上運行的程序可以發送數據包,這些數據包會經過OUTPUT鏈,然后到達POSTROUTING鏈輸出。
  3、如果數據包是要轉發出去的,且內核允許轉發,數據包就會如圖所示向右移動,經過FORWARD鏈,然后到達POSTROUTING鏈輸出。

i1.png

管理和設置iptables規則

iptables的基本語法格式:

  iptables [-t table] SUBCOMMAND chain [matches...] [-j target]  

  iptables [-t 表名] 命令選項 [鏈名] [條件匹配] [-j 目標動作或跳轉]

命令選項:

    鏈管理:
        -N:new,新增一條自定義鏈
        -X:delete,刪除自定義的空鏈
        -P:policy,設置鏈的默認策略
            ACCEPT:允許數據包通過
            DORP:直接丟棄數據包,不給任何回應信息
            REJECT:拒絕數據包通過,必要時會給數據發送端一個響應的信息
        -E:renname,重命名自定義的未被引用(引用計數為0)的鏈

    規則管理:
        -A:append,追加,默認為最后一個
        -I:insert,插入,默認為第一個
        -D:delete,刪除,指定鏈中的某一條規則,可以按規則序號和內容刪除
        -R:replace,替換,指定鏈中的某一條規則,可以按規則序號和內容替換
        -F:flush,清空
        -Z:zero,置0,將所有表的所有鏈的字節和數據包計數器清零
        -S:selected,以iptables-save命令的格式顯示鏈上的規則

    查看:
        -L:list,列出規則
        -n:numeric,以數字格式顯示地址和端口
        -v:verbose,詳細信息,-vv,-vvv
        -x:exactly,顯示計數器的精確值而非單位換算后的結果
        --line-numbers:顯示鏈上的規則編號

        組合:-nvL

匹配條件:

    基本匹配:netfilter自帶的匹配機制
        [!] -s:指定作為源地址匹配,這里不能指定主機名稱,必須是IP
            IP | IP/MASK | 0.0.0.0/0.0.0.0
        [!] -d:目標地址匹配
        [!] -i:限制報文流入的接口,只能用于PRETOUTING,INPUT及FORWD
        [!] -o:限制報文流出的接口,只能用于OUTPUT,FORWARD及POSTROUTING

            注:加"!"表示取反

    擴展匹配:需要加載擴展模塊,經由擴展模塊引入的匹配機制,-m matchname
        隱式擴展:可以不用使用-m選項專門加載相應模塊,前提是要使用-p選項指明可匹配何種協議
            [!] -p:限制協議,tcp,udp,icmp,icmpv6,esp,ah,sctp,mh or "all"
                tcp:隱含指明了"-m tcp",有專用選項:
                    [!] --sport port[:port]:匹配報文中的tcp首部的源端口,可以是端口范圍
                    [!] --dport port[:port]:匹配報文中的tcp首部的目標端口,可以是端口范圍
                    [!] --tcp-flags mask comp:檢查報文中的mask指明的tcp標志位,而這些標志位comp中必須為1

                udp:隱含指明的"-m udp",有專用選項:
                    [!] --sport port[:port]:匹配報文中的udp首部的源端口,可以是端口范圍
                    [!] --dport port[:port]:匹配報文中的udp首部的目標端口,可以是端口范圍

                icmp:隱含指明了"-m icmp",有專用選項:
                    [!] --icmp-type {type[/code]|typename}
                        type/code:
                            0/0:echo reply
                            8/0:echo request

        顯式擴展:必須由-m選項專門加載相應模塊
            multiport:多端口匹配,以離散方式定義多端口匹配,最多可以指定15個端口
                [!] --sports port[,port|,port:port]...
                [!] --dports port[,port|,port:port]...
                [!] --ports port[,port|,port:port]...

                示例:
                    iptables -I INPUT -s 0/0 -d 10.1.8.93 -p tcp -m multiport --dport 22,80 -j ACCEPT

            iprange:指明一段連續的ip地址范圍作為源地址或目標地址匹配
                [!] --src-range from[-to]:源地址范圍
                [!] --dst-range from[-to]:目標地址范圍

            string:對報文中的應用層數據做字符串匹配檢測
                --algo {bm|kmp}:(bm = Boyer-Moore, kmp = Knuth-Pratt-Morris)
                [!] --string pattern:給定要檢查的字符串模式
                [!] --hex-string pattern:給定要檢查的字符串模式

                示例:
                    iptables -I OUTPUT -d 0/0 -s 10.1.8.93 -p tcp -m string -algo bm --string "old" -j REJECT

            time:根據收到的報文的時間/日期與指定的時間/日期范圍進行匹配
                --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]:起始日期時間
                --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:結束日期時間

                --timestart hh:mm[:ss]:起始時間
                --timestop hh:mm[:ss]:結束時間

                [!] --monthdays day[,day...]:匹配一個月中的哪些天
                [!] --weekdays day[,day...]:匹配一周的哪些天

            connlimit:根據客戶端主機做并發連接數限制,及每客戶端最多可同時發起的連接數量
                --connlimit-upto n:連接數量小于等于n則匹配
                --connlimit-above n:連接數量大于n則匹配

                示例:
                    iptables -A INPUT -s 0/0 -d 172.18.100.6 -p tcp --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT

            limit:基于令牌桶算法對報文的速率做匹配
                -limit rate[/second|/minute|/hour|/day]
                --limit-burst number

                示例:
                    ptables -R INPUT 3 -d 172.18.100.6 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 3 -j ACCEPT

目標動作:

    ACCERT
    DORP
    REJECT
    RETURN:返回調用的鏈
    REDIRECT:端口重定向
    LOG:日志
    MARK:防火墻標記
    DNAT:目標地址轉換
    SNAT:源地址轉換
    MASQERADE:地址偽裝

規則的有效期限

  iptables命令添加的規則,手動刪除之前,其生效期限為kernel的生命周期。

保存規則:
  CentOS 6:

    # service iptables save

    # iptables-save > /etc/sysconfig/iptables

    # iptables-save > /PATH/TO/SOME_RULL_FILE

   CentOS 7:

    # iptables -S > /PATH/TO/SOME_RULL_FILE

    # iptables-save > /PATH/TO/SOME_RULL_FILE       

重載預存的規則:
    # iptables-restore < /PATH/TO/SOME_RULL_FILE

  CentOS 6:
    service iptables restart
      會自動從/etc/sysconfig/iptables文件中重載規則        

自動生效規則文件中的規則:
  1、把iptables命令放在腳本文件中,讓腳本文件開機自動運行
    /etc/rc.d/rc.local
      /usr/bin/iptables.sh

  2、用規則文件保存規則,開機自動重載命令
    /etc/rc.d/rc.local
      iptables-restore < /PATH/TO/SOME_RULL_FILE

  

 

原創文章,作者:641348038@qq.com,如若轉載,請注明出處:http://www.www58058.com/68774

(0)
641348038@qq.com641348038@qq.com
上一篇 2017-02-16
下一篇 2017-02-16

相關推薦

  • 程序包管理的前端工具YUM及案例一二

    程序包管理前端工具–YUM        yum:yellowdog update modifier        yum工具為CS架構 yum倉庫(yum repository):yum repo   &n…

    Linux干貨 2016-08-24
  • 好好學習 天天向上 先試試

    Linux干貨 2016-10-27
  • 任務計劃配置

        任務計劃:         linux任務計劃,周期任務執行         未來的某個時間點執行一次任務:at,batch:系統自行選擇空閑時間去執行此處指定的任務 &n…

    Linux干貨 2016-09-12
  • linux用戶與用戶組詳解

    LINUX用戶與用戶組詳解     1,用戶和用戶組文件   在linux中,用戶帳號,用戶密碼,用戶組信息和用戶組密碼均是存放在不同的配置文件中的。分別是 passed gpassd shadow group 中。   在linux系統中,所創建的用戶帳號和其相關信息(密碼除外)均是存放在/etc…

    Linux干貨 2017-07-22
  • Samba & Vsftp

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程)   1)共享名為shared,工作組為magedu;   2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名;   3)添加s…

    Linux干貨 2016-12-20
  • Linux下常用壓縮工具總結

    gzip: 1)只能針對普通文件進行壓縮,對文件夾、符號鏈接無效。 2)如果想對多個文件一起壓縮并打包,gzip是無法辦到的,需要結合tar進行 [root@mysql-master databackup]# ll 總用量 32 drwx—— 2 root root 4096&nb…

    Linux干貨 2016-12-05

評論列表(1條)

  • luoweiro
    luoweiro 2017-02-22 22:45

    很詳細的iptables介紹,這部分很多同學缺少這樣的總結,在工作實際中遇到問題就比較難排查,雖說實際工作通常關閉了,但是掌握這部分知識還是非常重要的,很贊。

欧美性久久久久