iptables介紹linux
iptables是與最新的2.6.x版本的linux內核集成的ip信息包過濾系統。若是linux系統鏈接到因特網lan、服務器或連接lan和因特網的代理服務器,則該服務器有利於在linux系統上更好的控制ip信息包過濾和防火牆配置。算法
neitfilter/iptables ip信息包過濾系統是一種強大的工具,可用於添加、編輯和出去規則,這些規則是在作信息包過濾時決定的防火牆所遵循和組成的規則。這些規則存儲在專用的信息包過濾表中,而這些表集成在linux內核中。在信息包過濾表中,規則被分組放在咱們所謂的鏈中。安全
隋坦netfilter/ iptables ip信息包過濾系統被稱爲單個實體,但實際上有兩個組件netfilter和iptables組成。bash
neitfilter組件也稱爲內核空間(kernelspace),是內核一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。服務器
iptables組件是一種工具,也成爲用戶空間(userpace),它使插入、修改和除去信息包過濾表中的規則變得容易。除非晉正在使用RED HAT LINUX 7.1或更高版本網絡
,不然須要下載該工具並安裝使用它。ssh
包交換和狀態監測tcp
防火牆一般使用的安全控制手段主要有包過濾、狀態監測、代理服務。包過濾服務是一種簡單、有效的安全控制技術。它經過在網絡間相互鏈接的設備上加載容許、禁止來自某些特定的原地址、目的地址、TCP端口號等規則,對經過設備的數據包經行檢測,限制數據包進出內部網絡。工具
包過濾的最大優勢是對用戶透明,傳輸性能高。反因爲安全控制層次在網絡層、傳輸層。安全控制力度也只限於原地址、目的地址和端口號。於是只能進行較爲初步的安全監測,對於惡意的擁塞攻擊、內存覆蓋或病毒等高層次的攻擊手段,則無能爲力。性能
狀態監測是比包過濾更爲有效的安全控制方法。對新建的應用鏈接,狀態監測監察與此案時至的安全規則,容許符合規則的鏈接經過,並在內存中記錄下該連接的相關信息,生成狀態表。對該鏈接的後續數據包,只要符合狀態表就能夠經過。這種防治的好處在於:因爲不須要對每個數據包進行規則檢查,而是一個鏈接的後續數據包(一般是大量的數據包)經過散列算法,直接進行狀態檢查,從而使得性能獲得較大提升:並且因爲狀態表示動態的,於是能夠有選擇的、動態開通1024號以上端口,使得安全性獲得進一步的提升。
如今防火牆主要分爲如下三種類型:包過濾、應用代理、狀態監測
包過濾防火牆:如今靜態包過濾防火牆市面上已經看不到了,取而代之的是動態包過濾技術的防火牆哈~
代理防火牆:由於一些特使的報文能夠輕鬆突破包過濾防火牆的保護,好比你們知道的SYN攻擊、ICMP 洪水攻擊,因此一代理服務器做爲專門衛用戶保密或者突破訪問限制的數據轉發通道的應用failing防火牆出現了哈~ 其實用了一種應用協議分析的新技術。
狀態監測防火牆:其基於動態包過濾技術發展而來,加入了一種狀態監測的模塊,近一點發展了 會話過濾功能,會話狀態的保留是有時間限制的,此防火牆還能夠對報的內通進行分析,從而避免開放過多的端口。
iptables 功能介紹
基礎的操做方法
啓動指令:service iptables start
重啓指令:service iptables restart
關閉指令: service iptables stop
iptables 的表與鏈
iptables具備Filter.NAT,Mangle,RAW四種內建表:
1Filter表
Filter表示iptables的默認表,所以若是你沒有自定義表,那麼久默認使用filter表,它具備如下三種內件鏈:
INPUT鏈-處理來自外部的數據。
OUTPOT鏈-處理向外發送的數據。
FORWARD鏈-將數據轉達到本機的其餘網卡設備上。
2 NAT表
NAT 表有三種內建鏈:
PREROUTING 鏈-處理剛到達本機並在路由轉發前的數據包。他會轉換數據包中的目標IP 地址(destination ip address ),一般用於DNAT(destination NAT).
POSTROUTING鏈-處於即將離開本機的數據包。他會轉換數據包中的原IP 地址(source ip address ) ,一般用於SNAT(source NAT)。
OUTPUT鏈-處理本機產生的數據包。
3 Mangle 表
Mangle 表用於指定如何處理數據包。他能改變TCP 頭總的QoS位。Mangle表具備5個內建鏈:
PREROUTING
OUTPUT
FORWARD
INPUT
POSTROUTING
4 Raw 表用於處理異常,他具備2個內建鏈:
PREROUTING chain
PUTPUT chain
下面展現了Iptables的三個內建表:
2、IPTABLES 規則(Rules)
牢記如下三點式理解iptables規則的關鍵:
RULES 包括一個條件和一個目標(target)
若是知足條件,就執行目標(target)中的規則或者特定值。
若是不知足條件,就判斷下一條Rules
目標值 (Target Values)
下面是你能夠在target例指定的特殊值:
ACCEPT- 容許防火牆接收數據包
DROP -防火牆丟棄包
QUEUE-防火牆數據包移交發哦用戶空間
RETURN -防火牆中止當前鏈接中的後續Rules .並返回到調用鏈(the calling chain)中。
若是你執行iptables --list你將關防火牆上的可用規則、下列說明當前系統沒有定義防火牆,你能夠看到,他顯示了默認的filter表,以及內默認的input連弩, forward鏈,output鏈。
查看mangle表:
查看NAT表:
查看RAW表
3、清空全部iptables規則
在配置iptables以前,你一般須要用iptables --list命令或者iptables-save命令查看有無存在規則,由於有時須要刪除現有的iptables規則:
這兩條命令式等效的。可是並不是執行後就萬事大吉了。你仍然須要檢查規則是否是真的清空了,由於有linux髮型版上的這個命令不會清除NAT中的規則,除此以外,此時只能手動清除:
4、永久生效
當你刪除、添加規則後,這些更改並不能永久生效,這些規則頗有可能在系統重啓後恢復原樣。爲了讓配置永久生效,根據平臺不一樣,具體操做也不一樣,下面進行簡單介紹:
1 Ubuntu
首先,保存現有規則:
而後新建一個bash 腳本,並保存到/etc/network/if-pre-up.d/目錄下:
這樣,每系統重啓後Iptables規則都會被自動加載。
/!注意:不要嘗試在。bashbrc 或者.profile中執行以上命令,由於用戶一般不是root,並且這隻能在登陸時加載iptables規則。
2 CentOS,Red Hat
查看當前規則:
5、追加Iptables規則
可使用iptables -A命令追加新規則,其中-A 表示Append。所以,新的規則將追加到鏈尾。
通常而言,最後一條規則用於丟棄(DROP)全部數據包。若是你已經有這樣的規則了,而且使用-A參數添加新規則,那麼就是無用功。
1語法
Iptables -A chain firewall-rule
-A chain -指定添加規則鏈
filewall-rule -具體的規則參數
2 描述規則的基本參數
如下這些規則參數用於描述數據包的協議、原地址、目的地址、容許通過的網絡接口,以及如何處理這些數據包。這些描述是對規則的基本描述
-P 協議(protocol)
指定的協議,如tcp,udp,icmp等,可使用all來指定全部協議。
若是不指定-P 參數,則默認是all值。這並不明智,請老是明確指定協議名稱。
可使用協議(如tcp),或者協議值(好比6表明tcp)來指定協議。映射關係請查看/etc/protocols
還可使用-protocol參數代替-P參數
-S 原地址(source)
指定數據包的原地址
參數可使用ip地址、網絡地址、主機名
例如 :- s 192.168.1.101指定ip地址
例如: -s 192.168.1.10/24 指定網絡地址
若是不指定-s參數,就表明全部地址
還可使用-src或者-source
-d 目的地址(destination)
指定目的地址
參數-S 相同
還可使用-dst或者-destination
-j 執行目標(jump to target)
-j 表明jump to target
-j 指定了當與規則(Rule)匹配第如何處理數據包
可能的值是ACCEPT DROP QUEUE RETURN
還能夠指定其餘鏈(Chain)做爲目標
-i 輸入接口 (input interface)
-i 表明輸入接口(input interface)
-i 指定了要處理來自哪一個接口的數據包
這些數據包即將進入INPUT FORWARD PREROUTE
例如: -i etho 制定了要處理經由etho進入的數據包
若是不指定-i參數,那麼將處理進入全部接口的數據包
若是出現! -i etho,那麼將處理全部經由etho之外的接口進入的數據包
若是出現-i eth +,那麼將處理全部經由eth開頭進入的數據包
還可使用-in-interface參數
-o 輸出 (out interface)
-o 表明 out interface
-o 指定了數據包由哪一個接口輸出
這些數據包即將進入FORWARD OUTPUT POSTROUTING 鏈
若是不指定-o etho 那麼系統上的全部接口均可以做爲輸出接口
若是出現! -o etho ,那麼將從etho覺得的接口輸出
若是出現-i eth+,那麼將僅從eth開頭的接口輸出
還可使用-out -interface參數
3 描述規則的擴展參數
對規則有了一個基本描述以後,有時候咱們還但願指定寬口、tcp標誌 ICMP類型等內容。
- sport 源端口 (source port) 針對-p tcp 與-sport ssh
/etc/services文件描述了上述映射關係。
從性能上將,使用端口號更好
使用冒號能夠匹配端口範圍,如 -sport 22:100
還可使用 -source-port
--dport 目的端口 (destination port)針對-p tcp 或者-p udp
參數和-sport相似
還可使用-- destination-port
--tcp-flags TCP 標誌 針對-p tcp
能夠指定由都好=分隔開的多個參數
有效值能夠是:SYN ACK FIN RST URG PSH
可使用all或者NONE
--icmp-type ICMP 類型 針對-p icmp
-icmp-type 0 表示Echo Reply
-icmp-type 8 表示Echo