配置IPTABLES防火牆(1)

iptables技能: 需要熟悉linux防火牆的表,鏈結構;理解數據包匹配的基本流程;會管理和設置iptbables規則;會使用防火牆腳本的一般方法。

linux防火牆功能是由內核實現的: 

  2.0版本中,包過濾機制是ipfw,管理工具是ipfwadm 

  2.2版本中,包過濾機制是ipchain,管理工具是ipchains

  2.4以後的版本中,包過濾機制是netfilter,管理工具是iptables(本次介紹的就是iptables)

netfilter:

  位於linux內核中的包過濾防火牆功能體系

  稱爲linux防火牆的"內核態"

iptables:

  位於/sbin/iptables,是用來管理防火牆的命令工具

  爲防火牆體系提供過濾規則和策略,決定如何過濾或處理到達防火牆主機的數據包(工作於TCP/IP的網絡層)

  稱爲linux防火牆的"用戶態"

iptables的規則鏈,規則表結構    

  規則鏈:

    規則的作用在於對舉報進行過濾或處理,根據處理時機的不同,各種規則被組織在不同的鏈中

    規則鏈是防火牆規則/策略的集合

  默認的5種規則鏈:

    INPUT    處理入站數據包

    OUTPUT    處理出站數據包

    FORWARD    處理轉發數據包

    POSTROUTING    在進行路由選擇後處理數據包

    PRERROUTING    在進行路由選擇前處理數據包

規則表:

    具有某一類相似類型的防火牆規則,按照不通的處理時機去分到不同的規則鏈之後,被歸置到不同的表中

    規則表是規則鏈的集合

默認的4張表:  

raw    確定是否對該數據包進行狀態跟蹤

managle    爲數據包設置標記

nat表    修改數據包中的源,目標ip地址或者端口

filter    確定是否放行該數據包(過濾)

數據包過濾匹配流程

規則表的優先順序

raw  -->  managle  -->  nat  --> filter 

規則鏈間的匹配順序

入站數據    PREROUTING  -->  INPUT

出站數據    OUTPUT  -->  POSTROUTING

轉發數據    PREROUTING  --> FORWARD  -->  POSTROUTING

規則鏈內的匹配順序

按順序依次進行檢查,找到相匹配的規則即停止(log策略除外)

若找不到的匹配的規則,則按照默認策略處理

入站數據流:

來自外界的數據包到達防火牆 -->被PREROUTING處理(確認是需要修改數據包地址等)--->路由選擇(判斷數據包應該發往何處)---> 如果目標地址是防火牆本身,那麼內核將其傳遞給INPUT鏈進行處理(決定是否通過)---> 通過以後則交給上層應用程序處理

轉發數據流:

來自外界的數據包到達防火牆 -->被PREROUTING處理(確認是需要修改數據包地址等)--->路由選擇(判斷數據包應該發往何處)---> 如果目標地址是其他外部地址,那麼內核將其傳遞給FORWARD鏈進行處理(是否轉發或者攔截)---> 然後在交給POSTROUTING鏈(是否修改數據包地址等)進行處理

出站數據流:

防火牆本機向外部地址發送數據包--->先被OUTPUT鏈規則處理(是否放行)---> 路由選擇 --->然後傳遞給POSTROUTING(是否修改數據包的地址等)進行處理


管理和設置iptables規則

iptables 命令的語法格式

iptables [-t 表名] 管理選項 [鏈名] [條件批匹配] [-j 目標動作或者跳轉]

iptables -t 表名 <-A/I/D/R> 規則鏈名 [規則號] <-i/o 網卡名> -p 協議名 <-s 源IP/源子網> --sport 源端口 <-d 目標IP/目標子網> --dport 目標端口 -j 動作

幾個注意事項

不指定表名時,默認是的表是filter

不指定鏈名時,默認時該表內所有的鏈

除非設置規則鏈的缺省策略,否則都需要指定匹配條件


iptables命令的管理選項

-t<表>:指定要操縱的表; 

-A:向規則鏈中添加條目; 

-D:從規則鏈中刪除條目; 

-i:向規則鏈中插入條目; 

-R:替換規則鏈中的條目; 

-L:顯示規則鏈中已有的條目; 

-F:清楚規則鏈中已有的條目; 

-Z:清空規則鏈中的數據包計算器和字節計數器; 

-N:創建新的用戶自定義規則鏈; 

-P:定義規則鏈中的默認目標; 

 -h:顯示幫助信息; 

-p:指定要匹配的數據包協議類型; 

-s:指定要匹配的數據包源ip地址; 

-d<目標>:指定要跳轉的目標; 

-i<網絡接口>:指定數據包進入本機的網絡接口; 

-o<網絡接口>:指定數據包要離開本機所使用的網絡接口。

設置規則內容

iptables -t filter -A INPUT -p tcp -j ACCEPT    在input表末尾添加一條規則

iptables -I INPUT -p udp -j ACCETP    插入到input表第一行,原來第一行變爲的第二行

iptables -I INPUT 2 -p icmp -j ACCEPT    插入到input表第二行,原來的第二行變爲的第三行              iptables -P INPUT DROP    設置默認input表規則爲DROP

iptables -L INPUT --line-number   顯示input表規則以及行數

清除規則

iptables -D INPUT 2    清除INPUT第二條規則


設置匹配數據包的條件

通用條件匹配

可直接使用,不依賴其他的條件或者擴展模塊

包括網絡協議,ip地址,網絡接口等匹配方式

隱含條件匹配

一般需要以特定的協議匹配作爲前提

包括端口,tcp標記,icmp類型等匹配方式

顯式條件匹配

需要使用"-m 擴展模塊" 的形式明確指定匹配方式

包括多端口,mac地址,ip地址範圍,數據包狀態等匹配方式

eg.通用條件匹配

協議匹配

使用"-p 協議名"的形式 

協議名可使用在/etc/protocols 文件中定義的名稱

常用協議有 tcp  udp icmp

地址匹配

使用"-s 源地址","-d 目標地址" 的形式

iptables -I INPUT -p icmp -j REJECT     拒絕icmp協議

iptables -A FORWARD ! -p icmp -j ACCEPT 允許非icmp協議的轉發

iptables -A FORWARD -s 192.168.1.11 -j REJECT    禁止轉發來源地址是192.168.1.11的數據

iptables -A FORWARD -s 192.168.0.0/20 -j ACCEPT  允許192.168.0.0/20網段數據轉發

iptables -A INPUT -i eth1 -s 192.168.0.0/20 -j DROP 丟棄192.168.0.0/20通過eth1訪問的數據包

iptables -I FORWARD -o eth1 -d 192.168.3.114 -j DROP

iptables -I FORWARD -i  eth1 -s  192.168.3.114 -j DROP 

#  封堵網段2小時

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

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

echo "iptables -D INPUT 1"  >> /root/deliptables 

echo "iptables -D FORWARD 1 " >> /etc/deliptables

at now +2 hours -f /etc/deliptables 

eg. 隱含條件匹配   

端口匹配

使用"--sport 源端口", "--dport 目標端口"的形式

採用 "端口1:端口2"的形式可以指定一個範圍的端口

TCP標記匹配

使用 "--tcp-flaqs檢測範圍,被設置的的標記"的形式

1.只允許的192.168.3.114通過22端口

iptables -A INPUT -p tcp --dport 22 -s 192.168.3.114 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j DROP  

2.防止tcp泛洪***

iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j REJECT

3.禁ping(不允許別人ping,允許自己可以ping)    

iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP   # 拒絕ping請求也可以使用數據8

iptables -I INPUT -p icmp --icmp-type Echo-Reonly -j ACCEPT  # 允許ping應答也可以使用數字0

iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT    #暫時不知道是什麼鬼。等有時間研究下

4.開放服務器10000端口到10010端口

iptables -A INPUT  -p tcp --dport 10000:10010 -j ACCEPT

iptables -A OUTPUT  -p tcp --dport 10000:10010 -j ACCEPT 

eg. 顯式條件匹配 

mac地址匹配

使用"-m mac" 結合 "--mac-source mac地址"的形式

多端口匹配

使用"-m multiport" 結合 "--sports 源端口列表" 或者的是"--dports 目標端口列表"的形式

多個端口之間使用逗號","分隔,連續的端口使用冒號":"

1. 禁止轉發來自mac地址爲00:0C:BA:25:34:3B的主機的數據包

iptables -A FORWARD -m mac --mac-source 00:0C:BA:25:34:3B -j DROP

2. 開放防火牆本機的TCP端口:22,23,25,110,10000-10010

iptables -A INPUT -p tcp -m multiport --dports 22,23,25,110,10000:10010 -j ACCEPT

3.禁止轉發源ip地址爲192.168.3.100-192.168.3.110的tcp數據包

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.3.100-192.168.3.110 -j DROP

4.禁止轉發與正常tcp連接無關的非--syn的包

iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

5.拒絕訪問主機的新數據包,但是允許訪問已經建立連接的相關數據包

iptables -A INPUT -m state --state NEW -p tcp -j DROP 

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

數據包控制

常見的數據包處理方法(後面會詳細說明這個)

ACCEPT    放行數據包

DROP    丟棄數據包

REJECT    拒絕數據包

LOG    記錄日誌,並傳遞給下一個規則處理

用戶自定義的鏈名    傳遞給自定義的鏈內的規則處理

導入,導出防火牆規則

導出規則 

iptables-save

結合重定向輸出">"符號保存規則信息

導入規則

iptables-restore    

結合重定向輸入"<"符號恢復規則信息

iptables-save > /etc/sysconfig/iptables

iptables-save < /etc/sysconfig/iptables 

        


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