iptables總結

iptables簡稱為包過濾型防火墻一般分為2種:
    1,主機防火墻:主機防火墻是用來防止本主機內的應用服務被攻擊所需要保護的防火墻
    2,網絡防火墻:做為想路由功能的防火墻凡是進過此服務器的數據包都要進行規則匹配
iptables的架構由功能和鏈組成
    功能:
        filter:過濾,防火墻;
        nat:地址轉換nerwork address translation
        mangle:拆解報文,做出修改,封裝報文
        raw:關閉nat表示啟用的連接追蹤功能(此功能非常消耗CPU)
    每一種功能都會內置幾種鏈:
        PREROUTING-->路由前
        INPUT-->輸入一段
        FORWARD-->由本機轉發
        OUTPUT-->本機內部發出
        POSTROUTING-->在第二次路由決策

在iptables上每一種功能的實現機制都是基于上訴的幾種鏈接:
    流入:PREROUTING-->INPUT
    流出:OUTPUT-->POSTROUTING
    轉發:PEROUTING-->FORWARD-->POSTROUTING

在功能上每一種功能都會內置幾種連接
    filter(過濾):INPUT,FORWARD,OUTPUT
    nat(地址轉換):PERROUTING(DNAT),OUTPUT,POSTROUTING(SNAT)
    mangle(拆解報文,做出修改,封裝報文):PEROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
    raw(關閉nat表示啟用的連接追蹤功能):PREROUTING,OUTPUT

功能優先級:raw>mangle>nat>filter

規則:
    組成部分:報文的匹配條件,匹配到之后處理動作
        匹配條件:根據協議報文特征指定匹配條件
            基本匹配條件
            擴展匹配條件

        處理動作:
            內建處理機制
            自定義處理機制

iptables:規則管理工具
    添加,修改,刪除,顯示等

iptables命令:查看linux上man配置手冊里面會有詳細的解釋
    iptables -t (按照自己的修改查看自己需要找的幾個表默認為filter)
    例如:
    [root@localhost ~]# iptables -t mangle -L -n
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         

    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         

    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         

    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination

上訴為查看iptables中mangle規則         

iptables命令分為2種鏈管理,規則管理
    鏈管理:
        -F:flush,清空規則鏈,省略鏈表示清空指定表上所有的鏈;
        -N:new,創建新的自定義規則鏈;
        [root@localhost ~]# iptables -t filter -N IN_public
        [root@localhost ~]# iptables -L -n
        Chain INPUT (policy ACCEPT)
        target     prot opt source               destination         

        Chain FORWARD (policy ACCEPT)
        target     prot opt source               destination         

        Chain OUTPUT (policy ACCEPT)
        target     prot opt source               destination         

        Chain IN_public (0 references)
        target     prot opt source               destination         
        -X:drop,刪除用戶自定義的規則鏈,必須是空鏈
        [root@localhost ~]# iptables -X IN_public
        [root@localhost ~]# iptables -L -n
        Chain INPUT (policy ACCEPT)
        target     prot opt source               destination         

        Chain FORWARD (policy ACCEPT)
        target     prot opt source               destination         

        Chain OUTPUT (policy ACCEPT)
        target     prot opt source               destination         

        -Z:zero,置零:置零規則計數器;
        -P:policy,為指定鏈設置默認處理策略;對filter表中的鏈而言,默認策略通常有accept(放行),drop(丟棄),reject(拒絕)
        [root@localhost init.d]# iptables -P FORWARD DROP
        [root@localhost init.d]# iptables -L -n
        Chain INPUT (policy ACCEPT)
        target     prot opt source               destination         

        Chain FORWARD (policy DROP)
        target     prot opt source               destination         

        Chain OUTPUT (policy ACCEPT)
        target     prot opt source               destination       
        -E:rename:重命名自定義鏈:引用計數器不為0的自定義鏈無法改名,也無法刪除;
        [root@localhost ~]# iptables -E IN_public hello
        [root@localhost ~]# iptables -L -n
        Chain INPUT (policy ACCEPT)
        target     prot opt source               destination         

        Chain FORWARD (policy ACCEPT)
        target     prot opt source               destination         

        Chain OUTPUT (policy ACCEPT)
        target     prot opt source               destination         

        Chain hello (0 references)
        target     prot opt source               destination     
    規則管理:
        -A:append,將新規則追加于指定鏈的尾部;
        -I:insert,將新規則插入至指定鏈的指定位置;
        -D:delete,刪除指定鏈上的指定規則;
            有兩種指定方式:
            (1)指定匹配條件;
            (2)指定規則編號;
        -R:replace,替換指定鏈上的指定規則:
    查看:
        -L:list,列出指定鏈上的所有規則;
            -n:numberic,以數字格式顯示地址和端口號;
            -v:verbose,顯示詳細信息
            --line-numbers:顯示規則編號;
            -x:exactly,顯示計數器計數結果的精確值;
    匹配條件:
        基本匹配:
            [!]-s,--src,--source IP|Netaddr:檢查報文中源IP地址是否符合此處的指明的地址范圍;
            [!]-d,--dst,--destination IP|Netaddr檢查報文中源IP地址是否符合此處指定的地址范圍;
            [!]-p,--protocol{tcp,udp,icmp}:檢查報文中的協議,即ip首部中的protocols所標識的協議
            -i,--ininterface IFACE:數據報文的流入接口:僅能用于PREROUTING, INPUT及FORWARD鏈上;
            -o, --out-interface IFACE:數據報文的流出接口;僅能用于FORWARD, OUTPUT及POSTROUTING鏈上;
    目標:
        -j TARGET:jum至指定的TARGET
            ACCEPT:接受
            DROP:丟棄
            REJECT:拒絕
            RETURN:返回調用鏈
            REDIRECT:端口重定向
            LOG:記錄日志
            MARK:做防火墻標記
            DNAT:目標地址轉換
            SNAT:源地址轉換
            MASQUERADE:地址偽裝
            自定義鏈:由自定義鏈上的規則進行匹配檢查
        例如:放行本機TCP協議
        [root@localhost ~]# iptables -t filter -A INPUT -d 172.16.0.46 -p tcp -j ACCEPT
        [root@localhost ~]# iptables -L -n
        Chain INPUT (policy ACCEPT)
        target     prot opt source               destination         
        ACCEPT     tcp  --  0.0.0.0/0            172.16.0.46         

        Chain FORWARD (policy ACCEPT)
        target     prot opt source               destination         

        Chain OUTPUT (policy ACCEPT)
        target     prot opt source               destination         
        [root@localhost ~]# iptables -t filter -A OUTPUT -s 172.16.0.46 -p tcp -j ACCEPT
        [root@localhost ~]# iptables -L -n -v
        Chain INPUT (policy ACCEPT 6 packets, 468 bytes)
         pkts bytes target     prot opt in     out     source               destination         
          203 14998 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.16.0.46         

        Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
         pkts bytes target     prot opt in     out     source               destination         

        Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
         pkts bytes target     prot opt in     out     source               destination         
           30  3168 ACCEPT     tcp  --  *      *       172.16.0.46          0.0.0.0/0 
    如果我將INPUT和OUTPUT關閉之后任然可以進行訪問
    [root@localhost ~]# iptables -P INPUT DROP
    [root@localhost ~]# iptables -P OUTPUT DROP
    [root@localhost ~]# iptables -P FORWARD DROP
    [root@localhost ~]# iptables -L -n
    Chain INPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     tcp  --  0.0.0.0/0            172.16.0.46         

    Chain FORWARD (policy DROP)
    target     prot opt source               destination         

    Chain OUTPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     tcp  --  172.16.0.46          0.0.0.0/0           

擴展匹配:-m指明擴展匹配(指明擴展名)--spec_options
    例如:-m tcp --dport 22
    隱式擴展:對-p protocol指明的協議進行擴展,可省略-m選項;
        -p tcp
            --dport PORT[-PORT]:目標端口,可以是單個端口或連續多個端口
            --sport PORT[-PORT]:
            --tcp-flages:

        -p udp
        -p icmp
            --icmp-type
        例如本地可以ping通任意地址,而其他主機無法ping通
        ]# iptables -A INPUT -d 172.16.0.46 -p icmp --icmp-type 0 -j ACCEPT
        ]# iptables -A OUTPUT -s 172.16.0.46 -p icmp --icmp-type 8 -j ACCEPT
    ?。。。。?!這里需要提醒一下在放行http80端口的時候如果php的安裝是基于fpm模式編譯安裝的話需要對本地的9000端口做雙向的認證否則http無法調用php的fpm功能:
    root@localhost etc]# iptables -L -n
    Chain INPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     tcp  --  0.0.0.0/0            172.16.0.46         tcp dpt:22 
    ACCEPT     tcp  --  0.0.0.0/0            172.16.0.46         tcp dpt:80 
    ACCEPT     icmp --  0.0.0.0/0            172.16.0.46         icmp type 0 
    ACCEPT     tcp  --  127.0.0.1            0.0.0.0/0           tcp spt:9000 
    ACCEPT     tcp  --  0.0.0.0/0            127.0.0.1           tcp dpt:9000 

    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         

    Chain OUTPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     tcp  --  172.16.0.46          0.0.0.0/0           tcp spt:22 
    ACCEPT     tcp  --  172.16.0.46          0.0.0.0/0           tcp spt:80 
    ACCEPT     icmp --  172.16.0.46          0.0.0.0/0           icmp type 8 
    ACCEPT     tcp  --  127.0.0.1            0.0.0.0/0           tcp spt:9000 
    ACCEPT     tcp  --  0.0.0.0/0            127.0.0.1           tcp dpt:9000 

    顯示擴展:必須使用-m選項指定使用的擴展    
    CentOS 6: man iptables
    CentOS 7: man iptables-extensions
    1,multiport擴展
        以離散方式定義多端口匹配:最多匹配15個端口;
        ]# iptables -I INPUT -d 172.16.0.46 -p tcp -m multiport --dport 22,80 -j ACCEPT
        ]# iptables -I OUTPUT -s 172.16.0.46 -p tcp -m multiport --sport 22,80 -j ACCEPT

    2,iprange擴展
        指明連續的(但一般是不能擴展為整個網絡)ip地址范圍有效:
        [!] --src-range from[-to]:指明連續的源IP地址范圍;
        [!] --dst-range from[-to]:指明連續的目標IP地址范圍;
        ~]# iptables -I INPUT -d 172.16.100.9 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 172.16.100.1-172.16.100.120 -j ACCEPT
        ~]# iptables -I OUTPUT -s 172.16.100.9 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 172.16.100.1-172.16.100.120 -j ACCEPT   

    3,string擴展
        檢查報文中出現的字符串;
        ~]# iptables -I OUTPUT -m string --algo bm --string 'movie' -j REJECT

    4、time擴展
        根據報文到達的時間與指定的時間范圍進行匹配;
        --datestart 
        --datestop
        --timestart
        --timestop
        --monthdays
        --weekdays
    5,state擴展
        根據連接追蹤機制檢查連接間的狀態
        調整連接追蹤功能所能夠容納的最大連接數量:
        /proc/sys/net/nf_conntrack_max

        已經追蹤到并記錄下的連接:
        /proc/net/nf_conntrack

        不同協議或連接類型追的時長:
        /proc/sys/net/netfilter/

        可追蹤的連接狀態:
            NEW:新發出的請求;連接追蹤模板中不存此連接相關的信息條目,因此,將其識別為第一次發出的請求;
            ESTABLISHED:NEW狀態之后,連接追蹤模板中為其建立的條目失效之前期間內所進行的通信的狀態;
            RELATED:相關的連接;如ftp協議的命令連接與數據連接之間的關系;
            INVALIED:無法識別的連接;

iptables放行被動模式下的ftp服務:
    (1)裝載ftp追蹤時專用的模塊在
    [root@localhost netfilter]# pwd
    /lib/modules/2.6.32-358.el6.x86_64/kernel/net/netfilter
    (1) 裝載ftp追蹤時的專用的模塊:
        # modprobe nf_conntrack_ftp
    (2) 放行請求報文:
        命令連接:NEW, ESTABLISHED
        數據連接:RELATED, ESTABLISHED
        # iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
        # iptables -A INPUT -d LocalIP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
    (3) 放行響應報文:
        ESTABLISEHD
        # iptables -A OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT

iptables的nat的功能
    如需要開啟linux上的路由功能做為路由器需要開啟linux的核心轉發功能
    [root@ns1 ~]# sysctl -w net.ipv4.ip_forward=1
    net.ipv4.ip_forward = 1
    [root@ns1 ~]# cat /proc/sys/net/ipv4/ip_forward 
    1
    iptables:

    nat:網絡地址轉換,網絡層以及傳輸層實現
    proxy:代理,應用層實現

    nat:
        SNAT:至修改請求報文的源地址;
        DNAT:至修改請求報文的目標地址;
        MASQUERADE:基于撥號的模式進行偽裝

    nat表:
        PREROUTING:DNAT
        OUTPUT
        POSTROUTING:SNAT
    ]# iptables -t nat -A POSTROUTING -s 192.168.56.0/24 ! -d 192.168.56.0/24 -j SNAT --to-source 172.16.0.53

tcp_wrapper:tcp包裝器
    對于基于TCP協議開發并且基于TCP協議提供服務應用程序,提供的一層訪問控制工具:
    基于庫調用其功能:
        庫名稱:libwrap
    判斷服務是否能夠由tcp_wrapper進行訪問控制:
        (1)動態編譯:ldd命令:
        (2)靜態編譯:strings命令查看應用程序文件,其結果中出現下述文件:
        hosts.allow
        hosts.deny
    在配置文件在為各服務分別定義訪問控制規則實現訪問控制:
    /etc/hosts.allow
    /etc/hosts/deny

    配置文件語法:
    daemon_list:client_list [:options]
    daemon_list:
        應用程序的文件名稱。而非服務名:
        應用程序文件名稱列表。彼此間使用逗號分割:
            例如:sshd,vsftpd
                ALL:表示所有服務:
    client_list:
        IP地址:
        主機名:
        網絡地址:必須使用完整格式的掩碼,不使用前綴格式掩碼,所以類似于172.16.0.0/16不合法:
        簡短格式的網絡地址:例如:172.16.表示172.16.0.0/255.255.0.0;
        ALL:所有主機:
        KNOWN:所有解析的主機
        UNKNOWN:所有解析不到的主機
        PARANOID:主機名的正反解不匹配

    例如:vsftpd服務不允許172.16.100.1訪問:
    EXCEOT:除了
        host.allow
        vsftpd: 
    [:options]
    deny: 拒絕,主要用于hosts.allow文件中
    allow:允許,用于hosts.deny文件,實現allow的功能
    spawn: 啟動額外應用程序:
    vsftpd: ALL :spawn /bin/echo `date` login attempt from %c to %s, %d >> /var/log/vsftpd.deny.log
    %c: client ip
    %s: server ip
    %d: daemon name

原創文章,作者:wostop,如若轉載,請注明出處:http://www.www58058.com/59226

(0)
wostopwostop
上一篇 2016-12-05
下一篇 2016-12-05

相關推薦

  • 用戶及相關權限命令

    2018-03-26

    2018-03-26
  • Linux bash 特性、相關變量以及編程

    Linux bash 特性、相關變量以及編程 bash 特性之:命令hash 緩存此前執行過的命令(都是外部命令,不記錄內嵌命令),加速命令的執行 hash    -d 清空指定命令記錄   -r 直接清空hash表 bash 特性之一: 變量 程序=指令+數據 指令是有文件提供 數據是由…

    Linux干貨 2016-12-29
  • 三問:linux操作系統安全加固

    三問:linux操作系統安全加固 1.為什么要進行安全加固?     安全加固的重要性不言而喻。我這里把操作系統同馬斯洛需求層次做了個類比,如有不恰當之處,還請指教。同人一樣,操作系統也有自己的生理需求,對于人來說生理需求無非吃喝拉撒等,而對于操作系統來說它的生理需求又是什么了?我個人認為應該是底層硬件的配置,內核的驅…

    Linux干貨 2017-03-30
  • linux軟件包安裝與管理

    一、RPM包簡介     linux之所以那么強大,除了linux強大的內核,還有很大一部分取決于linux的軟件包,假想沒有軟件包,就一個內核在運行,人類需要和內核打交道是多么痛苦,但是聰明的人類發明了bash,通過bash,人就可以使用高級語言,和機器溝通,這其中的bash起始也是一個軟件包,當然linux除了ba…

    Linux干貨 2016-08-24
  • 22期+第一周課堂練習

    一.計算機的組成及其功能 計算機的組成及其功能結構圖      各部件的關系圖          二.按系列羅列Linux的發行版,并描述不同版本之間的聯系與區別 1.各版本邏輯結構圖 2.各版本的介紹   Redhat,應該稱為Redhat系列,包括RHEL(Redh…

    Linux干貨 2016-08-15
  • 【聽說要寫一篇文章,我覺得標題比較長的人一定特別帥?!?

    我叫小問。 計劃是學好馬哥所教授的知識。 目標是找到一份好工作!

    Linux干貨 2016-10-23
欧美性久久久久