瞭解IPtables的工作方式

Firewall:工作域、於主機或網絡邊緣,對於進出的報文根據規則定義的規則作檢查,進而對被規則匹配的報文作爲相應的處理。主要分爲網絡防火牆和主機防火牆

IDS(***檢測系統):Instrusion Detect System

         分別爲以下兩種:   HIDS;Host IDS; NIDS: Network IDS

IPS:(***防禦系統Intrusion Protect System)

HoneyPot: 蜜罐,誘引不法信息進入,使用反向追蹤

bt(backtrack):安全工具發行版

安全評估工具:Nessus、nmap、

 

用戶編寫規則:先確定功能(表),確定報文的流向,確定要實現的目標,確定匹配條件

    規則的功能:

    raw、mangle、nat、fitler

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

    nat: 地址轉換,啓用connection_track

    mangle: 修改tcp/ip的首部

    raw:讓用戶的請求在經過Network時,爲nat表上啓用連接追中功能

iptables結構圖

   表和鏈的對應關係

   fitler:INPUT,FORWARD,OUTPUT

   nat:PREROUTING(SNAT),POSRTOUTING,OUTPUT

   mangle:修改報文中某些值的特性 ,-->所有位置都可以修改

   raw:那裏能做nat就在那裏做

image

iptables中的錶鏈關係2

   ======================================================================

數據報文的流程

       跟本機內部的進程通信

       進入:-->PREROUTING-->INPUT

       出去:-->OUTPUT-->POSTROUTING

     由本機轉發

      請求:-->PREROUTING-->FORWARD-->POSTROUTING-->

      響應:-->PREROUTING-->FORWARD-->POETROUTING

      如果規則中限定原地址、目標地址、源端口、目標端口等與流向相關的設定

     數據報文的流向:

       源IP和目標IP有流向決定

Iptables中的錶鏈關係1

PREROUTING:路由前

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

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

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

POSTROUTING:路由後

 

規則文件/etc/sysconfig/iptables

     保存啓用中的規則到規則文件中

      1、#iptables-save > /etc/sysconfig/iptables

      2、#service iptables save

     生效規則文件中的規則

      1、#iptables-restore < /etc/sysconfig/iptables

      2、#service iptables restart

      執行的操作,清空現有規則,讀取並生效規則文件中的規則

寫規則時

     作爲服務器端:先進後出

     作爲客戶端:先出後進

icmp:控制消息協議

iptables:用戶空間的工具,寫規則,併發送給netfilter,立即生效

netfilter;接受並生效規則(真正意義上的防火牆)

======================================================================

基本語法:

格式:  iptables [-t TABLE] COMMAND CHAIN CRETIRIA -j TARGET  

     -t TABLE: 默認是filter,其他選項:nat 、mangle、 raw

     COMMAND :

       -F :flush ,清空規則鏈

       -N:new,自建一條鏈

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

       -Z:zero,計數器歸零

       -p:policy,設定默人策略,對filter表來講。默認規則爲ACCEPT或DROP

       -E  : rEname,重命名自定義的鏈

鏈中的規則

       -A:Append,在鏈末添加一條規則,

       -D:Insert, 刪除一條或多條規則,可以指定鏈中的序號

       -I :Delete,插入條新規則

       -R:Replce,修改一條規則,

查詢:

      -L  :list

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

          -v:顯示詳細信息 ;vv,vvv,vvvv

          --line-number:顯示規則行號

          -x:exactly,詳細信息,不作單位換算 ,而顯示其精確值

         pkts    bytes    target  prot   opt in        out          source    destination

         包數    字節數    目標   協議   流入接口    流出接口  源地址      目標地址

==========================================================================

格式:iptables     [-t TABLE]     -A     鏈名     匹配條件      -j     處理目標

匹配條件:

通用匹配

    -s 地址:指定報文源的IP地址匹配的範圍,可以是IP地址或者網絡地址,使用!取反

        --src,--source

    -d 地址:自定目標的IP地址的匹配的範圍,可以是IP地址或者網絡地址,使用!取反

          --dst,--destiantion

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

    -i  INTERFACE: 數據報文流入的接口:prerouting,input,forward

    -o  INTERFACE:數據包流出的接口:output,forward,postrouting

擴展匹配:調用nstfilter額外模塊實現特殊檢查機制,必須使用-m選項來指定調用那個模塊

    隱式擴展:當使用-p{tcp | udp | icmp}指定中的一種時,可以直接使用擴展中的一種選項

        -p tcp == [-m tcp]

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

            --dport PORT[-PORT]:指定目標端口

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

                eg:--tcp-flags syn,ack,rst,fin syn

            --syn

        -p udp == [-m udp]

           --sports [PORT]...:指定源端口

            --dport PORT:指定目標端口

        -p icmp == [-m icmp]

           --icmp-type 

           0:echo-relplay,ping響應

           8:echo-request,ping請求

    顯式擴展:必須明確說明使用那個模塊擴展,才能使用擴展選項

       iptables、netfitler分別擁有模塊的一部分代碼

       -m 擴展模塊的名稱

       mutiport:多端口匹配-->可用於匹配非連續或連續端口(max<=15)

       專用選項

       --source-ports、--sports port[,port,port:port]

       --estination-ports、--dports

       #iptables -I INPUT -d 目標地址 -p tcp -m mutiport --dports 20,80 -j ACCEPT

       #iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT

       ===#watch -n 1 ‘iptables -L -n -v’===查看iptables信息

       iprange:匹配指定範圍內的地址(匹配一段連續的地址而不是整個網絡)

       專用選項

       [!] --src-range IP[-IP]

       [!] --dst-range IP[-IP]

       # iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

       # iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

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

          kmp、bm (基於編碼後的二進制進行匹配比較)

       專用選項

       --slgo {kmp|bm}

       --string "STRING"

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

       #iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP

       表示凡事含有“sex”字符串的響應都不讓出去

       time:基於時間做訪問控制

       專用選項

       --datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]

       --datestop

       --timestop hh:mm[:ss]

       --timestart hh:mm[:ss]

       --weekdays day[,day]

       #iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT

       connlimit:連接數限制,對每個Ip所鞥夠發起併發連接數作限制

       專用選項 (可以取反)

       --connlimit-above [N]

       #iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP

       limit:作速率限制

       專用選項

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

       --limit-burst n

       #iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT

       state:狀態檢查,連接追蹤中的狀態

       NEW:新建立一個會話

       ESTABLISHED:以建立的連接

       RELATED:有關聯關係的連接

       INVALID:無法識別的連接

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

        /proc/sys/net/nf_conntrack_max

       當前追蹤的所有連接

        /proc/net/nf_conntrack

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

        /proc/sys/netfilter目錄

       放行被動模式下的FTP服務

       1)、裝載模塊/lib/modules/KERNEL_VERSION/kernel/net/netfilter/

          模塊:nf_conntrack_ftp

       2)、放行請求報文

           1、放行NEW狀態對21端口請求的報文

           2、放行ESTABLISHED以及RELATED狀態報文

       3)、履行響應報文

         1、放行ESTABLISHED以及RELATED狀態報文

防火牆的分類:

   簡單包過濾防火牆

   帶狀態檢測的包過濾防火牆(不適用於訪問量龐大的站點)

處理目標:

         內置目標:

DROP    拒絕,(悄悄丟棄)

REJECT  拒絕,強行丟棄    

ACCEPT 接受

          #iptables     -t     [filter] -A     INPUT    -s     172.16.0.0/16     -d    172.16.1.1    -p     icmp    -j    {DROP | REJECT}

              ****表示本地主機(172.16.1.1)拒絕來自172.16.網段的主機訪問(即拒絕在網段主機上使用#ping 172.16.1.1)

    自定義的鏈

刪除規則:

格式:iptables    [-t  table]    -D    chain    rulenum

#iptables [-t filter]  -D  INPUT 1    **表示刪除鏈INPUT上的第一條

設置策略

     iptables [-t TABLE]    -P chain target

修改規則

iptables [-t table] -R chain rulenum rule-specification

插入規則

iptables [-t table] -I chain [rulenum] rule-specification

   

==============================================================================

        動態編譯的可執行文件需要附帶一個的動態鏈接庫。在執行時,需要調用其對應動態鏈接庫中的命令。所以其優點一方面是縮小了執行文件本身的體積,另一方面是加快了編譯速度,節省了系統資源。缺點一是哪怕是很簡單的程序,只用到了鏈接庫中的一兩條命令,也需要附帶一個相對龐大的鏈接庫;二是如果其他計算機上沒有安裝對應的運行庫,則用動態編譯的可執行文件就不能運行。

        靜態編譯就是編譯器在編譯可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so或.lib)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴於動態鏈接庫。所以其優缺點與動態編譯的可執行文件正好互補。

==============================================================================

TCP     Wrappers

TCP Wrappers是有/etc/hosts.allow 、/etc/hosta.deny連個文件來管理的一個類似防火牆的機制,但是並非所有的軟件都可以通過這兩個文件管理,被管理的軟件必須具備下面兩個條件:

    1)有xinetd這個超級進程管理的服務

    2)支持libwrap.so模塊的服務

所有我們在實現TCP Wrappers前需要保證安裝了xinetd軟件

查看某軟件是否可以被tcp wrappers管理:

    1)#ldd $(which SERVER_NAME)

    2)查看是否被xinetd管理,沒有則不能使用tcp wrappers

tcp_wrapper通過讀取配置文件中的規則來判定某服務是否可被訪問:

  /etc/hosts.allow  該文件允許,但是可以使用deny對某行規則取反   

  /etc/hosts.deny   該文件拒絕,同樣可以使用allow對某一行規則取反

  編輯上面兩個文件中的規則是即時生效的;

配置文件的語法:

  daemon_list: client_list [:options]

例如:in.telnetd: ALL : spawn /bin/echo `date` login attempt from %c to %s, %d >> /var/log/telnet.log

服務檢查邏輯:client --> /etc/hosts.allow -->(Y) --> ALLOW

      client --> /etc/hosts.allow -->(N) --> /etc/hosts.deny -->(Y) --> DENY

                                                             -->(N) --> ALLOW

優先級:

先以/etc/hosts.allow進行優先比對,規則符合予以放行

再以/etc.hosta.deny進行比對,規則符合則予以抵消

若不再這兩個文件中(或者規則都不符合),予以放行

各項的意義

  daemon_list:

   應用程序程序名稱

   應用程序程序名稱列表:使用逗號分隔

    例如sshd, in.telnetd

   ALL:所有受控進程

client_list:

   IP地址

   主機名

   網絡地址:必須使用完整格式掩碼,不能使用長度掩碼,172.16.0.0/16不合用;

   簡短的網絡地址:172.16. 表示爲 172.16.0.0/255.255.0.0

   ALL: 所有客戶端地址;

   KNOWN:

   UNKNOWN:

   PARANOID:主機名和IP地址的各自的正反解析結果不匹配;

特殊的變量:

    EXCEPT:除了

[:options]

   deny: 通常用於在hosts.allow文件實現拒絕的規則;

   allow: 通常用於在hosts.deny文件實現允許的規則;

   spawn: 啓動一個額外命令


***************待修改。iptables的layer7功能還未添加**************************

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