Iptables基礎

   Firewall:防火墻,工作于主機或網絡的邊緣處,對于進出本主機或網絡的報文根據事先定義好的檢查規則左匹配檢測,對于能夠被規則所匹配到的報文進行相應的處理的組件。

  防火墻可分為:硬件防火墻,在硬件級別實現部分功能的防火墻;軟件防火墻,應用軟件處理邏輯運行于通用硬件平臺之上的防火墻;主機防火墻,服務范圍為當前主機;網絡防火墻,服務范圍為局域網。

   在設置防火墻時建議設置白名單,這樣要更加穩妥。

iptables的組成,四表五鏈:

    功能()

      raw關閉nat表上啟用的連接追蹤機制;

      mangle:拆解報文,做出修改,并重新封裝;

      natnetwork address
translation
,用于修改源IP或目標IP,也可以修改端口;

      filter:過濾,防火墻;

    Chain

      PREROUTINGINPUT、FORWARD、OUTPUT、POSTROUTING

    功能–鏈:

      rawPREROUTING、OUTPUT

      manglePREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

      natPREROUTING、OUTPUT、POSTROUTING

      filterINPUT、FORWARD、OUTPUT

報文流向

    流入本機:PREROUTING–>INPUT

    由本機流出:OUTPUT–>POSTROUTING

    轉發:PREROUTING–>FORWARD–>POSTROUTING

Iptables基礎

      

規則

   組成部分根據規則匹配條件來嘗試匹配報文,一旦匹配成功,就由規則定義的處理動作做出處理;

  查看規則

    iptables -L list,列出指定鏈上的所有規則;

          –line-numbers:顯示規則在當前鏈上的序號;

    注意:下邊的是選項用來修飾命令的放在前邊

         -nnumberic,以數字格式顯示地址和端口號,跳過反解;

          -vverbose,詳細信息;pkts包數量 bytes字節數

           -vv, -vvv

         -xexactly,顯示計數器結果的精確值;

    查看某個特定的鏈后邊直接加上鏈名即可:iptables -vnL INPUT

定義規則的格式

    iptables [-t
table] COMMAND chain [-m matchname [per-match-options]] –j targetname [per-target-options]

       [-t table]默認是filter

    COMMAND

        -Nnew,自定義一條新的規則鏈

        -Xdelet,刪除自定義的規則鏈;注意:若是有引用、規則、不是自定義鏈的都刪不掉;

        -Ppolicy,設置默認策略;對于filter表中的鏈而言,默認的策略有:ACCEPT:接受;DROP:丟棄;REJECT:拒絕,立即回應;

        -E:重新命名自定義鏈;引用記數不為0的自定義鏈不能夠重命名。

        規則管理:

           -Aappend,追加;

           -Iinsert, 插入,要指明位置,省略時表示第一條;

           -Ddelete,刪除;

              (1)指明規則序號;

              (2)指明規則本身;

           -Rreplace,替換指定鏈上的指定規則,要替換整個規則本身;

           -Fflush,清空指定的規則鏈;

           -Zzero,置零;后加上指定置零的鏈,不加默認為將指定表上的鏈的規則全部置零

匹配條件:

    基本匹配條件:無需加載任何模塊,由iptables/netfilter自行提供

       -s:源地址;

       -d:目標地址;

       -p:協議tcp,udp,udplite,icmp,icmpv6,esp,ah,sctp,mh or “all”

       -i,–in-interface name(網卡名):數據報文流入的接口;只能應用于數據報文流入的環節,只能應用于PREROUTING,INPUTFORWARD鏈;

       -o,–out-interface name(網卡名):數據報文流出的接口;只能應用于數據報文流出的環節,只能應用于FORWARD、OUTPUTPOSTROUTING

       

    擴展匹配條件:需要加載擴展模塊,方可生效;

      隱式擴展:不需要手動加載擴展模塊;因為它們是對協議的擴展,所以,但凡使用-p指明了協議,就表示已經指明了要擴展的模塊;

        tcp

         –source-port, –sport port[:port]:匹配報文的源端口;可以是端口范圍;

         –destination-port,–dport port[:port]:匹配報文的目標端口;可以是端口范圍;

         –tcp-flags  mask  comp

             mask是我們應該檢查的flag,寫成逗號分隔的列表: SYN,ACK,FIN,RST

            comp是以逗號分隔的必須設置的標志列表 :SYN

         例如:“–tcp-flags  SYN,ACK,FIN,RST  SYN”表示,要檢查的標志位為SYN,ACK,FIN,RST四個,其中SYN必須為1,余下的必須為0;

         –syn:用于匹配第一次握手,相當于”–tcp-flags  SYN,ACK,FIN,RST  SYN“;                             

       udp

         –source-port, –sport port[:port]:匹配報文的源端口;可以是端口范圍;

         –destination-port,–dport port[:port]:匹配報文的目標端口;可以是端口范圍;

                               

       icmp ping)用來探測網絡通信的

         –icmp-type {type[/code]|typename}

               echo-request8

               echo-reply0

eg:

    允許其他主機ping通本機

     iptables -A INPUT -d 172.16.250.31 -p icmp -j ACCEPT

     iptables -A OUTPUT -s 172.16.250.31 -p icmp -j ACCEPT

    允許自己ping別人而別人無法ping自己

    iptables -I OUTPUT 2 -s 172.16.250.31 -p tcp icmp –icmp-type 8 -j ACCEPT

    iptables -I INPUT 2 -s 172.16.250.31 -p tcp icmp –icmp-type 0 -j ACCEPT

                        

    顯式擴展:必須要手動加載擴展模塊, [-m matchname [per-match-options]];

          1、multiport擴展,以離散或連續的方式定義多端口匹配條件;最多指定15個端口;

              –source-ports,–sports port[,port|,port:port]…:指定多個源端口;

              –destination-ports,–dports port[,port|,port:port]…:指定多個目標端口;

              –ports port[,port|,port:port]…:指明多個端口;

 egiptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.67 -p tcp -m multiport –dports 22,80 -j ACCEPT

         2、iprange擴展指明連續的ip地址范圍;

            –src-range from[-to]:源IP地址;

            –dst-range from[-to]:目標IP地址;

eg iptables -A INPUT -d 172.16.100.67 -p tcp –dport 80 -m iprange –src-range 172.16.100.5-172.16.100.10 -j DROP

         3、string擴展,對報文中的應用層數據做字符串模式匹配檢測;

            –algo {bm|kmp}:字符串匹配檢測算法;

                bmBoyer-Moore

                kmpKnuth-Pratt-Morris

            –string pattern:要檢測的字符串模式;

            –hex-string pattern:要檢測的字符串模式,16進制格式;

    eg iptables -A OUTPUT -s 172.16.100.67 -d 172.16.0.0/16 -p tcp –sport 80 -m string –algo bm –string “gay” -j REJECT

        4、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…]

            –kerneltz:使用內核上的時區,而非默認的UTC;

    eg iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.67 -p tcp –dport 80 -m time –timestart 14:30 –timestop 18:30 –weekdays Sat,Sun –kerneltz -j DROP

       5、connlimit擴展,根據每客戶端IP做并發連接數數量匹配限制;

           –connlimit-upto n:連接的數量小于等于n時匹配;

           –connlimit-above n:連接的數量大于n時匹配;

    egiptables -A INPUT -d 172.16.100.67 -p tcp –dport 21 -m connlimit –connlimit-above 2 -j REJECT

       6、limit擴展,基于收發報文的速率做限制;

          令牌桶過濾器;

           –limit rate[/second|/minute|/hour|/day]

           –limit-burst number 最多能有多少報文

    eg iptables -I INPUT -d 172.16.100.67 -p icmp –icmp-type 8 -m limit –limit 3/minute –limit-burst 5 -j ACCEPT

       iptables -I INPUT 2 -p icmp -j REJECT

    限制本機某tcp服務接收新請求的速率:–syn ,-m limit

       7、state擴展,根據”連接追蹤機制“去檢查連接的狀態;

           conntrack機制:追蹤本機上的請求和響應之間的關系;狀態有如下幾種:

           NEW:新發出請求;連接追蹤模板中不存在此連接的相關信息條目,因此,將其識別為第一次發出的請求;

           ESTABLISHEDNEW狀態之后,連接追蹤模板中為其建立的條目失效之前期間內所進行的通信狀態;

           RELATED:相關聯的連接;如ftp協議中的數據連接與命令連接之間的關系;要想開放ftp功能需要手動裝載 nf_conntrack_ftp

           INVALID:無效的連接;

           UNTRACKED:未進行追蹤的連接;

               –state STATE

eg

    iptables -A INPUT -d 172.16.100.67 -p tcp -m multiport –dports 22:23,80,139,445,3306 -m state –state NEW -j ACCEPT

iptables -A INPUT -d 172.16.100.67 -m state –state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -s 172.16.100.67 -m state –state ESTABLISHED -j ACCEPT

iptables -A INPUT -d 172.16.100.67 -j REJECT

iptables -A OUTPUT -s 172.16.100.67 -j REJECT

這一套下來,將IP地址為172.16.100.67的主機的基于tcp22,23,80,139,445,3306端口開放,其他主機都可以訪問,而其他未開放的端口無法訪問。

 

這里對于規則優化提出一些建議

    服務器端規則設定:任何不允許的訪問,應該在請求到達時給予拒絕;

    (1)優先放行雙方向狀態為ESTABLSHED的報文

    (2)服務于不同類別的功能的規則,匹配到報文可能性更大的放前面

    (3)服務于同一類別的功能的規則,匹配條件較嚴格的放在前面

    (4)設置默認策略:白名單機制

      aiptables -P,不建議;

      b)建議在規則的最后定義規則作為默認策略;

處理動作:

   -j targetname [per-target-options]

      ACCEPT

      DROP

      REJECT

      RETURN:返回調用鏈;

      REDIRECT:端口重定向;

      LOG:記錄日志;

      MARK:做防火墻標記;

      DNAT:目標地址轉換;

      SNAT:源地址轉換;

      MASQUERADE:地址偽裝;

                             

 

   添加規則時要考慮:1、實現哪種功能:判斷添加到那個表上;

            2、報文流經的路徑:判斷添加到哪個鏈上;

     鏈上的規則次序,即為檢查的順序,要注意:

             1、同類規則(訪問同一應用),范圍小的要放在上面;

            2、不同類的規則(訪問不同規則),匹配到報文頻率較大的放在上面;

            3、將那些可由一條規則描述的多個規則合并起來;

            4、設置默認策略。

    規則讀取優先級:由上到下,所以編寫規則先小范圍再大范圍

eg1

            設置白名單,將所有的鏈置為DROP

   允許172.16.網段的ip地址以tcp協議的服務訪問本機(能夠放行ssh服務,注意在做測試時先放行自己的ssh服務)

iptables -A INPUT -s 172.16.0.0/16 -d 172.16.250.31 -p tcp -j ACCEPT

iptables -A OUTPUT -s 172.16.250.31 -d 172.16.0.0/16 -p tcp -j ACCEPT

(為防止不小心清空規則后,無法通過ssh連接主機)

之后可以設置:iptables -P INPUT DROP;

 iptables -P OUTPUT DROP ;

 iptables -P FORWARD DROP

 將其他規則都設置為DROP(默認規則是ACCEPT

eg2

加入一條只開放ssh服務的規則

iptables I INPUT -s 172.16.0.0/16 -d 172.16.250.31 -p tcp –dport 22 -j ACCEPT

iptables I OUTPUT -s 172.16.250.31 -d 172.16.0.0/16 -p tcp –sport 22 -j ACCEPT

加入上一條規則后,可以加入 :iptables -A INPUT -d 172.16.250.31 -j REHECT

iptables -A OUTPUT -s 172.16.250.31 -j REJECT

或者修改網卡<一般用這個>iptables -A INPUT -i ens33 -j REJECT

iptables -A OUTPUT -i ens33 -j REJECT,

因為此規則范圍很大,將其放在最后,之后再添加規則要放在其前面)

若是默認規則修改過,則將默認規則修改為:

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

規則的用效期限:

    使用iptables命令定義的規則,手動刪除之前,其生效期限為kernel存活期限;

保存規則:

    保存規則至指定的文件:

     CentOS 6

       service iptables save

        將規則保存至/etc/sysconfig/iptables文件中;

            iptables-save  >  /PATH/TO/SOME_RULES_FILE

                    

     CentOS 7:

       iptables-save > /PATH/TO/SOME_RULES_FILE

重新載入預存規則文件中規則:

 CentOS 7:          

   iptables-restore < /PATH/FROM/SOME_RULES_FILE

       -n,–notfush:不清除原有規則

     他,-test:僅分析生成規則集,但不提交

 CentOS 6

    service iptables restart

默認重載/etc/sysconfig/iptables文件中的規則

配置文件:/etc/sysconfig/iptables-config

                    

自動生效規則文件中的規則

      (1) 用腳本保存各iptables命令;讓此腳本開機后自動運行;

            /etc/rc.d/rc.local文件中添加腳本路徑;

               /PATH/TO/SOME_SCRIPT_FILE  

      (2) 用規則文件保存各規則,開機時自動載入此規則文件中的規則;

            /etc/rc.d/rc.local文件添加:

               iptables-restore
< /PATH/FROM/IPTABLES_RULES_FILE

 

原創文章,作者:Immortals、zcy,如若轉載,請注明出處:http://www.www58058.com/78268

(0)
Immortals、zcyImmortals、zcy
上一篇 2017-06-19 16:15
下一篇 2017-06-19 17:22

相關推薦

  • 第一周:Linux基礎之常用命令(二)

    一、Linux的命令使用格式 命令的語法通用格式: ~]# COMMAND  OPTIONS  ARGUMENTS   命令  選項  參數 1.  COMMAND,命令:發起命令時將請求內核將某個二進制程序運行為一個進程,命令本身是一個可執行的程序文件,二進制格式的文件有可能會調用共享庫文件。 多…

    Linux干貨 2016-09-18
  • CentOS系統啟動流程與grub

    本文主要講述CenOS系統啟動的整個流程。 對于CentOS系統來說,整個啟動過程可分為4個階段,分別是:加點自檢,加載MBR,加載內核并執行初始化信息,初始化用戶空間。下面就具體來描述每個過程都做了什么。 一.加點自檢(power on system test,POST) 任何一種操作系統的啟動,第一步必定是加點自檢,主要功能是裝載在硬件芯片CMOS之上的…

    Linux干貨 2016-11-29
  • 系統之鍬sysdig:Linux服務器監控和排障利器

    當你需要追蹤某個進程產生和接收的系統調用時,首先浮現在你腦海中的是什么?你可能會想到strace,那么你是對的。你會使用什么樣的命令行工具來監控原始網絡通信呢?如果你想到了tcpdump,你又作出了一個極佳的選擇。而如果你碰到必須追蹤打開的文件(在Unix意義上:一切皆文件)的需求,可能你會使用lsof。 strace、tcpdump以及lsof,確實是些偉…

    Linux干貨 2015-02-09
  • N25-第三周作業

    1.列出當前系統所有已經登錄的用戶的用戶名,注意同一個用戶登錄多次,只顯示一次即可   who | cut -d" " -f1 |uniq 2.取出最后登錄到當前系統的用戶的相關信息    w | tail -1 3.取出當前系統上被用戶當做其默認shell最多的那個shell &nbsp…

    Linux干貨 2016-12-19
  • RAID[Redundant Array of Independent Disks | 獨立硬盤冗余陣列 ]

    前言 一個技術要知其然還要知其所以然 RAID 獨立硬盤冗余陣列(RAID, Redundant Array of Independent Disks),舊稱廉價磁盤冗余陣列(Redundant Array of Inexpensive Disks),簡稱磁盤陣列 RAID的基本思想 其基本思想就是把多個相對便宜的硬盤組合起來,成為一個硬盤陣列組,使性能達到…

    Linux干貨 2016-05-20
  • N25期–第十四周作業

    系統的INPUT和OUTPUT默認策略為DROP; # iptables -P INPUT DROP # iptables -P OUTPUT DROP 1、 限制本地主機的web服務器在周一不允許訪問;新請求的速率不能超過100個每秒;web服務器包含了admin字符串的頁面不允許訪問;web服務器僅允許響應報文離開本機;   #iptables…

    Linux干貨 2017-04-10
欧美性久久久久