ann
          冰是沒有未來的,因?yàn)樗挠篮?/span>
          posts - 107,comments - 34,trackbacks - 0

          原理簡介


          安裝運(yùn)行


          特殊介紹

          1.iptables的3個表:

           filter: 顧名思義,用于過濾的時候

          nat: 顧名思義,用于做NAT 的時候

          manager:見下

          2.iptables的5條鏈

           INPUT: 匹配目的IP 是本機(jī)的數(shù)據(jù)包

          OUPUT: 匹配源IP是本機(jī)的數(shù)據(jù)包

          FORWARD: 匹配穿過本機(jī)的數(shù)據(jù)包

          PREROUTING: 用于修改目的地址(DNAT)

          POSTROUTING:用于修改源地址(SNAT)

          3.manager簡介

            這個表主要用來mangle數(shù)據(jù)包。我們可以改變不同的包及包頭的內(nèi)容,比如 TTL,TOS或MARK。 注意MARK并沒有真正地改動數(shù)據(jù)包,
          它只是在內(nèi)核空間為包設(shè)了一個標(biāo)記。防火墻內(nèi)的其他的規(guī)則或程序(如tc)可以使用這種標(biāo)記對包進(jìn)行過濾或高級路由。這個表有五個內(nèi)建的鏈:
          PREROUTING,POSTROUTING,OUTPUT,INPUT和 FORWARD。

            PREROUTING在包進(jìn)入防火墻之后、路由判斷之前改變 包,POSTROUTING是在所有路由判斷之后。 OUTPUT在確定包的目的之前更改數(shù)據(jù)包。INPUT在包被路由到本地之后,但在用戶空間的程序看到它之前改變包。注意,mangle表不能做任何 NAT,它只是改變數(shù)據(jù)包的TTL,TOS或MARK,而不是其源目的地址。NAT是在nat表中操作的,以下是mangle表中僅有的幾種操作:  
          ◆ TOS  
          ◆ TTL
          ◆ MARK  
          TOS操作用來設(shè)置或改變數(shù)據(jù)包的服務(wù)類型域。這常用來設(shè)置網(wǎng)絡(luò)上的數(shù)據(jù)包如何被路由等策略。

             注意這個操作并不完善,有時得不所愿。它在Internet上還不能使用,而且很多路由器不會注意到這個域值。換句話說,不要設(shè)置發(fā)往Internet的包,除非你打算依靠TOS來路由,比如用iproute2。  

            TTL操作用來改變數(shù)據(jù)包的生存時間域,我們可以讓所有數(shù)據(jù)包只有一個特殊的TTL。它的存在有一個很好的理由,那就是我們可以欺騙一些ISP。為什么要欺騙他們呢?因?yàn)樗麄儾辉敢庾屛覀児蚕?一個連接。  
          那些ISP會查找一臺單獨(dú)的計算機(jī)是否使用不同的TTL,并且以此作為判斷連接是否被共享的標(biāo)志。 
          MARK用來給包設(shè)置特殊的標(biāo)記。iproute2能識別這些標(biāo)記,并根據(jù)不同的標(biāo)記(或沒有標(biāo)記) 決定不同的路由。用這些標(biāo)記我們可以做帶寬限制和基于請求的分類。


           語法概述


          -t

          -t 要操作的表
          如果不加-t則用默認(rèn)表filter
          例如:
          iptables -t nat
          對nat表進(jìn)行操作


          -A

          -A <鏈名> APPEND,追加一條規(guī)則(放到最后)
          例如:
          iptables -t filter -A INPUT -j DROP
          在filter 表的INPUT 鏈里追加一條規(guī)則(作為最后一條規(guī)則)
          匹配所有訪問本機(jī)IP 的數(shù)據(jù)包,匹配到的丟棄


           -I

          -I <鏈名> [規(guī)則號碼] INSERT,插入一條規(guī)則
          例如:
          iptables -I INPUT -j DROP
          在filter 表的INPUT 鏈里插入一條規(guī)則(插入成第1 條)
          iptables -I INPUT 3 -j DROP
          在filter 表的INPUT 鏈里插入一條規(guī)則(插入成第3 條)
          注意:
          1、-t filter 可不寫,不寫則自動默認(rèn)是filter 表
          2、-I 鏈名[規(guī)則號碼],如果不寫規(guī)則號碼,則默認(rèn)是1
          3、確保規(guī)則號碼≤ (已有規(guī)則數(shù)+ 1),否則報錯


           -D

          -D <鏈名> <規(guī)則號碼| 具體規(guī)則內(nèi)容> DELETE,刪除一條規(guī)則
          例如:
          iptables -D INPUT 3(按號碼匹配)
          刪除filter 表INPUT 鏈中的第三條規(guī)則(不管它的內(nèi)容是什么)
          iptables -D INPUT -s 192.168.0.1 -j DROP(按內(nèi)容匹配)
          刪除filter 表INPUT 鏈中內(nèi)容為“-s 192.168.0.1 -j DROP”的規(guī)則(不管其位置在哪里)
          注意:
          1、若規(guī)則列表中有多條相同的規(guī)則時,按內(nèi)容匹配只刪除序號最小的一條
          2、按號碼匹配刪除時,確保規(guī)則號碼≤ 已有規(guī)則數(shù),否則報錯
          3、按內(nèi)容匹配刪除時,確保規(guī)則存在,否則報錯


           -R

          -R <鏈名> <規(guī)則號碼> <具體規(guī)則內(nèi)容> REPLACE,替換一條規(guī)則
          例如:
          iptables -R INPUT 3 -j ACCEPT
          將原來編號為3 的規(guī)則內(nèi)容替換為“-j ACCEPT”
          注意:
          確保規(guī)則號碼≤ 已有規(guī)則數(shù),否則報錯


          -P

          -P <鏈名> <動作> POLICY,設(shè)置某個鏈的默認(rèn)規(guī)則
          例如:
          iptables -P INPUT DROP
          設(shè)置filter 表INPUT 鏈的默認(rèn)規(guī)則是DROP
          注意:
          當(dāng)數(shù)據(jù)包沒有被規(guī)則列表里的任何規(guī)則匹配到時,按此默認(rèn)規(guī)則處理。動作前面不能加–j,這也是唯一一種匹配動作前面不加–j 的情況。


           -F

          -F [鏈名] FLUSH,清空規(guī)則
          例如:
          iptables -F INPUT
          清空filter 表INPUT 鏈中的所有規(guī)則
          iptables -t nat -F PREROUTING
          清空nat 表PREROUTING 鏈中的所有規(guī)則
          注意:
          1、-F 僅僅是清空鏈中規(guī)則,并不影響-P 設(shè)置的默認(rèn)規(guī)則
          2、-P 設(shè)置了DROP 后,使用-F 一定要小心!!!
          3、如果不寫鏈名,默認(rèn)清空某表里所有鏈里的所有規(guī)則

          -[vxn]L

          -L [鏈名] LIST,列出規(guī)則
          v:顯示詳細(xì)信息,包括每條規(guī)則的匹配包數(shù)量和匹配字節(jié)數(shù)
          x:在v 的基礎(chǔ)上,禁止自動單位換算(K、M)
          n:只顯示IP 地址和端口號碼,不顯示域名和服務(wù)名稱
          例如:
          iptables -L
          粗略列出filter 表所有鏈及所有規(guī)則
          iptables -t nat -vnL
          用詳細(xì)方式列出nat 表所有鏈的所有規(guī)則,只顯示IP 地址和端口號
          iptables -t nat -vxnL PREROUTING
          用詳細(xì)方式列出nat 表PREROUTING 鏈的所有規(guī)則以及詳細(xì)數(shù)字,不反解


           匹配條件

          -i

          -i <匹配數(shù)據(jù)進(jìn)入的網(wǎng)絡(luò)接口>
          例如:
          -i eth0
          匹配是否從網(wǎng)絡(luò)接口eth0 進(jìn)來
          -i ppp0
          匹配是否從網(wǎng)絡(luò)接口ppp0 進(jìn)來


           -o

          -o 匹配數(shù)據(jù)流出的網(wǎng)絡(luò)接口
          例如:
          -o eth0
          -o ppp0


          -s

          -s <匹配來源地址>
          可以是IP、NET、DOMAIN,也可空(任何地址)
          例如:
          -s 192.168.0.1 匹配來自192.168.0.1 的數(shù)據(jù)包
          -s 192.168.1.0/24 匹配來自192.168.1.0/24 網(wǎng)絡(luò)的數(shù)據(jù)包
          -s 192.168.0.0/16 匹配來自192.168.0.0/16 網(wǎng)絡(luò)的數(shù)據(jù)包


          -d

          -d <匹配目的地址>
          可以是IP、NET、DOMAIN,也可以空
          例如:
          -d 202.106.0.20 匹配去往202.106.0.20 的數(shù)據(jù)包
          -d 202.106.0.0/16 匹配去往202.106.0.0/16 網(wǎng)絡(luò)的數(shù)據(jù)包
          -d www.abc.com 匹配去往域名www.abc.com 的數(shù)據(jù)包


          -p

          -p <匹配協(xié)議類型>
          可以是TCP、UDP、ICMP 等,也可為空
          例如:
          -p tcp
          -p udp
          -p icmp --icmp-type 類型
          ping: type 8 pong: type 0


           --sport

          --sport <匹配源端口>
          可以是個別端口,可以是端口范圍
          例如:
          --sport 1000 匹配源端口是1000 的數(shù)據(jù)包
          --sport 1000:3000 匹配源端口是1000-3000 的數(shù)據(jù)包(含1000、3000)
          --sport :3000 匹配源端口是3000 以下的數(shù)據(jù)包(含3000)
          --sport 1000: 匹配源端口是1000 以上的數(shù)據(jù)包(含1000)
          注意:--dport 必須配合-p 參數(shù)使用


          --dport

          --dport <匹配目的端口>
          可以是個別端口,可以是端口范圍
          例如:
          --dport 80 匹配目的端口是80 的數(shù)據(jù)包
          --dport 6000:8000 匹配目的端口是6000-8000 的數(shù)據(jù)包(含6000、8000)
          --dport :3000 匹配目的端口是3000 以下的數(shù)據(jù)包(含3000)
          --dport 1000: 匹配目的端口是1000 以上的數(shù)據(jù)包(含1000)
          注意:--dport 必須配合-p 參數(shù)使用


          動作(處理方式)


          ACCEPT

          -j ACCEPT
          通過,允許數(shù)據(jù)包通過本鏈而不攔截它,類似Cisco 中ACL 里面的permit
          例如:
          iptables -A INPUT -j ACCEPT
          允許所有訪問本機(jī)IP 的數(shù)據(jù)包通過


          DORP

          -j DROP
          丟棄,阻止數(shù)據(jù)包通過本鏈而丟棄它,類似Cisco 中ACL 里的deny
          例如:
          iptables -A FORWARD -s 192.168.80.39 -j DROP
          阻止來源地址為192.168.80.39 的數(shù)據(jù)包通過本機(jī)


           DNAT

          -j DNAT --to IP[-IP][:端口-端口](nat 表的PREROUTING 鏈)目的地址轉(zhuǎn)換,DNAT 支持轉(zhuǎn)換為單IP,也支持轉(zhuǎn)換到IP 地址池(一組連續(xù)的IP 地址)
          例如:
          iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
          把從ppp0 進(jìn)來的要訪問TCP/80 的數(shù)據(jù)包目的地址改為192.168.0.1
          iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.0.2:80
          iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1-192.168.0.10


           SNAT

          -j SNAT --to IP[-IP][:端口-端口](nat 表的POSTROUTING 鏈)源地址轉(zhuǎn)換,SNAT 支持轉(zhuǎn)換為單IP,也支持轉(zhuǎn)換到IP 地址池(一組連續(xù)的IP 地址)
          例如:
          iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
          將內(nèi)網(wǎng)192.168.0.0/24 的原地址修改為1.1.1.1,用于NAT
          iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10
          同上,只不過修改成一個地址池里的IP


          MASQUERADE

          -j MASQUERADE 動態(tài)源地址轉(zhuǎn)換(動態(tài)IP 的情況下使用)
          例如:
          iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
          將源地址是192.168.0.0/24 的數(shù)據(jù)包進(jìn)行地址偽裝


           附加模塊


           state

          -m state --state 狀態(tài)
          狀態(tài):NEW、RELATED、ESTABLISHED、INVALID
          NEW:有別于tcp 的syn
          ESTABLISHED:連接態(tài)
          RELATED:衍生態(tài),與conntrack 關(guān)聯(lián)(FTP)
          INVALID:不能被識別屬于哪個連接或沒有任何狀態(tài)
          例如: iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT


          mac

          -m mac --mac-source MAC 匹配某個MAC 地址
          例如:
          iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
          阻斷來自某MAC 地址的數(shù)據(jù)包,通過本機(jī)
          注意:
          報文經(jīng)過路由后,數(shù)據(jù)包中原有的mac 信息會被替換,所以在路由后的iptables 中使用mac 模塊是沒有意義的


          limit

          -m limit --limit 匹配速率[--burst 緩沖數(shù)量]用一定速率去匹配數(shù)據(jù)包
          例如:
          iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
          iptables -A FORWARD -d 192.168.0.1 -j DROP
          注意:
          limit 英語上看是限制的意思,但實(shí)際上只是按一定速率去匹配而已,要想限制的話后面要再跟一條DROP


          multiport

          -m multiport <--sports|--dports|--ports> 端口1[,端口2,..,端口n]一次性匹配多個端口,可以區(qū)分源端口,目的端口或不指定端口
          例如:
          iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT
          注意:
          必須與-p 參數(shù)一起使用

          當(dāng)下,把心放下 放下如果是可能的,那一定是在當(dāng)下,
          不在過去,也不在未來。
          當(dāng)下放下。唯有活在當(dāng)下,你的問題才能放下。

          主站蜘蛛池模板: 安平县| 卓资县| 彰化县| 长顺县| 修文县| 大石桥市| 延吉市| 开平市| 南宁市| 华安县| 师宗县| 神农架林区| 钟山县| 全南县| 舒城县| 万全县| 剑阁县| 西充县| 军事| 渭源县| 井研县| 灵宝市| 来安县| 柞水县| 尉氏县| 黔东| 淮北市| 肥东县| 上虞市| 兴文县| 客服| 元氏县| 镇安县| 特克斯县| 榆树市| 抚州市| 盐亭县| 正镶白旗| 靖安县| 冕宁县| 英山县|