Linux防火牆工具iptables基礎介紹



iptables基礎知識說明:

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

INPUT:處理入站數據包

OUTPUT:處理出站數據包

FORWARD:處理轉發數據包

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

PREROUTING鏈:在進行路由選擇前處理數據包


二.規則表:規則表是規則鏈的集合(優先順序:raw、mangle、nat、filter)

raw表:確定是否對該數據包進行狀態跟蹤(OUTPUT、PREROUTING)

mangle表:爲數據包設置標記(PREROUNTING、POSTROUTING、INPUT、OUPUT、FORWARD)

nat表:修改數據包中的源、目標IP地址或端口(PREROUTING、POSTROUTIN、OUTPUT)

filter表:確定是否放行該數據包(過濾)(INPUT FOREARD、OUTPUT)

規則鏈間的匹配順序

入站數據:PREROUTING、INPUT

出站數據:OUTPUT、POSTROUTING

轉發數據:PREROUTING、FORWARD、POSTROUTING


iptables命令的語法格式

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

注意:不指定表名時,默認表示filter表

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

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


四.命令選項

-A:在指定鏈的末尾添加(–apped)一條新的規則(注意與-I的插入位置區別)
-D:刪除(–delete)指定鏈中的某一條規則,按規則序號或內容確定要刪除的規則
-I:在指定鏈中插入(–insert)一條新的規則,若未指定插入位置,則默認在鏈的開頭插入
-R:修改、替換(–replace)指定鏈的某一條規則,按規則序號或內容確定要替換的規則

-L:列出(–list)指定鏈中所有的規則進行查看,若未指定鏈名,則列出表中所有鏈的內容
-F:清空(–flush)指定鏈中的所有規則,若未指定鏈名,則清空表中的所有鏈的內容
-N:新建(–new-chain)一條用戶自己定義的規則鏈

-X:刪除指定表中用戶自定義的規則鏈
-P:設置指定鏈的默認策略(–policy)
-n:使用數字形式(–numeric)顯示輸出結果
-v:查看規則列表時顯示詳細(–verbose)的信息
-Z: 清空防火牆包的數量和字節數
-V:查看iptables命令工具的版本(–version)信息
-h:查看命令幫助信息(–help)

–line-numbers:查看規則表時,同時顯示規則在鏈中的順序號
其中-A  -I的區別在於,-A添加到鏈末尾,-I插入到鏈最前邊。 防火牆規則是越前邊的越先生效,存在生效次序的差別


五.通用(general)條件匹配

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

包括網絡協議、IP地址、網絡接口等匹配方式


1.協議匹配

使用“-p 協議名”的形式

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

常用的協議包括tcp、udp、icmp等

例:拒絕進入防火牆的所有icmp協議的數據包

iptables -I INPUT -p icmp -j REJECT


2.地址匹配

使用“-s源地址(–source)”、“-d 目標地址(–destination)”的形式

地址可以是單個IP地址、網絡地址(帶掩碼長度)

例:拒絕轉發來自192.168.1.11主機的數據

itables -A FORWARD -s 192.168.1.11 -j REJECT


3.網絡端口匹配

使用“-i 網絡接口名 (–in-interface)”、 “-o 網絡接口名(–out-interface)”形式,分別對應接收、發送數據包的網絡接口

例:丟棄10.20.30.0/24網段,並在2小時後解封

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

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

at now +2 hours

at > iptables -D INPUT 1

at > iptables -D FORWARD 1

(crtl + D 結束)


六.隱含(implicit)條件匹配

1.端口匹配

使用“–sport 源端口”、“–dport 目標端口”的形式

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

例:僅允許管理員從202.13.0.0/16使用ssh

 iptables -A INPUT  118.114.245.37  -p tcp  22000 -s  -j ACCEPT

 iptables -A INPUT -p tcp  22000 -j DROP


2.TCP標記匹配

使用“–tcp-flags 檢查範圍 被設置的標記”的形式

如“–tcp-flags SYN,RST,ACK SYN”表示檢查SYN、RST、ACK這3個標記,只有SYN爲1時滿足條件

例:拒絕從外網接口(eth1)直接訪問防火牆備機的數據包,但是允許響應防火牆TCP請

 求的數據包進入

 iptables -P INPUT DROP

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

 iptables -I INPUT -i eth1 -p tcp –tcp-flags !–syn -j ACCEPT

(–syn的用法爲兼容舊版本iptables的形式,此處等於–tcp-flags SYN, RST, ACK SYN)


3.ICMP類型匹配

使用“–icmp-type ICMP類型”的形式

ICMP類型可以使用類型字符串或者對應的數值,例如Echo-Request、Echo-Reply

例:禁止其他主機ping防火牆主機,但是允許從防火牆上ping其他主機(允許接收ICMP

 迴應數據)

 iptables -A INPUT -p icmp –icmp-type Echo-Request -j DROP

 iptables -A INPUT -p icmp –icmp-type Echo-Reply -j ACCEPT

 iptables -A INPUT -p icmp –icmp-type destination-Unreachable -j ACCEPT


七.顯示條件匹配

1.MAC地址匹配

使用“-m mac”結合“–mac-source MAC地址”的形式

例:禁止轉發來自MAC地址爲00:0C:29:27:55:3F的主機的數據包

 iptables -A FORWARD -m mac –mac-source 00:0C:29:27:55:3F -j DROP


2.多端口匹配

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

多個端口之間使用逗號“,”分隔,連續的端口也可以使用冒號“:”分隔

例:允許防火牆本機對外開放TCP端口20、21、25、110以及被動模式FTP端口1250-1280

 iptables -A INPUT -p tcp -m multiport –dport 20,21,25,110,1250:1280 -j ACCEPT


3.IP地址範圍匹配

使用“-m iprange”結合“–src-range 源IP範圍”或者“–dst-range 目標IP範圍” 的形式

以“-”符號連接起始IP地址、結束IP地址

例:禁止轉發源IP地址爲192.168.1.20~192.168.1.99的TCP數據包

 iptables -A FORWARD -p tcp -m iprange –src-range 192.168.1.20-192.168.1.99 -j DROP


4.數據包狀態匹配

使用“-m state”結合“–state 狀態類型”的形式

同時表示多種狀態時以逗號“,”分隔

常見的數據包狀態包括:NEW、ESTABLISHED、RELATED

例:拒絕訪問防火牆的新數據包,但允許響應連接或與已有連接相關的數據包

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

 iptables -A INPUT -p tcp -m state –state ESTABLISHED,RELATED -j ACCEPT


八.數據包控制

常見的數據包處理方式

ACCEPT:放行數據包

DROP:丟棄數據包,不給出任何迴應信息

REJECT:拒絕數據包,必要時會給數據發送端一個響應信息

LOG:記錄日誌信息,並傳遞給下一條規則處理

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

SNAT:修改數據包的源地址信息

DNAT:修改數據包的目標地址信息


九.導入、導出防火牆規則

導出規則

iptables-save

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

導入規則

iptables-restore

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


十.SNAT策略

SNAT策略的典型應用環境

局域網主機共享單個公網IP地址接入Internet

SNAT策略的原理

源地址轉換,Source Network Address Translation

修改數據包的源IP地址

前提條件

局域網各主機正確設置IP地址/子網掩碼

局域網各主機正確設置默認網關地址

推薦實現步驟

1. 開啓網關主機的路由轉發功能

2. 添加使用SNAT策略的防火牆規則

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0-j SNAT –to-source 218.29.30.31

在路由選擇之後進行處理,-s 特定局域網,-o需要從接口eth0外出的數據包–to-source 218.29.30.31網關主機外網口ip地址


十一.MASQUERADE(地址僞裝)策略

只需將 “-j SNAT –to-source 218.29.30.31”的形式改爲“-j MASQUERADE”即可

如果是通過ADSL撥號方式連接Internet,則外網接口名稱通常爲 ppp0、ppp1等

MASQUERADE策略應用示例

iptables -t nat -A POSTROUTING -s 192.168.1.0/24-o ppp0 -j MASQUERADE


十二.DNAT策略

DNAT策略的典型應用環境

在Internet中發佈位於企業局域網內的服務器

DNAT策略的原理

目標地址轉換,Destination Network Address Translation

修改數據包的目標IP地址

前提條件

局域網的Web服務器正確設置了IP地址/子網掩碼

局域網的Web服務器正確設置了默認網關地址


推薦實現步驟

1. 確認已開啓網關的路由轉發功能

2. 添加使用DNAT策略的防火牆規則

規則示例:

iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp –dport 80 -j DNAT–to-destination192.168.1.6

(在路由選擇之前進行處理,-i 外網接口進入的數據包,-d訪問網關的公網ip地址的數據包,-dport訪問標準Web服務端口的數據包,–to-destination內網中Web服務器的實際IP地址)

通過DNAT策略同時修改目標端口號


使用形式

只需要在“–to-destination”後的目標IP地址後面增加“:端口號”即可,即:

-j DNAT –to-destination 目標IP:目標端口

通過DNAT策略修改目標端口號的應用示例

從Internet中訪問網關主機(218.29.30.31)的 2222 端口時,實際由運行在局域網主機(192.168.1.5)的 22 端口的應用程序提供服務

iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp –dport 2222 -j DNAT –to-destination 192.168.1.5:22


十三iptables的開啓和關閉

1. Linux防火牆(Iptables)重啓系統生效

  1. 開啓: chkconfig iptables on  

  2. 關閉: chkconfig iptables off  


2.Linux防火牆(Iptables) 即時生效,重啓後失效

  1. 開啓: service iptables start  

  2. 關閉: service iptables stop



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