linux之netfilter與 iptables學習

Linux之netfilter與iptables學習

一、為什么我們的主機需要防火墻

二、Linux下防火墻如何實現

三、四表五鏈學習

四、主機防火墻

五、網絡防火墻

六、iptables命令學習

七、主機防火墻規則備份與恢復

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

一、為什么我們的主機需要防火墻?

    1、防止不合理的用戶,通過不合理的手段登錄系統搞破壞,

    2、企圖通過攻擊手段組織其繼續為用戶提供服務,

    3、尤其當我們的主機需要提供互聯網服務的時候,安全性就不言而喻,

二、Linux下防火墻如何實現?

    1、iptables,這個只是方便用戶編寫各類規則交由netfilter處理執行。

    2、一部分是基于TCP/IP協議棧的netfilter安全框架,通過“數據報文進入主機,內核處理完成,

        交由用戶空間處理,在由內核處理完成并響應給客戶”,

        數據報文的處理路徑設置了各種規則鏈,根據規則鏈的順序或者特點,

        又在規則鏈中增加功能表,通過在不同的功能表中設置具體的規則,來達到安全訪問。

    那么netfilter的規則定義是如何來達到安全訪問的效果呢?

    首先我們應該知道主機之間的通信是數據流,是參考OSI七層模型來包裝用戶的數據,OSI七層包括了

    應用層,表示層,會話層,傳輸層,網絡層,數據鏈路層,物理層,每一層都有其自己的功能,

    netfilter就是通過識別每一層功能中的數據是否符合我們定義的規則,從而達到監控,修改,丟棄,轉發的目錄。

34.png

    我們學習的防火墻主要部分是監控網絡層,傳輸層,少部分應用層數據。如上圖類似主機間通信的數據。

三、四表五鏈:

    四表:

        1、raw:          關閉NAT,ip_conntrack(連接跟蹤)

        2、mangle:    拆開數據,修改數據,封裝數據

        3、nat:           源,目的IP地址轉換

        4、filter:         過濾

             執行的優先級順序是:1 > 2 > 3 >4

    五鏈(數據報文處理路徑上的五個鉤子):

        1、PREROUTING:         路由前鏈

        2、INPUT:                    進入用戶空間鏈

        3、FORWARD:              轉發鏈

        4、OUTPUT:                 用戶空間出去鏈

        5、POSTROUTING:       路由后鏈

四、主機防火墻:

    對于主機防火墻而言(主機就是報文的響應方,處理完成之后,主機在發送響應給請求方),四表五鏈工作模型(默認情況下并不是所有的鏈上都必須要有所有的功能規則表,這是設計者精巧設計):

35.png

說明(數據包經過防火墻被處理):

    1、數據包經過網絡傳輸,到達主機網卡緩沖區,接著被內核加載到內核內存空間,

    2、數據報文經過PREROUTING鏈,

        1、規則表匹配順序raw–>mangle–>nat,

        2、每個規則表中有N多規則,

    3、被PREROUTING鏈處理過后的數據將會轉發給INPUUT鏈

        1、規則表匹配順序mangle–>filter,

        2、通常需要阻止別人訪問,或者開放服務給用戶都是在此filter規則表中設定

    4、用戶空間:程序運行時生成的進程監聽在某個套接字(端口)上,內核拆分數據報文到傳輸層時(TCP/UDP),檢查數據報文的目的端口,進而轉交給其監控的進程處理。

         用戶空間處理完數據包之后,會將需要返回給用戶的數據重新打包,交給內核,由內核將數據封裝(封裝傳輸層,網絡層,數據鏈層報文頭部),

        這里的封裝就會參考OUTPUT鏈與POSTROUTING鏈,

    5、數據報文到達OUTPUT鏈

        1、規則表匹配順序:raw–>mangle–>nat–>filter

    6、數據報文被OUTPUT鏈處理完畢之后接著交給POSTROUTING

        1、規則表匹配順序:mangle–>nat

五、網絡防火墻:

    網絡防火墻的意思是提供數據包轉發,數據報文的最終目的地址并不是本機防火墻,需要開啟forward功能

36.png

    網絡防火墻管控修改數據包源,目的IP地址與過濾數據報文。

六、IPTABLES命令學習(編寫規則表):iptables并不是服務,沒有進程,是工作在內核

命令學習:

鏈管理: 規則管理: 查看:
-F Flush 清空規則鏈 -A Append 將規則追擊到指定鏈的最后 -L List 列出指定鏈的規則
-N New 創建新的自定義規則鏈 -I Insert 插入一條規則,不給序號就是第一條 -n Number數字顯示IP與端口號
-X 刪除用戶自定義鏈 -D Delete 刪除規則 -v,-vv,-vvv 顯示詳細信息
-Z Zero 清零,規則計數器重置為零 -R Replace 替換規則 –line-numbers 顯示規則編號
-P Policy 為指定的規則鏈設置默認策略 -x 顯示計數結果精確值
-E rEname 重命名自定義鏈
-j 指定被規則匹配后所要執行的動作,ACCEPT(允許),DROP(丟棄),REJECT(拒絕),RETURN(返回),REDIRECT(重定向),LOG(記錄日志),MARK(標記),DNAT(目的地址轉換),SNAT(源地址轉換),MASQUERADE(地址偽裝)

例子:

    ~]# iptables -t nat -L    #查看nat表中規則鏈與規則

匹配條件:

    基本匹配:

    [!]    -s    -src    –source    [ip|network]        數據報文源地址匹配,[!]表示取反

    [!]    -d    -dst    –destination    [ip|network]        數據報文目的地址匹配,[!]表示取反

    -p    –protocol    [tcp|udp|icmp]        傳輸層協議

    -i    –in-interface    指定數據報文入接口    ##仔細想想只能用在PREROUTING,FORWARD,INPUT鏈上

    -o    –out-interface    指定數據報文This test Page abcdefgh出接口    ##仔細想想只能用在OUTPUT,FORWARD,POSTROUTING鏈上

    隱含擴展匹配:

    -p tcp {–sport,–dport,–tcp-flage,–sync}

        例:–tcp-flage SYN,ACK,FIN,RST SYN     表示匹配TCP數據報文中TCP首部SYN,ACK,FIN,RST四個關鍵字位置,并且只有SYN為1,能可以,其它三個位置必須為0(TCP三次握手的第一次)

    -p udp {–sport,–dport}

    -p icmp –icmp-type    icmp類型有很多,常用就是類型為0的表示ping應答(Echo reply) 類型8為ping請求(Echo request)

    顯示擴展:使用-m macth_name –spec_options,必須指明使用的擴展模塊(重點)

    一、multiport:指定多端口

            使用方法:

            [!] –source-ports,–sports port[,port|,port:port]…

                ~]# iptables -A INPUT -d 192.168.3.21 -p tcp -m multiport –dports 53:80,111 -j ACCEPT        

                #沒有指定源IP地址,表示任意源IP地址訪問本機192.168.3.31這個IP的TCP協議,目的端口是53~80的所有端口,加上111這個端口

            [!] –destination-ports,–dports port[,port|,port:port]…

            [!] –ports port[,port|,port:port]…

                ~]# iptables -A INPUT -d 192.168.3.21 -p tcp -m multiport –dports 22,80,443 -j ACCEPT        #此規則類似,

    二、iprange:指定IP地址范圍

            使用方法:

            [!] –src-range from[-to]

                ~]# iptables -A INPUT -d 192.168.3.21 -p tcp –dport 443 -m iprange –src-range 192.168.3.1-192.168.3.50 -j ACCEPT        

            [!] –dst-range from[-to]
    三、string:指定的字符

            使用方法:

            –algo {bm|kmp}    bm與kmp是匹配字符串的算法

                ~]# iptables -A OUTPUT -s 192.168.3.21 -p tcp –sport 80 -m string –algo bm –string "abcdefg" -j DROP   

                #當192.168.3.21這臺web服務器網頁上出現abcdefg字符,網站就不能被訪問了

    四、time:訪問時間控制

            使用方法

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

            –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

            –timestart hh:mm[:ss]

            –timestop hh:mm[:ss]

                ~]#iptables -A OUTPUT -s 192.168.3.10 -p tcp –sport 80 -m time –timestart 07:00 –timestop 23:00 -j ACCEPT       

                #每天的早上7點到晚上23點才能訪問

            [!] –monthdays day[,day…]

            [!] –weekdays day[,day…]    Mon,  Tue,  Wed,  Thu,  Fri,  Sat,  Sun, or values from 1 to 7,

                ~]#iptables -A OUTPUT -s 192.168.3.10 -p tcp –sport 80 -m time ! –weekdays 6,7  -j ACCEPT       

                #星期6,星期7取反,也就是只能星期一到星期五訪問

    五、conntlimit:連接限制

            使用方法:

            [!] –connlimit-above n

                ~]# iptables -I INPUT -d 192.168.3.10 -p tcp –dport 22 -m connlimit –connlimit-above 3 -j DROP

                #表示對連接22端口限制最大連接數為3,在規則生效時,在線的ssh服務,不算,之后退出重新連接就算

            –connlimit-mask

              ~]# iptables  -p  tcp  –syn  –dport  80  -m connlimit –connlimit-above 16 –connlimit-mask 24 -j REJECT

                #這個有點意思,限制C類網絡地址(掩碼是24的),http并發連接不超過16個,

                #假如說我們的客戶端地址是192.168.3.0/24,我們這個網段內的所有地址一起發起http請求并發,不能超過16個,

    六、limit:報文速率限制

            使用方法:

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

            –limit-burst number

              ~]# iptables -I INPUT -d 192.168.3.10 -p tcp –dport 443 -m limit –limit 100/minute -j DROP

                 #每分鐘限制100個報文,多的會DROP掉

    七、state:連接狀態追蹤,nf_conntrack

            有了狀態連接之后,我們可以在OUTPUT方向只放行已經建立連接的數據(在沒有啟用state功能是,對于規則的編寫要考慮到進出兩個方向),

            狀態類別有:

                NEW:新建連接

                ESTABLISHED:正在建立連接

                RELATED:相關連接(FTP被動模式的控制連接與數據連接)

                INVALID:無效的連接

            [!] –state state:

                ~]# iptables -A OUTPUT -m state –state ESTABLISHED -j ACCEPT    

                    #已經建立的連接OUTPUT方向直接放行流量

                ~]# iptables -I INPUT -d 192.168.3.10 -p tcp -m multiport –dports 22,80,53 -m state –state NEW,ESTABLISHED -j ACCEPT

                    #對于訪問192.168.3.10的22,80,53服務,新建或者已經建立連接的流量直接放行

    八、還有很多顯示擴展的高級功能,我們需要多多man iptables

七、主機防火墻規則備份與恢復:

    規則保存:~]# iptables-save > iptables-rules

    規則恢復:~]# iptables -restore < iptables-rules


FTP特殊放行:需要加載單獨對FTP放行的模塊

/lib/modules/2.6.32-573.el6.x86_64/kernel/net/netfilter/nf_conntrack_ftp.ko    模塊位置

~]# modprobe nf_conntrack_ftp    #加載模塊
~]# iptables -A INPUT -d 192.168.3.10 -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT

~]# iptables -A INPUT -d 192.168.3.10 -p tcp -m state –state RELATED -j ACCEPT

~]# iptables -I INPUT -s 192.168.3.10 -p tcp -m state –state ESTABLISHED -j ACCEPT

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

(0)
nice_neo_linuxnice_neo_linux
上一篇 2016-06-23
下一篇 2016-06-23

相關推薦

  • nfs與samba實現文件共享服務的流程

    nfs與samba實現文件共享服務的流程     nfs與samba都是能夠實現文件共享的服務應用,其用法大致相同,但是掛載選項與配置文件的設置機制不同,下面介紹這兩種文件共享服務的內容。     一.nfs服務的安裝與配置     服務端主機的配置:   &…

    Linux干貨 2016-10-23
  • N21天天第十六周課程練習

    1、源碼編譯安裝LNMP架構環境; 一、安裝Nginx 1、解決依賴 [root@localhost ~]# yum groupinstall 開發工具 服務器平臺開發 -y 2、安裝 [root@localhost ~]# tar xf pcre-8.37.…

    Linux干貨 2016-12-14
  • 實現軟RAID0的方法

    實驗利用三個分區分別為10G組成一個RAID0 分區時要注意ID的轉換 創建RAID的設備名稱為md0 通過mdadm -D /dev/md0可以查看md0的信息 創建配置文件: mdadm -Ds > /etc/mdadm.conf(為了系統啟動時自動加載) 給RIAD0創建文件系統: 創建掛載目錄mkdir /mnt/raid0 掛載: 同步: m…

    2017-12-11
  • CentOS 5和6的啟動流程

    Linux: kernel+rootfs  kernel: 進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能 rootfs: glibc 庫:函數集合, function, 調用接口 過程調用:procedure 函數調用:function 程序  內核設計流派: 單內核設計:Linux 把所有功能集成于同一個程序; 微內核設計…

    Linux干貨 2016-08-23
  • 說說web和http以及lamp/lnmp

    <span style="font-size: 24px;font-family: 宋體,SimSun">**說說web和http以及lamp/lnmp**</span> 說說web和http以及lamp/lnmp 在這篇文章當中你將看到如下內容: web與http的簡介,網頁的分類 度量網站流量的幾個術語——知道…

    2016-05-28
  • yum報錯2

    我的系統是centos 6.8 x86的; 安裝pam_mysql時報錯如下: [root@Ams ~]# yum install pam_mysql -y Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Install Process Loading mirror…

    Linux干貨 2016-08-02
欧美性久久久久