防火牆相關概念linux
iptables相關概念以及工做原理
web
iptables中四表五鏈的原理及規則vim
iptables中的基本命令詳解centos
------------------防火牆相關概念----------------------安全
LINUX防火牆:隔離內部網絡和外部網絡的隔離技術。服務器
介於3-4層的傳輸 ——管理控制 服務的提供。網絡
系統安全:app
1.第三方監控殺毒軟件框架
2.系統策略tcp
3.文件權限
4.防火牆規則 :原地址 目標地址 端口 協議 mac 數據包中的標誌
相似ACL訪問控制列表: 過濾
從邏輯上講。防火牆能夠大致分爲主機防火牆和網絡防火牆。
主機防火牆:針對於單個主機進行防禦。
網絡防火牆:每每處於網絡入口或邊緣,針對於網絡入口進行防禦,服務於防火牆背後的本地局域網。
網絡防火和主機防火牆並不中突,能夠理解爲,網絡防火牆主外(集體),主機防火牆主內(我的)。
從物理上講,防火牆能夠分爲硬件防火牆和軟件防火牆。
硬件防火牆:在硬件級別實現部分防火牆功能,另外一部分功能基於軟件實現,性能高,成本高。如:思科ASA 華爲防火牆 天融信防火牆 等。
軟件防火牆:應用軟件處理邏輯運行於通用硬件平臺之上的防火牆,性能低,成本低。如:iptables firewall(centos7獨有的)等。
-------------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 : 源地址轉換
POSTOUTING鏈:用於源地址轉換(SNAT)出站進行的過濾。
命令是:
[ 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 : 目標地址轉換
PREROUTING鏈:用於目標地址轉換(DNAT)進站進行的過濾。
命令是:
[ root@yangruoheng ~]# iptables –t nat –A PREROUTING –d 12.0.0.1 –p tcp --dport 80 –i eth1 –j DNAT -- to-destination 192.168.100.101
#使經過12.0.0.1網卡的數據包發送的ip地址指向爲192.168.100.101的內網web服務