iptables講義(上)

                   iptables講義

一.概述

二.語法

三.實例分析

四.網管策略

五.使用總則

六.實戰

               一.概述

  防火牆的典型設置是有兩個網卡,一個流入,一個流出,iptables讀取流入和流出的的數據報的頭,然後將他們與規劃集(ruleset)相比較,然後將可接受的數據包從一個網卡轉發至另一個網卡,對於被拒絕的數據包,可以被丟棄或者按照你所定義的方式進行處理.

              二.語法

1.鏈和表 以及規則

A.表:

filter:iptables默認的表,主要用於包過濾.

nat:nat表的主要用處是網絡地址轉換,即Network Address Translation,縮寫爲NAT。做過NAT操作的數據包的地址就被改變了,當然這種改變是根據我們的規則進行的。屬於一個流的包只會經過這個表一次。

manage:主要用於對指定的包進行修改,因爲某些特應用可能需要去改寫數據包的一些傳輸特性,如更改數據包的TTL和TOS等, 不過在實際應用中訪表的使用率不高.

B.規則(rules)

rules:就是網絡管理員預定的條件,這些規則分別指定了源地址,目的地址,傳輸協議(tcp,udp,icmp),和服務類開型(HTTP,FTP,SMTP)定義一些動作:acccept,reject,drop.

C.鏈

INPUT:位於filter表,匹配目的IP是本機的數據包.

FORWARD:位於filter表,匹配穿過本機的數據包.

PREROUTING:位於nat表,用於修改目的地址DNAT

POSTROUTING:位於nat表,用於修改源地址SNAT

D.語法概述

iptables -t [要操作的表]

       [操作命令]

       [規則號碼]

       [匹配條件]

       [-j 匹配到以後的動作]

E.命令概述

a.操作命令.(-A -I -F -D -R -P)

b.查看命令.(-[vnx]L)

a-1.  -A(鏈名)

 APPEND,追加1條規則,(放到最後)例如:

 iptables -t filter -A INPUT -j DROP

在filter 表的INPUT 鏈裏追加一條規則(作爲最後一條規則)匹配所有訪問本機IP 的數據包,匹配到的丟棄.

a-2.-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),否則報錯.

a-3. -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、按內容匹配刪除時,確保規則存在,否則報錯

a-4. -R

-R <鏈名> <規則號碼> <具體規則內容>

REPLACE,替換一條規則 例如:

iptables -R INPUT 3 -j ACCEPT 將原來編號爲3 的規則內容替換爲“-j ACCEPT"

注意:
確保規則號碼≤ 已有規則數,否則報錯

a-5. -P

-P <鏈名> <動作>

POLICY,設置某個鏈的默認規則 例如:

iptables -P INPUT DROP 設置filter 表INPUT 鏈的默認規則是DROP.

注意:

當數據包沒有被規則列表裏的任何規則匹配到時,按此默認規則處理。動作前面不能加–j,這也是唯一一種匹配動作前面不加–j 的情況。

a-6. -F

-F [鏈名]

FLUSH,清空規則 例如:

iptables -F INPUT 清空filter 表INPUT 鏈中的所有規則.

iptables -t nat -F PREROUTING 清空nat 表PREROUTING 鏈中的所有規則.

注意:
1、-F 僅僅是清空鏈中規則,並不影響-P 設置的默認規則
2、-P 設置了DROP 後,使用-F 一定要小心!!!
3、如果不寫鏈名,默認清空某表裏所有鏈裏的所有規則.

b-1.-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 鏈的所有規則以及詳細數字,不反解

b-2.匹配條件

£流入、流出接口(-i、-o)
£來源、目的地址(-s、-d)
£協議類型(-p)
£來源、目的端口(--sport、--dport)

b-3.按網絡接口匹配

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

b-4.按來源目的地址匹配

-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 <匹配目的地址>
可以是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.aaa.com 匹配去往域名www.aaa.com 的數據包.

b-5.按協議類型匹配

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

b-6.按來源目的端口匹配

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

b-7.匹配應用舉例.

1、端口匹配
-p udp --dport 53
匹配網絡中目的端口是53 的UDP 協議數據包
2、地址匹配
-s 10.1.0.0/24 -d 172.17.0.0/16
匹配來自10.1.0.0/24 去往172.17.0.0/16 的所有數據包
3、端口和地址聯合匹配
-s 192.168.0.1 -d www.abc.com -p tcp --dport 80
匹配來自192.168.0.1,去往www.abc.com 的80 端口的TCP 協議數據包
注意:
1、--sport、--dport 必須聯合-p 使用,必須指明協議類型是什麼
2、條件寫的越多,匹配越細緻,匹配範圍越小.

b-8.動作(處理方式)

£ ACCEPT
£ DROP
£ SNAT
£ DNAT
£ MASQUERADE

b-9.

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

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

-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

-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.

-j MASQUERADE
動態源地址轉換(動態IP 的情況下使用)
例如:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
將源地址是192.168.0.0/24 的數據包進行地址僞裝.

 



 

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