天天看點

指令(3)====ip tables

1、防火牆基礎

linux防火牆主要工作在網絡層,針對TCP/IP資料包實施過濾和限制(包過濾防火牆或網絡層防火牆),linux防火牆

是基于核心編碼實作,具有非常穩定的性能和高效率

(1)netfilter:包過濾防火牆:包過濾防火牆是用一個軟體檢視所流經的資料包的標頭(header),由此決定整個包的命運。

它可能會決定丢棄(DROP)這個包,可能會接受(ACCEPT)這個包(讓這個包通過),也可能執行其它更複雜的動作。

工作于網絡層,能對IP資料報進行首部檢查。例如:IP源位址,目的位址,源端口和目的端口等。

核心态防火牆體系

(2) iptables:指的是用于管理linux防火牆的指令程式

使用者态防火牆體系

(3)iptables的表鍊結構

 表

1)filter表:用來對資料包進行過濾,根據規則确定如何處理一個資料包

 filter表對應的核心子產品是iptable_filter,表内包含3個鍊

 INPUT FORWARD OUTPUT

2)    net表:nat(Network Address Translation)網絡位址轉換

 主要用來修改IP位址、端口号等資訊

 net表對應的核心子產品是iptable_nat

 PREROUTING POSTROUTING OUTPUT

3) mangle表:mangle表用來修改資料包的TOS服務類型、TTL生存周期、或者為資料包設定Mark标記

 以實作流量整形、政策路由等進階應用

 mangle表對應的核心子產品為iptable_mangle,表内含5個鍊

 PREROUTING POSTROUTING INPUT OUTPUT FORWARD

4)   raw表:主要用來決定是否對資料包進行狀态跟蹤

 raw表對應的核心子產品為iptable_raw,表内包含兩個鍊

 OUTPUT PREROUTING

 鍊

1) INPUT鍊:  當收到通路防火牆本機位址的資料包(入站)時,應用此鍊中規則

2)OUTPUT鍊:  當防火牆本機向外發送資料包(出站)時,應用此鍊中規則

3)FORWARD鍊: 當接收到需要通過防火牆中轉發給其他位址的資料包(轉發)時,應用此鍊中規則

4)PREROUTING鍊:在對資料包做路由選擇之前,應用此鍊中規則

5)POSTROUTING鍊:在對資料包做路由器選擇之後,應用此鍊中規則

       4表5鍊

INPUT OUTPUT 主要用在“主機型防火牆”主要針對伺服器本身進行保護

FORWARD PREROUTING POSTROUTING 多用在“網絡型防火牆”中,可以做linux防火牆的網管伺服器

在公司内網與網際網路之間進行安全控制

規則之間的順序

raw mangle nat filter 

1)入站資料流向:來自外界的資料包到達防火牆後,首先被PREROUTING鍊處理然後進行路由選擇

 (判斷該資料包應該發往何處),如果資料包的目标位址是防火牆本機,那麼

 核心将其傳遞給INPUT鍊處理

2)轉發資料流向:如果資料包的目标位址是其它外部位址,則核心将其傳遞給FORWARD鍊進行處理

 (允許轉發或攔截、丢棄),最後交給POSTROUTING(是否修改資料包位址等)進行處理

3)出站資料流向:首先OUTPUT鍊處理,然後進行路由選擇,再交給POSTROUTING鍊

 (是否修改資料包的位址等),進行處理

    4)每條鍊内的規則(比對即停止)如果第一條通過了後續的規則将失效

2、編寫防火牆規則

iptables -t 表名 管理選項 鍊名 比對條件 -j 控制類型

ACCEPT 允許資料包通過

DROP   丢棄資料包

REJECT 拒絕資料包,必要時會給資料端發送一個相應資訊

LOG    在/var/log/messages 檔案中記錄日志資訊,然後将資料包傳遞給下一條規則

   因為LOG隻是一種輔助動作,是以“比對即停止”,對LOG是個特例,還會繼續比對

iptables 指令的常用的幾個管理選項

-A 在指定鍊的末尾添加一條新的規則

-D 删除指定鍊中的規則,可指定序号或具體内容

-I 在指定鍊中插入一條新的規則,未指定序号預設作為第一條規則

-R 修改、替換

-L 列出規則  list

-F 清空規則

-P 設定指定鍊的預設規則

-n 使用數字形式顯示輸出結果

-v 檢視規則清單顯示詳細資訊

-h 檢視指令幫助資訊

--line-numbers 檢視規則清單時,同時顯示規則在鍊中的序号

1、其它主機無法ping通主機

iptables -t filter -I INPUT -p icmp -j REJECT

2、在INPUT鍊末尾添加一條允許tcp協定通過的規則

iptables -t filter -A INPUT -p tcp  -j ACCEPT

3、在filter表INPUT鍊添加位于表中排序第一的規則和排序第二的規則

iptables -t filter -I INPUT   -p udp  -j ACCEPT

iptables -t filter -I INPUT 2 -p icmp -j ACCEPT

4、檢視規則清單

iptables -L  INPUT --line-numbers

iptables -n -L  INPUT     (資料多用這個減少解析時間)

5、删除清空清單

iptables -D INPUT 3    #删除filter表INPUT鍊的第3條資訊

iptables -F INPUT      #清空file表INPUT鍊中的所有資訊

iptables -F            #清空filter表

iptables -t nat -F     #清空nat表

iptables -t mangle -F  #清空mangle表

6、設定預設政策

filter表FORWARD預設政策為丢棄,OUTPUT鍊預設政策為允許 

iptables -t filter -P FORWARD DROP

iptables -P OUTPUT ACCEPT

7、通用比對

協定比對

若要丢棄通過icmp協定通路防火牆本機的資料包,允許轉發經過防火牆出icmp以外的的資料包

iptables -I INPUT -p icmp -j DROP

iptables -A FORWARD ! -P icmp -j ACCEPT

位址比對

若要拒絕轉發源位址為192.168.1.11的資料,允許轉發源位址位于192.168.7.0/24網段的資料

iptables -A FORWARD -s 192.168.1.11 -j REJECT

iptables -A FORWARD -s 192.168.7.0/24 -j ACCEPT

若檢測到來自某個網段(10.20.30.0/24)的頻繁掃描添加防火牆進行封鎖

iptables -I INPUT -s 10.20.30.0/24 -j DROP

iptables -I FORWARD -s 10.20.30.0/24 -j DROP

網絡接口比對

若要丢棄外網接口(eth1)通路防火牆本機且源位址為私有位址的資料包

iptables -A INPUT -i eth1 -s 10.0.0.0/8  -j DROP

iptables -A INPUT -i eth1 -s 172.16.0.0/12  -j DROP

iptables -A INPUT -i eth1 -s 192.168.0.0/16  -j DROP

端口比對

若要允許為網段192.168.4.0/24轉發DNS查詢資料包

iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT

iptables -A FORWARD -d 192.168.4.0/24 -p udp --dport 53 -j ACCEPT

建構vsftpd伺服器時,若要開放20.21端口,以及用于被動模式的端口範圍24500~24600

iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

iptables -A INPUT -p tcp --dport 24500:24600 -j ACCEPT

ICMP類型比對                                      #icmp-type檢查icmp協定

iptables -A INPUT -p icmp --icmp-type 8 -j DROP   #拒絕其他請求但是自己可以ping其它機器

iptables -A INPUT -p icmp --icmp-type 0 -j DROP   #我ping其它的主機傳回來的資訊我接收

iptables -A INPUT -p icmp --icmp-type 3 -j DROP   #對方不存在傳回值我接收

iptables -A INPUT -p icmp -j DROP                 #禁止所有機器ping

顯示比對

若要允許本機開放25.80.110.143端口 

iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT

IP範圍比對

若要禁止轉發源IP位址位于192.168.4.21與192.168.4.28之間的tcp資料包

iptables -A FORWARD -p tcp -m iprange -src-range 192.168.4.21-192.168.4.28 -j REJECT

MAC位址比對 -m 子產品

若要根據MAC位址封鎖主機,禁止其通路本機的任何應用 

iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -DROP

狀态比對

若要禁止轉發與正常TCP連接配接無關的非--syn請求的資料包

iptables -A FORWARD -m state --state NEW -p tcp !--syn -j DROP #無正常連接配接的狀态是NEW

#NEW狀态子產品的非syn選項

若隻開放本機的web服務(80端口)

iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT  #插入行首一條将有關聯的包放行

iptables -A INPUT -p tcp --dport 80 -j ACCEPT                    #緊随其後添加一條允許80端口開放

iptables -P INPUT DROP                               #目前兩條規則都沒比對上執行預設規則丢棄資料包

本文轉自 大雪兒 51CTO部落格,原文連結:http://blog.51cto.com/dingxue/1974853,如需轉載請自行聯系原作者

繼續閱讀