- 防火牆相關概念
- iptables相關概念以及工作原理
- iptables中四表五鍊的原理及規則
- iptables中的基本指令詳解
------------------防火牆相關概念----------------------
LINUX防火牆:隔離内部網絡和外部網絡的隔離技術。
介于3-4層的傳輸 ——管理控制 服務的提供。
系統安全:
1.第三方監控防毒軟體
2.系統政策
3.檔案權限
4.防火牆規則 :原位址 目标位址 端口 協定 mac 資料包中的标志
類似ACL通路控制清單: 過濾
從邏輯上講。防火牆可以大體分為主機防火牆和網絡防火牆。
主機防火牆:針對于單個主機進行防護。
網絡防火牆:往往處于網絡入口或邊緣,針對于網絡入口進行防護,服務于防火牆背後的本地區域網路。
網絡防火和主機防火牆并不中突,可以了解為,網絡防火牆主外(集體),主機防火牆主内(個人)。
從實體上講,防火牆可以分為硬體防火牆和軟體防火牆。
硬體防火牆:在硬體級别實作部分防火牆功能,另一部分功能基于軟體實作,性能高,成本高。如:思科ASA 華為防火牆 天融信防火牆 等。
軟體防火牆:應用軟體處理邏輯運作于通用硬體平台之上的防火牆,性能低,成本低。如:iptables firewall(centos7獨有的)等。
-------------iptables相關概念------------------
iptables其實不是真正的防火牆,我們可以把它了解成一個用戶端代理,使用者通過 iptables這個代理,将使用者的安全設定執行到對應的安全架構中,這個安全架構”才是直正的防火牆,這個架構的名字叫 netfilter。
netfilter才是防火牆真正的安全架構( framework), netfilter位于核心空間。
iptables其實是個指令行工具,位于使用者空間,我們用這個工具操作真正的架構。
netfilter/ iptables(下文中簡稱為 iptables)組成 Linux平台下的包過濾防火牆,與大多數的 Linux軟體一樣,這個包過濾防火牆是兔費的,它可以代替昂貴的商業防火牆解決方案,完成封包過濾、封包重定向和網絡位址轉換(NAT)等功能。
Netfilter是 Linux作業系統核心層内部的—一個資料包處理子產品,它具有如下功能:
網絡位址轉換( Network Address Translate)
資料包内容修改以及資料包過濾的防火牆功能。是以說,雖然我們使用 service iptables start啟動 iptables"服務",但是其實準确的來說, iptables并沒有一個守護程序,是以并不能算是真正意義上的服務,而應該算是核心提供的功能。
----------------iptables基礎工作原理----------------
我們知道 iptables是按照規則來辦事的,我們就來說說規則( rules),規則其實就是網絡管理者預定義的條件,規則一般的定義為"如果資料標頭符合這樣的條件,就這樣處理
這個資料包”。規則存儲在核心空間的資訊包過濾表中,這些規則分别指定了源位址、目的位址、傳輸協定(如TCP、UDP、|CMP)和服務類型(如HTP、FP和SMTP)等。
資料包與規則比對時, iptables就根據規則所定義的方法來處理這些資料包,如放行( accept)、拒絕( reject))和丢棄(drop)等。配置防火牆的主要工作就是添加、修改
和删除這些規則。
這樣說可能并不容易了解,我們來換個容易了解的角度,從頭說起
當用戶端通路伺服器的web服務時,用戶端發送封包到網卡,而tcp/ip協定棧是屬于核心的一部分,是以,用戶端的資訊會通過核心的TCP協定傳輸到使用者空間中的web服務
中,而此時,用戶端封包的目标終點為web服務所監聽的套接字(P:Por)上,當web服務需要響應用戶端請求時,web服務發出的響應封包的目标終點則為用戶端,這個時
候,web服務所監聽的P與端囗反而變成了原點,我們說過, netfilter 才是真正的防火牆,它是核心的部分,是以,如果我們想要防火牆能夠達到"防火"的目的,則需要在内
核中設定關卡,所有進出的封包都要通過這些關卡,經過檢查後,符合放行條件的才能放行,符合阻攔條件的則需要被阻止,于是,就出現了input關卡和 output關卡,而這些
關卡在 iptables中不被稱為關卡"而被稱為鍊"。

其實我們上面描述的場景并不完善,因為用戶端發來的封包通路的目标位址可能并不是本機,而是其他伺服器,當本機的核心支援 IP FORWARD時,我們可以将封包轉發給其
他伺服器,是以,這個時候,我們就會提到 iptables中的其他”關卡,也就是其他鍊”,他們就是"路由前”、“轉發”、"路由後”,他們的英文名是
PREROUTING、 FORWARD、 POSTROUTING
也就是說,當我們啟用了防火牆功能時,封包需要經過如下關卡,也就是說,根據實際情況的不同,封包經過鍊可能不同。如果封包需要轉發,那麼封包則不會經過 Input鍊
發往使用者空間,而是直接在核心空間中經過 forward鍊和 postrouting鍊轉發出去的。
是以,根據上圖,我們能夠想象出某些常用場景中,封包的流向
到本機某程序的封包: PREROUTING->|NPUT
由本機轉發的封包: PREROUTING-> FORWARD-> POSTROUTING
由本機的某程序發出封包(通常為響應封包): OUTPUT-> POSTROUTING
1. 規則表
表的概念
我們再想想另外一個問題,我們對每個"鍊”上都放置了一串規則,但是這些規則有些很相似,比如,A類規則都是對ip或者端囗的過濾,B類規則是修改封包,那麼這個時候,我
們是不是能把實作相同功能的規則放在一起呢,必須能的
我們把具有相同功能的規則的集合叫做表”,是以說,不同功能的規則,我們可以放置在不同的表中進行管理,而iptables已經為我們定義了4種表,每種表對應了不同的功
能,而我們定義的規則也都逃脫不了這4種功能的範圍,是以,學習 iptables之前,我們必須先搞明白每種表的作用。
iptables為我們提供了如下規則的分類,或者說, iptables為我們提供了如下"表”:
filter表:負責過濾功能,防火牆;核心子產品: iptables_filter
nat 表: network address translation,網絡位址轉換功能;核心子產品: iptables_nat
mangle表:拆解封包,做出修改,并重新封裝的功能; iptables_mangle
raw表:關閉nat表上啟用的連接配接追蹤機制; iptables_raw
也就是說,我們自定義的所有規則,都是這四種分類中的規則,或者說,所有規則都存在于這4張表中。
- raw:進階功能,如:網址過濾。
- mangle:資料包修改(QOS),用于實作服務品質。
- nat:位址轉換,用于網關路由器。Nat位址轉換
- filter:包過濾,用于防火牆規則。過濾資料包,通還是不通
資料包經過防火牆的處理順序
2. 規則鍊 處理時機
鍊的概念
現在,我們想象一下,這些”關卡在 tables中為什麼被稱作"鍊呢?我們知道,防火牆的作用就在于對經過的封包比對"規則”,然後執行對應的”動作“是以,當封包經過這些
關卡的時候,則必須比對這個關卡上的規則,但是,這個關卡上可能不止有一條規則,而是有很多條規則,當我們把這些規則串到一個鍊條上的時候,就形成了“鍊是以,我們
把每一個關卡"想象成如下圖中的模樣,這樣來說,把他們稱為鍊更為合适,每個經過這個關卡的封包,都要将這條鍊”上的所有規則比對遍,如果有符合條件的規則,
則執行規則對應的動作。
INPUT鍊:處理輸入資料包。入站資料包處理
OUTPUT鍊:處理輸出資料包。出站資料包處理
PORWARD鍊:處理轉發資料包。
PREROUTING鍊:用于目标位址轉換(DNAT)進站進行的過濾。
POSTOUTING鍊:用于源位址轉換(SNAT)出站進行的過濾。
3.表鍊關系
首先
我們需要注意的是,某些“鍊中注定不會包含某類規則°,就像某些"關卡"天生就不具備某些功能一樣,比如,A"關卡"隻負責打擊陸地敵人,沒有防空能力,B"關卡“隻負
責打擊空中敵人,沒有防禦步兵的能力,C關卡"可能比較NB,既能防空,也能防禦陸地敵人,D"關卡·最屌,海陸空都能防。
那讓我們來看看,每個關卡都有哪些能力,或者說,讓我們看看每個"鍊"上的規則都存在于哪些表"中。
我們還是以圖為例,先看看 prerouting "鍊"上的規則都存在于哪些表中。
注意:下圖隻用于說明 prerouting 鍊上的規則存在于哪些表中,并沒有描述表的順序。
這幅圖是什麼意思呢?它的意思是說, prerouting鍊隻擁有nat表、raw表和 mangle表所對應的功能,是以, prerouting中的規則隻能存放于nat表、raw表和 mangle表中
那麼,根據上述思路,我們來總結一下,每個關卡”都擁有什麼功能,
或者說,每個”鍊中的規則都存在于哪些”表”中。
PREROUTING的規則可以存在于:raw表, mangle表,nat表
NPUT的規則可以存在于: mangle表, filter表,( centos7中還有nat表, centos6中沒有)。
FORWARD的規則可以存在于: mangle表, filter表
OUTPUT的規則可以存在于:raw表 mangle表,nat表,filter表
POSTROUTING的規則可以存在于: mangle表,nat表。
但是,我們在實際的使用過程中,往往是通過”表作為操作入口,對規則進行定義的,之是以按照上述過程介紹 iptables,是因為從關卡的角度更容易從入門的角度了解,但
是為了以便在實際使用的時候,更加順暢的了解它們,此處我們還要将各"表"與"鍊"的關系羅列出來,
表(功能)<->鍊(鈎子)
raw表中的規則可以被哪些鍊使用: PREROUTING, OUTPUT
mangle表中的規則可以被哪些鍊使用: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
nat表中的規則可以被哪些鍊使用: PREROUTING, OUTPUT, POSTROUTING( centos7中還有NPUT, centos6中沒有)
filter表中的規則可以被哪些鍊使用: INPUT, FORWARD, OUTPUT
其實我們還需要注意一點,因為資料包經過一個鍊的時候,會将目前鍊的所有規則都比對遍,但是比對時總歸要有順序,我們應該一條一條的去比對,而且我們說過,相同
功能類型的規則會彙聚在一張”表中,那麼,哪些“表"中的規則會放在鍊”的最前面執行呢,這時候就需要有一個優先級的問題,我們還拿 prerouting"鍊"做圖示
prerouting鍊中的規則存放于三張表中,而這三張表中的規則執行的優先級如下
raw --> mangle—> nat
但是我們知道, iptables為我們定義了4張長"表"當他們處于同一條"鍊"時,執行的優先級如下
優先級次序(由高而低):
raw -- mangle --> nat—> filter
但是我們前面說過,某些鍊天生就不能使用某些表中的規則,是以,4張長表中的規則處于同一條鍊的目前隻有 output鍊,它就是傳說中海陸空都能防守的關卡。
為了更友善的管理,我們還可以在某個表裡面建立自定義鍊,将針對某個應用程式所設定的規則放置在這個自定義鍊中,但是自定義連結不能直接使用,隻能被某個預設的鍊當
做動作去調用才能起作用,我們可以這樣想象,自定義鍊就是一段比較"短"的鍊子,這條短”鍊子上的規則都是針對某個應用程式制定的,但是這條短的鍊子并不能直接使用
而是需要焊接在 Iptables預設定義鍊子上,才能被 iptables使用,這就是為什麼預設定義的鍊需要把自定義鍊當做動作去引用的原因。這是後話,後面再聊,在實際使用
時我們即可更加的明白。
------------------資料經過防火牆的流程-----------------
綜上所述,我們可以将資料包通過防火牆的流程總結為下圖:
我們在寫 Iptables規則的時候,可以時刻牢記這張路由次序圖,靈活配置規則。
我們将經常用到的對應關系重新寫在此處,友善對應圖例檢視。
鍊的規則存放于哪些表中(從鍊到表的對應關系)
· REROUTING的規則可以存在于:raw表, mangle表,nat表。
·NPUT的規則可以存在于: mangle表, filter表,( centos7中還有nat表, centos6中沒有)。
·FORWARD的規則可以存在于: mangle表, filter表。
·OUTPUT的規則可以存在于:raw表 mangle表,nat表, filter表。
·POSTROUTING的規則可以存在于: mangle表,nat表。
表中的規則可以被哪些鍊使用(從表到鍊的對應關系):
·raw表中的規則可以被哪些鍊使用: PREROUTING, OUTPUT
·mangle表中的規則可以被哪些鍊使用: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
·nat表中的規則可以被哪些鍊使用: PREROUTING, OUTPUT, POSTROUTING( centos7中還有|NPUT, centos6中沒有
·filter表中的規則可以被哪些鍊使用: INPUT, FORWARD, OUTPUT
下圖中nat表在 centos7中的情況就不再标明。
--------------規則的概念-----------------
規則:根據指定的比對條件來嘗試比對每個流經此處的封包,一旦比對成功,則由規則後面指定的處理動作進行處理
那麼我們來通俗的解釋一下什麼是 Iptables的規則,之前打過一個比方,每條鍊都是一個"關卡,每個通過這個"關卡”的封包都要比對這個關卡上的規則,如果配,則對報
文進行對應的處理,比如說,你我二人此刻就好像兩個封包”,你我二人此刻都要入關,可是城主有命,隻有器宇軒昂的人才能入關,不符合此條件的人不能入關,于是守關将
土按照城主制定的規則”,開始打量你我二人,最終,你順利入關了,而我已被拒之門外,因為你符合器宇軒昂的标準,是以把你放行"了,而我不符合标誰,是以沒有被放
行,其實,“宇軒昂就是種比對條件”,“放行就是種動作,"比對條件”與”動作“組成了規則
了解了規則的概念,那我們來聊聊規則的組成部分此處隻是大概的将規則的結構列出,後面的文章中會單獨對規則時進行總結。
規則由比對條件和處理動作組成
比對 條件
比對條件分為基本比對條件與擴充比對條件
基本比對條件
源位址 Source IP,目标位址 Destination|P
上述内容都可以作為基本比對條件
擴充比對條件
除了上述的條件可以用于比對,還有很多其他的條件可以用于比對,這些條件泛稱為擴充條件,這些擴充條件其實也是 netfilter中的部分,隻是以子產品的形式存在,如果想要
使用這些條件,則需要依賴對應的擴充子產品
源端口 Source port,目标端口 Destination Port
上述内容都可以作為擴充比對條件
- ACCEPPT:接受資料包。
- DROP:直接丢棄資料包。不給任何回應資訊,這時候用戶端會感覺自己的請求沉入大海,等過了逾時時間才會有反應。
- REDIRECT:重定向、映射、透明代理。
- SNAT:源位址轉換。
- DNAT:目标位址轉換。
- MASQUERADE:IP僞裝(NAT),用于ADSL。是SNAT的一種特殊形式,适用于動态的,臨時會變的IP上。
- LOG:日志記錄。在/var/log/messages檔案中記錄日志資訊。除了記錄對資料包不做任何動作。
------------------------基礎指令-------------------------
-t<表>: 指定要操縱的表
-A: 向規則鍊末尾中添加,追加條目;(append)
-D: 從規則鍊中删除條目;(delete)
-I: 向規則鍊的開頭(或者指定序号)中插入條目,未指定規則序号時,預設作為第一規則;(insert)
-R: 替換規則鍊中的條目;
-L: 顯示規則鍊中已有的條目;(list)
-F: 清除規則鍊中已有的條目,若位置定規則序号,則預設清空所有;(flush)
-v: 檢視規則清單時顯示詳細資訊(verbose)
-Z: 清空規則鍊中的資料包電腦和位元組計數器;
-N: 建立新的使用者自定義規則鍊;
-P: 定義規則鍊中的預設目标;(police)
-h: 顯示幫助資訊;
-p: 指定要比對的資料包協定類型;
-s: 指定要比對的資料包源ip位址;
-j<目标>:指定要跳轉的目标;
-i<網絡接口>:指定資料包進入本機的網絡接口;
-o<網絡接口>:指定資料包要離開本機所使用的網絡接口。
iptables指令選項輸入順序:
iptables -t 表名 <-A/I/D/R> 規則鍊名 [規則号] <-i/o 網卡名> -p 協定名 <-s 源IP/源子網> -- sport 源端口 <-d 目标IP/目标子網> -- dport 目标端口 -j 動作
PS:
LUNIX7 上面獨有的firewall 區域劃分 public 預設區域信任區域 非信任區域
systemctl start firewalld.service LINUX7上面獨有的防火牆firewall
-------------------NAT表基礎拓撲實驗---------------------
NAT表
NAT 位址轉換
SNAT source 源位址 轉換 作用場景:内部網絡通路廣域網
DNAT destnation 目标位址轉換 作用場景:廣域網主機通路内部網絡伺服器
1.拓撲實驗環境
搭建以上iptables規則。
一共開三個虛拟機 全部網絡擴充卡設定為僅主機模式
web1:一台centos6.5 作為内部網絡内的用戶端,設定ip位址為192.168.100.101
web2:一台centos7 作為外部網絡,設定ip位址12.0.0.12
一台centos6.5 作為iptables防火牆(要有雙網卡)一個網卡設定為内部網的網卡192.168.100.1,一個設定為外部網的網卡12.0.0.1,service network restart 重新開機下網卡
2.實驗思路
在iptables防火牆上配置
· 清空防火牆的規則filter 預設規則
· 清空防火牆 nat規則
· vim /etc/sysctl.conf——net.ipv4.ip_forward = 1 #永久開啟路由功能
· sysctl –p #重新加載配置檔案
· 開始進行iptables的規則設定
3.操作步驟
1)iptables防火牆 :修改配置檔案,開啟路由功能
清除iptables防火牆中原有的規則(因為是實驗是以删除所有iptables規則,現實中按實際情況操作)
2)SNAT source : 源位址轉換
指令是:
[ root@yangruoheng ~]# iptables –t nat –A POSTROUTING –s 192.168.100.0/24 –o eth0 –j SNAT --to-source 12.0.0.1
#使192.168.100.0網段的内網web服務資料包出站轉換成12.0.0.1的IP位址
3)DNAT destination : 目标位址轉換