iptables的概述及應用(一)

Iptables

 

Iptables是屬於網絡層的防火牆,但是並不正真意義上是防火牆,因爲iptables/netfilter是一個組件,iptables只是負責編寫規則並提交給netfilter做執行的規則生成器。Netfiter是在linux內核中TCP/IP協議棧中工作的一個框架,從軟件的角度來將是在TCP/IP協議棧中做了五個鉤子函數,這五個鉤子函數可非常準確的執行iptables所編寫的規則並實現規則中相關的攔截和放行。規則的功能分別爲raw,mangle,nat,filter四種,這些規則統稱爲表;而鉤子函數分爲PREROUTINGINPUTFORWARDOUTPUTPOSTOUTING五種,這些鉤子函數統稱爲鏈

鉤子函數是指:

            PREROUTING:馬上就要到本機時,簡稱爲路由前

            INPUT:到達本機內部的報文必經之路

            FORWARD:由本機轉發的報文必經之路

            OUTPUT:由本機發出的報文的必經之路

            POSTROUTING:馬上就要離開本機,簡稱爲路由後

規則的功能是指:

             filter:過濾,定義是否允許通過防火牆

             nat:地址轉換,用於轉換源地址和源端口或目標地址和目標端口

             mangle:用於修改報文首部某些特性但不修改IP

             raw:目標是爲nat表上啓用的連接追蹤功能

 

表和鏈的對應關係:

             filter:INPUT, FORWARD, OUTPUT

             nat:PREROUTINGSNAT),POSTROUTINGDNAT),OUTPUT

             mangle:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

             raw:PREROUTING, OUTPUT

下爲圖解:

                   wKiom1P0o2vzix3MAAK7vfvP5xw292.jpg

使用iptables編輯完規則後是可以直接生效的,因爲iptables編輯完成以後會自動發往netfilter內,netfilter接收到以後便立即執行

下面說下iptables編寫規則的基本使用

Iptables的基本語法

  iptables[-t TABLE] COMMAND CHAIN  CRETIRIA -jTARGET

      -t TABLE: 表示指定規則

        nat, mangle, raw, filter

          默認爲filter

       COMMAND  鏈中的命令

         -Fflush,清空規則鏈

         -N: new,自建一條鏈

         -X: delete, 刪除一條自定義的空鏈

         -Zzero 計數器歸零

         -Ppolicy,設置默認策略,對filter表來講,默認規則爲ACCEPTDROP

         -E:重命名自定義鏈

       鏈中的規則:

         -A:增加

         -I:插入

         -D:刪除

         -R:修改、替換

       查詢:

         -L

          -n:數字格式顯示主機地址和端口;

          -v:詳細格式

          -line--numbers: 顯示規則編號

  匹配條件分爲通用匹配和擴展匹配,擴展匹配又分爲隱式匹配和顯示匹配,下面是匹配條件的具體命令

通用匹配:

         -s  地址: 指定報文源IP地址的匹配的範圍,可以是IP也可以是網絡地址;可使用!取反, --src--source-s表達的意思一樣

         -d 地址:指定報文目標IP地址匹配的範圍,--dst--destination-d表達的意思一樣

         -p 協議:指定匹配報文的協議類型,一般有三種tcp,udpicmp;

         -i INTERFACE: 數據報文流入的接口;PREROUTING,INPUT, FORWARD

         -oINTERFACE: 數據報文流出的接口;OUTPUT, FORWARD, POSTROUITING

擴展匹配:

  隱式擴展:

   -ptcp [-m tcp]

       --sportPORT[-PORT]:指定源端口

       --dport:指定目標端口

       --tcp-flag要檢查標誌位列表(用逗號分隔)必須爲1的標誌位列表(逗號分隔)

   -p udp [-m udp]

       --sport:指定源端口

       --dport:指定目標端口

   -picmp [-m icmp]

       --icmp-type

        0: echo-reply,ping響應

        8:echo-request, ping請求

顯示擴展:

    -m擴展模塊名稱(模塊:是iptablesnetfilter各擁有的一部分代碼;在添加模塊時可使用“,”和“: ,表示離散的、:表示連續的)


multiport:多端口匹配(可用於匹配非連續或連續端口;最多指定15個端口;在添加模塊時可使用,和: ,表示離散的,:表示連續的)

專用選項:

   --source-ports, --sportsport[,port,port:port]

   --destination-ports, --dports

    --ports

iprange:匹配指定範圍內的地址;匹配一段連續的地址而非整個網絡時有用;

專用選項:

 [!]--src-range:源地址或地址段[!表示可以取反]

  --dst-range:目標地址或地址段    

string:字符串匹配,能夠檢測報文應用層中的字符串(字符匹配檢查高效算法kmp, bm

專用選項:

    --algo {kmp|bm}:比較時的算法

    --string "STRING"

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

                                       (注:stringhex-string中選其一使用就可以)

time:基於時間做訪問控制

專用選項:

    --datestart:起始時間 YYYY[-MM][-DD[Thh[:mm[:ss]]]]

    --datestop :結束時間  

    --timestart    hh:mm[:ss]

     --timestop     hh:mm[:ss]             

     --weekdays:設定以星期爲單位  day[,day] Mon.Tues.Wed.Thur.Fri.Sat.Sun

connlimit:連接數限制,對每IP所能夠發起併發連接數做限制;

專用選項:

     --connlimit-above [n]:大於所設定的數字就拒絕,小於就允許

 

limit:速率限制

專用選項:

     --limit n[/second|/minute|/hour|/day]

    --limit-burst nn表示個數)

state:狀態檢查

專用選項:

 --state

 連接追蹤中的狀態:

NEW: 新建立一個會話

ESTABLISHED:已建立的連接

RELATED: 有關聯關係的連接

INVALID: 無法識別的連接

       調整連接追蹤功能所能容納的連接的最大數目:

        /proc/sys/net/nf_conntrack_max           

       記錄當前追蹤的所有連接

          /proc/net/nf_conntrack 

        不同協議或連接類型追蹤時的屬性:   

        /proc/sys/net/netfilter目錄:

處理目標:

  內置目標:

       DROP:表示拒絕

       REJECT:有狀態的拒絕

       ACCEPT:允許

       自定義鏈:爲自己根據需求所設定的鏈

 

 Iptables的常用命令已經介紹完了,下面爲大家舉例說明命令的使用
1、設定172.16.0.0網段的無法ping通172.16.25.1主機
root@localhost~]# iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.25.1 -p icmp -j DROP
2、查看設定的情況
[root@localhost~]# iptables -L -n –v
3、刪除INPUT中設定的第一條策略
[root@localhost~]# iptables -D INPUT 1
4、再設置INPUT,OUTPUT鏈默認target爲DROP,一定要將遠程端口設定爲打開,否則也會把自己擋在防火牆之外
[root@localhost~]# iptables -A INPUT -i eth0 -s 172.16.0.0/16 -d 172.16.25.1 -p tcp --dport 22-j ACCEPT
[root@localhost~]# iptables -A OUTPUT -s 172.16.25.1 -d 172.16.0.0/16 -p tcp --sport 22 -jACCEPT
5、設置INPUT, OUTPUT鏈默認target爲DROP,也就是外部與服務器不能通信
[root@localhost~]# iptables -t filter -P INPUT DROP
[root@localhost~]# iptables -t filter -P OUTPUT DROP
6、修改在使用遠程訪問本機時只能通過eth0的端口訪問
[root@localhost~]# iptables -R OUTPUT 1 -s 172.16.25.1 -d 172.16.0.0/16 -o eth0 -p tcp --sport22 -j ACCEPT
7、插入一條對應規則,可以使本主機ping自己的迴環地址
[root@localhost~]# iptables -I INPUT -i lo -j ACCEPT
[root@localhost~]# iptables -I OUTPUT -o lo -j ACCEPT
8、設置本機可以ping其他主機
[root@localhost~]# iptables -R INPUT 2 -d 172.16.25.1 -p icmp --icmp-type 0 -j ACCEPT
[root@localhost~]# iptables -A OUTPUT -s 172.16.25.1 -p icmp --icmp-type 8 -
j ACCEPT
9、添加multiport模塊,設置只能使用訪問本機的22和80端口的服務
[root@localhost~]# iptables -I INPUT -d 172.16.25.1 -p tcp -m multiport --dports 22,80 -jACCEPT
[root@localhost~]# iptables -R OUTPUT 1 -s 172.16.25.1 -p tcp -m multiport --sports 22,80 -jACCEPT
10、添加iprange模塊,設置只能某個網段使用telnet來訪問本主機
[root@localhost~]# iptables -I INPUT -d 172.16.25.1 -p tcp --dport 23 -m iprange --src-range172.16.25.1-172.16.25.210 -j ACCEPT
[root@localhost~]# iptables -I OUTPUT  -s 172.16.25.1 -ptcp --sport 23 -m iprange --dst-range 172.16.25.1-172.16.25.210
11、添加string模塊,設置只要出現所設定的字符就會出現拒絕訪問
[root@localhost ~]# iptables -I OUTPUT-m string --algo kmp --string "game" -j DROP
12、添加time模塊,設定在工作日的9點到17點拒絕訪問本主機的web服務
[root@localhostwordpress]# iptables -I INPUT -d 172.16.25.1 -p tcp --dport 80 -m time--timestart 09:00 --timestop 17:00 --weekdays Tue,Thur -j DROP
13、添加connlimit模塊,限制連接數
[root@localhostwordpress]# iptables -A INPUT -d 172.16.25.1 -p tcp --dport 22 -m connlimit--connlimit-above 2 -j DROP
14、添加limit模塊,限制速率
[root@localhostwordpress]# iptables -A INPUT -d 172.16.25.1 -p icmp --icmp-type 8 -m limit--limit 20/m --limit-burst 7 -j ACCEPT
15、state的使用
1)使用state模塊設置ssh和web的出入策略
[root@localhost~]# iptables –A INPUT –d 172.16.25.1 –p tcp –m multiport --dports 22,80 –mstate –state NEW –j ACCPET
[root@localhost~]#iptables –I INPUT –d 172.16.25.1 –p tcp –m state –state ESTABLISHED –jACCEPT
[root@localhost~]#iptables –I OUTPUT –s 172.16.25.1 –p tcp –m state –state ESTABLISHED –jACCEPT
2)設置被動連接的ftp服務
[root@localhost~]# modprobe nf_conntrack_ftp
[root@localhost~]# iptables -AINPUT -d 172.16.25.1 -p tcp -m state --state RELATED -j ACCEPT
[root@localhost~]#iptables-R OUTPUT 1 -s 172.16.25.1 -m state --state ESTABLISHED,RELATED -j ACCEPT

 


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