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 17:05
下一篇 2016-12-05 17:05

相關推薦

  • class9 bash編程基礎(一)

    一、編程基礎 程序:指令+ 數據 程序編程風格: 過程式:以指令為中心,數據服務于指令 對象式:以數據為中心,指令服務于數據 shell 程序:提供了編程能力,解釋執行 程序的執行方式 計算機:運行二進制指令; 編程語言: 低級:匯編 高級: 編譯:高級語言–> 編譯器–> 目標代碼   &n…

    Linux干貨 2016-08-15
  • linux中硬鏈接與軟鏈接的區別

    硬連接和軟鏈接的區別: 1、          首先,兩者的作用對象不同: 硬鏈接,只能應用于文件,而不能應用于目錄,而且不能跨文件系統(即分區)。 軟(符號)鏈接,可以應用于文件,而且可以應用于目錄和可跨文件系統(分區)。 2、   &n…

    Linux干貨 2016-10-20
  • Docker 之初次體驗

    一、Docker 簡介  lxc linux container,openvz  容器中各虛擬機只有一個內核,而是多個用戶空間  在庫中完成虛擬化,比如wine 或者在windows中運行bash  在應用程序的運行級別提供虛擬化,比如jvm   pstree , pid 為1 的進程  …

    Linux干貨 2015-01-16
  • LAMP快速部署及LAMP組合深入講解-1

      lamp php php: 腳本編程語言、嵌入到html中的嵌入式web程序開發語言;基于zend編譯成opcode(二進制格式的字節碼,重復運行,可省略編譯環境) 一、PHP簡介 PHP是通用服務器端腳本編程語言,其主要用于web開發以實現動態web頁面,它也是最早實現將腳本嵌入HTML源碼文檔中的服務器端腳本語言之一。同時,php還提供了一…

    Linux干貨 2017-06-04
  • shell腳本編程入門

    什么是shell腳本,其實,shell腳本就是利用shell的功能所寫的一個程序,這個程序是使用純文本文件,將一些shell的語法與命令(包含外部命令)寫在里面,搭配正則表達式、管道命令與數據流重定向等功能等這些命令的組合起來,以達到我們所想要的目的。 程序編程風格有兩種: 過程式:以指令為中心,數據服務于指令。 對象式:以數據為中心,指令服務于數據。 過程…

    Linux干貨 2016-08-18
  • DNS域名系統

    【本文導航】DNS域名系統DNS域名系統DNS解析類型DNS查詢類型DNS服務器類型資源記錄   SOA記錄   NS記錄   MX記錄   A記錄與泛域名   PTR記錄   CNAME記錄   AAAA記錄子域區域傳…

    Linux干貨 2016-12-26
欧美性久久久久