iptables命令應用實例

iptables  
優化規則:儘量減少規則條目,彼此不相關的匹配,用較多放在上面,屬於同一功能匹配規則更嚴格的放在上面    
一、netfilter:    
    四個表:raw,mangle,nat,filter    
    五鏈:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING    
    分別在那些鏈上使用    
        filter:INPUT,FORWARD,OUTPUT    
        nat:PREROUTING(DNAT),POSTROUTING(SNAT),OUT(SNAT)    
        mangle: PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING    
        raw:POSTROUTING,OUTPUT    

    wKioL1P3mjqC-8P2AAEKtg72A4k485.jpg    寫規則注意事項:    
        先確定功能(表),確定報文流向(鏈),確定實現的目錄,確定匹配條件 ,處理方法    
    規則文件:/etc/sysconfig/iptables    
        保存啓用中的規則於規則文件中    
                1、#iptables-save > /etc/sysconfig/iptables    
                2、#service ipitables save    
        生效規則文件中的規則:    
                1、#iptables-restore < /etc/sysconfig/iptables    
                2、#service iptables save    
                    執行的操作:清空現有規則,讀取並生效規則文件中的規則。    
        at任務計劃,重新載入 原有保存的規則鏈(因爲設置iptables 是立即生效的,爲了保險期間,,操作錯誤。定義個計劃任務恢復是有必要的。一次性)    
                    # at now +30min    
                    at> iptables-restore < /etc/sysconfig/iptables    
                    ctrl+d(保存計劃任務)    
                atq:查看任務作業在隊列中的任務    
                at -l 看任務作業在隊列中的任務    
                at -d 刪除任務作業    
                atrm 刪除任務作業    
二、    
    規則的基本語法(我們下面的實例都是白名單)    
        設置規則:    
            iptables -t 表 -P 鏈 處理方法    
                實例:設置白名單(全部關掉)    
                #iptables -t filter -P INPUT DROP    
                #iptables -t filter -P OUTOUT DROP    
                #iptables -t filter -P FORWARD DROP    
        查詢規則:    
            #iptables -L -n -v    
            #watch -n 1 'iptables -L -n -v --line-numbers'時時查看    
            查詢序列號的命令    
            #iptables -L -n --line-numbers

        添加鏈:  
            iptables -t 表 -A 鏈  實現的目標 匹配條件 處理方法    
            實例:開啓ssh功能(只能172.16.3.0網段可以登入172.16.3.30)    
                #iptables -t filter -A INPUT -s 172.16.3.0/16 -d 172.16.3.30 -p tcp --dport 22 -j ACCEPT    
                #iptables -t fileter -A OUTPUT -s 172.16.3.30 -d 172.16.3.0/16 -p tcp --sport22 -j ACCEPT    
        刪除鏈:    
            iptables -t 表 -D 鏈 序列號    
            實例:刪除ssh鏈    
                #iptables -D INPUT 1(默認表爲filter)    
        插入鏈:(不指明插入鏈的位置默認是插入第一鏈)    
            iptables -t 表 -I 鏈 鏈的位置 實現的目標 匹配條件 處理方法    
            實例:開啓httpd訪問(只允許172.16.3.0網段的主機可以訪問172.16.3.30WEB服務器)    
                #iptables -I INPUT 3 -i eth0 -s 172.16.3.0/16 -d 172.16.3.30 -p tcp --dport 80 -j ACCEPT    
                #iptables -I OUTPUT 3 -s 172.16.3.30 -d 172.16.3.0/16 -o eht0 -p tcp --sport 80 -j ACCEPT    
        修改鏈:(先添加後減少)    
            iptables -t 表 -R 鏈 鏈的位置 實現的目標 匹配條件 處理方法    
            實例:修改INPUT第3條鏈,允許訪問地址具體到172.16.3.1訪問服務器    
                #iptables -R INOUT 3 -i eth0 -s 172.16.3.1 -d 172.16.3.30 -p tcp --dport 80 -j ACCEPT    
三、擴展匹配

隱式擴展:當使用-p{tcp|udp|icmp}中的一種時,可以直接使用擴展專用選項   
    tcp標誌位:    
        --tcp-flages 要檢查標誌位列表的 匹配的生效的必須爲1標誌位。    
            用法:--tcp-flages syn,ack,rst,fin syn    
                  --syn 相當於--tcp-flages syn,ack,rst,fin syn    
                #iptables -I INPUT -p tcp --tcp-flages all all -j DROP(全部爲1的不允許)都是不正常的訪問連接有可能是***    
                #iptables -I INPUT -p tcp --tcp-flages all none -j DROP(全部爲0的也不允許)    
            實例:允許TCP協議的應用系統可以通過tcp握手的第一個請求    
                iptables -I INPUT -p tcp --tcp-flages syn,ack,rst,fin syn -j ACCEPT    
                或者    
                iptables -I INPUT -p tcp --syn -j ACCEPT    
    udp:    
        -p udp [-m udp]:    
                --sprt PORT[-PORT]:指定源端口[範圍]    
                --dport PORT[-PORT]:指定目標端口    
            實例:dns服務器    
                #iptables -A OUTPUT    -s 172.16.3.30 -p udp --dprot 53 -j ACCEPT出去    
                #iptables -A INPUT -d 172.16.3.30 -p udp  --sprot 53 -j ACCEPT進入    
    icmp    
        -p icmp [-m icmp]:    
                --icmp-type    
                    8:ping請求   
                    0:ping應答    
            實例:允許其他機器能ping通172.16.3.30    
                #iptables -I INPUT -d 172.16.3.30 -p icmp -j ACCEPT    
                #iptables -I INPUT -s 172.16.3.30 -p icmp -j ACCEPT    
                具體設置下:    
                iptables -A INPUT -d 172.16.3.30 -p icmp --icmp-type 0 -j ACCEPT 進入    
                iptables -A OUTPUT -s 172.16.3.30 -p icmp --icmp-type 8 -j ACCEPT 出去   
顯示擴展:調用netfilter額外模塊實現特殊檢查機制,要使用-m選項來指定調用那個模塊    
    (使用相關功能,要使用iptables命令的-m選來加載相關模塊)                
    1、multiport:多端口匹配(一次最多指定15個以內的端口)    
        可用於匹配非連續或連續端口;    
            專用選項    
                --source-ports,--sports port[,port,port:port]    
                --destination-ports,--dports    
                --ports    
            實例:開啓22,和80端口    
                iptables -I INPUT -d 172.16.3.30 -p tcp -m multiport --dports 22,80 -j ACCEPT    
                iptables -I OUTPUT -s 172.16.3.30 -p tcp -m multiport --dports 22,80 -j ACCEPT   
    2、iprange:匹配指定範圍內的地址:    
        匹配一段連續的地址而非整個網絡時有用    
            專用選項    
                --src-range IP [-IP]    
                --dst-range    
                可以取反    
                !--src-ragne IP [-IP]    
                !--dst-range    
            實例:允許3.100--3.200網段的主機可以使用3.30,vsftpd    
                iptables -A INPUT -d 172.16.3.30 -P tcp --dport 21 -m iprange --src-range 172.16.3.100-172.16.3.200 -j ACCEPT    
                iptables -A OUTPUT -s 172.16.3.30 -P tcp --sport 21 -m iprange --dst-range 172.16.3.100-172.16.3.200 -j ACCEPT

    3、string:字符串匹配,能夠檢測報文應用層中的字符串。  
                    字符匹配檢查高效算法    
                        kmp,bm    
                    專用選項:    
                        --algo {kmp|bm}    
                        --string "STRING"    
                        --hex-string "HEX_STRING":STRING    
                    實例:這裏我們限制web服務器,網站中的內容進行限制,如果內容中出現ning的網站不給予送出    
                        iptables -I OUTPUT -m string --algo kmp --string "ning" -j DROP    
    4、time:基於時間做訪問控制    
        專用選項:    
            --datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]    
            --datestop    
            --timestart hh:mm[:ss]    
            --timestop hh:mm[:ss]    
            --weekdays day[,day]    
            Mon, Tue,    
        實例:設置3.30服務器上網站只有在,每週一、二、四、五的早上8點20到下午的18:40允許訪問    
        # iptables -I INPUT -d 172.16.3.30 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT    
    5、connlimit:連接數限制,對每個IP所能夠發起併發連接數做限制;    
        專用選項:    
            [!]--connlimit-above N (要是白名單,大於N則DROP)    
        實例:限制ssh登入172.16.3.30最大連接數(注意,如果你想測試,超過限定數將被丟棄)    
            iptables -A INPUT -d 172.16.3.30 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP    (超過兩個則DROP)    
    6、limit:速率限制:    
        專用選項:    
            --limit n[/second|/minute|/hour|/day] 每多少時間發幾個    
            --limit-burst n 空閒了多少個    
        實例:限制ping 172.16.3.30每5秒一個    
            iptables A INPUT -d 172.16.3.30 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j    ACCEPT(每3秒鐘一個)    
            iptables A OUTPUT -s 172.16.3.30 -p icmp --icmp-type 0 ACCEPT           
    7、state:狀態檢查    
        專用選項    
        --state    
        連接追蹤中的狀態:(上限/proc/sys/net/nv_conntrack_max)(訪問量很大網站不能使用,追蹤不能開啓)    
            NEW: 新建立一個會話    
            ESTABLISHED:已建立的連接established    
            RELATED:有關聯關係的連接    
            INVALID:無法識別的連接           
        調整連接追蹤功能所能容納的連接的最大數目;    
            /proc/sys/net/nv_conntrack_max    
            當前追蹤所有連接    
                /proc/net/nf_conntrack    
            不同協議或連接類型追蹤時的屬性:    
                /proc/sys/net/netfilter目錄:    
            放行被動模式下的FTP服務器:    
                1、裝載模塊/lib/modules/k    
                    模塊:nf_conntrack_ftp(lsmod | less)(想永久加載這個模塊,編輯配置文件/etc/sysconfig/iptables-config並在裏面添加IPTABLES_MODULES="nf_conntrack_ftp")    
                    modprobe nf_conntrack_ftp    
                2、放行請求報文    
                    (1)放行NEW狀態對21端口請求的報文    
                    (2)放行ESTABLISHE以及RALATED狀態的報文    
                    iptables -A INPUT -d 172.16.3.30 -p tcp -m multiport --dports 22,80,21 -m state --state NEW  -j ACCEPT    
                    iptables -I INPUT -d 172.16.3.30 -p tcp -m state --state ESTABLISHE,RELATED -j ACCEPT    
                3、放行響應報文:    
                    (1)放行ESTALISHED以及RALATED狀態的報文    
                    iptables -A OUTPUT -s 172.16.3.30 -p tcp -m state --state ESTABLISHE,RELATED -j ACCEPT    
防火牆的分類:    
    簡單包過濾防火牆    
    帶狀態檢測的包過濾防火牆       
四:自定義鏈:只有被調用時才使用    
        RETURN(return):在自定義中無法匹配的將會返回主鏈。

        創建自定義鏈:  
            格式:iptables -t 表  -N 鏈的名稱    
                  iptables -A 鏈的名稱 .......    
            實例:創建自定義鏈httpd服務的控制    
                #iptables -t filter -N http_in(創建自定義鏈)    
                允許172.16.3.100-172.16.3.200的主機可以訪問172.16.3.30    
                iptables -A http_in -d 172.16.3.1 -p tcp --dport 80 -m iprange --src-range 172.16.3.100-172.16.3.200 -j ACCEPT    
            把所創建的鏈實施調整    
                #iptables -A INPUT -d 172.16.3.1 -p tcp --dport 80 -j http_in    
                #iptables -A http_in -j RETURN ------------------自動調整到主鏈    
            備份寫過的鏈,以備以後使用,可以輸出重定向一個你想保存的爲位置       
                #iptables-save > /root/iptables_20140809備份一個位置    
                #iptables-restore < /root/iptables_20140809恢復當前列表。    
            刪除自定義鏈:    
                #iptables -F http_in清空自定義鏈    
                #iptables -X http_in (刪除自定義且0引用的空鏈)    
    重命名自定義鏈:    
                格式:iptables -E old_name new_name    
                      #iptables -E http_in httpd_in    
五、網絡防火牆:

轉發器FORWARD(網絡防火牆的控制要在FORWARD上寫)  
        查看是否開啓路由轉發功能    
        #cat /proc/sys/net/ipv4/ip_forward    
        0    
        # echo 1 >>/proc/sys/net/ipv4/ip_forward-----臨時修改ip_forward    
        # cat /proc/sys/net/ipv4/ip_forward    
        1    
        永久修改ip_forward    
        #vim /etc/sysctl.conf    
        net.ipv4.ip_forward = 1    
        #sysctl -p    
        實例:限制局域用戶週一、二、四、五,禁止上網    
            #iptables -A FORWARD -s 192.168.3.0/24 -m time --weekdays  Mon,Tue,Thu,Fri -j DROP

NAT:地址轉換       
        MASQUERADE:地址僞裝(撥號時使用,使用動態地址上網時)僞裝更換源地址    
        格式    
            SNAT源地址轉換:(用途:局域網內主機訪問外網時使用)    
                            iptables -t nat -A POSTROUTING -s 需要轉換的地址 -j SNAT --to-source 轉換爲那個地址    
                            #iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j SNAT --to-source 172.16.3.1    
            DNAT目標地址轉換:(用途:外網訪問局域網內的主機,主機在局域網內的網絡中,沒有劃分vlan情況)    
                            iptables -t nat -A PREROUTING -d 需要轉換的地址 [-p tcp --dport 80] -j DNAT --to-destination 轉換爲的地址:端口號       
                            #iptables -t nat -A PREROUTING -d 172.16.3.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.3.20:8080    
            PNAT源和目標地址都轉換:(用途:外網訪問局域網內的主機,主機在局域網內的網絡中並且網絡劃分了vlan)    
                            #iptables -t nat -A PREROUTING -d 172.16.3.1 -p tcp --dport 80 -j DNAT --to-destionation 192.168.3.30    
                            #iptables -t nat -A POSTROUTING -s 172.16.3.20  -j SNAT --to-source 192.168.3.1

            如果是撥號上網怎麼源地址轉換呢?(用途:局域網內的主機訪問外網主機,外網IP爲動態IP時)  
                iptables -t nat -A POSTROUTING -s 需要轉換的地址 [-p tcp --dport 80] -j MASQUERADE

        2、查看網絡防火牆規則  
            #iptables -t nat -L -n -v    
        3、刪除防火牆規則    
            #iptables -t nat -D POSTROUTING 2    
                實例:WEB服務器    
                      防火牆有兩個網卡:一個公網IP 172.16.3.1 一個內網地址IP 192.168.3.1    
                      外網主機:IP 172.16.3.20    
                      內網主機:IP 192.168.3.1    
                     (1)內網訪問外網    
                            #iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j SNAT --to-source 172.16.3.1    
                     (2)外網訪問內網    
                            #iptables -t nat -A PREROUTING -d 172.16.3.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.3.20:8080

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