ann
          冰是沒有未來的,因為它的永恒
          posts - 107,comments - 34,trackbacks - 0

          原理簡介


          安裝運行


          特殊介紹

          1.iptables的3個表:

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

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

          manager:見下

          2.iptables的5條鏈

           INPUT: 匹配目的IP 是本機的數據包

          OUPUT: 匹配源IP是本機的數據包

          FORWARD: 匹配穿過本機的數據包

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

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

          3.manager簡介

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

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

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

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


           語法概述


          -t

          -t 要操作的表
          如果不加-t則用默認表filter
          例如:
          iptables -t nat
          對nat表進行操作


          -A

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


           -I

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


           -D

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


           -R

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


          -P

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


           -F

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

          -[vxn]L

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


           匹配條件

          -i

          -i <匹配數據進入的網絡接口>
          例如:
          -i eth0
          匹配是否從網絡接口eth0 進來
          -i ppp0
          匹配是否從網絡接口ppp0 進來


           -o

          -o 匹配數據流出的網絡接口
          例如:
          -o eth0
          -o ppp0


          -s

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


          -d

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


          -p

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


           --sport

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


          --dport

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


          動作(處理方式)


          ACCEPT

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


          DORP

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


           DNAT

          -j DNAT --to IP[-IP][:端口-端口](nat 表的PREROUTING 鏈)目的地址轉換,DNAT 支持轉換為單IP,也支持轉換到IP 地址池(一組連續的IP 地址)
          例如:
          iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
          把從ppp0 進來的要訪問TCP/80 的數據包目的地址改為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 鏈)源地址轉換,SNAT 支持轉換為單IP,也支持轉換到IP 地址池(一組連續的IP 地址)
          例如:
          iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
          將內網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 動態源地址轉換(動態IP 的情況下使用)
          例如:
          iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
          將源地址是192.168.0.0/24 的數據包進行地址偽裝


           附加模塊


           state

          -m state --state 狀態
          狀態:NEW、RELATED、ESTABLISHED、INVALID
          NEW:有別于tcp 的syn
          ESTABLISHED:連接態
          RELATED:衍生態,與conntrack 關聯(FTP)
          INVALID:不能被識別屬于哪個連接或沒有任何狀態
          例如: 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 地址的數據包,通過本機
          注意:
          報文經過路由后,數據包中原有的mac 信息會被替換,所以在路由后的iptables 中使用mac 模塊是沒有意義的


          limit

          -m limit --limit 匹配速率[--burst 緩沖數量]用一定速率去匹配數據包
          例如:
          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 英語上看是限制的意思,但實際上只是按一定速率去匹配而已,要想限制的話后面要再跟一條DROP


          multiport

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

          posted on 2009-12-04 13:42 冰是沒有未來的,因為它的永恒 閱讀(257) 評論(0)  編輯  收藏 所屬分類: linux

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

          主站蜘蛛池模板: 林口县| 股票| 同德县| 城口县| 庄浪县| 扶沟县| 乐亭县| 凌云县| 新河县| 宝应县| 寿宁县| 社旗县| 南雄市| 万山特区| 沙河市| 灯塔市| 元阳县| 新野县| 高密市| 西贡区| 博白县| 高淳县| 镇沅| 东乡县| 桦南县| 泌阳县| 沙河市| 广昌县| 遂溪县| 房产| 英山县| 台江县| 稷山县| 确山县| 五指山市| 潮安县| 准格尔旗| 睢宁县| 南乐县| 渝北区| 大关县|