防火牆與iptables

防火牆是一組規則。當數據包進出受保護的網絡區域時,進出內容(特別是關於其來源、目標和使用的協議等信息)會根據防火牆規則進行檢測,以確定是否允許其通過。

在這裏插入圖片描述
一方面, iptables 是 Linux 機器上管理防火牆規則的工具。

另一方面,firewalld 也是 Linux 機器上管理防火牆規則的工具。

另外一種工具,叫做 nftables。

這一切都從 Netfilter 開始,它在 Linux 內核模塊級別控制訪問網絡棧。幾十年來,管理 Netfilter 鉤子的主要命令行工具是 iptables 規則集。

因爲調用這些規則所需的語法看起來有點晦澀難懂,所以各種用戶友好的實現方式,如 ufw 和 firewalld 被引入,作爲更高級別的 Netfilter 解釋器。然而,ufw 和 firewalld 主要是爲解決單獨的計算機所面臨的各種問題而設計的。構建全方面的網絡解決方案通常需要 iptables,或者從 2014 年起,它的替代品 nftables (nft 命令行工具)。

iptables 沒有消失,仍然被廣泛使用着。事實上,在未來的許多年裏,作爲一名管理員,你應該會使用 iptables 來保護的網絡。但是 nftables 通過操作經典的 Netfilter 工具集帶來了一些重要的嶄新的功能。

防火牆四表

filter:過濾,防火牆
nat :network address translation 網絡地址轉換
mangle:拆解報文,作出修改,封裝報文
raw: 關閉nat表上啓用的鏈接追蹤機制

在這裏插入圖片描述防火牆五鏈

PREROUTING :數據包進入路由之前
INPUT :目的地址爲本機
FORWARD :實現轉發
OUTPUT :原地址爲本機,向外發送
POSTROUTING :發送到網卡之前

在這裏插入圖片描述
數據包在iptables中的流動順序

iptables 的表和鏈:

現在,讓我們看看當一個數據包到達時它是怎麼依次穿過各個鏈和表的。基本步驟如下:

1. 數據包到達網絡接口,比如 eth0。
2. 進入 raw 表的 PREROUTING 鏈,這個鏈的作用是趕在連接跟蹤之前處理數據包。
3. 如果進行了連接跟蹤,在此處理。
4. 進入 mangle 表的 PREROUTING 鏈,在此可以修改數據包,比如 TOS 等。
5. 進入 nat 表的 PREROUTING 鏈,可以在此做DNAT,但不要做過濾。
6. 決定路由,看是交給本地主機還是轉發給其它主機。

到了這裏我們就得分兩種不同的情況進行討論了,一種情況就是數據包要轉發給其它主機,這時候它會依次經過:

7. 進入 mangle 表的 FORWARD 鏈,這裏也比較特殊,這是在第一次路由決定之後,在進行最後的路由決定之前, 我們仍然可以對數據包進行某些修改。
8. 進入 filter 表的 FORWARD 鏈,在這裏我們可以對所有轉發的數據包進行過濾。需要注意的是:經過這裏的數據包是轉發的,方向是雙向的。
9. 進入 mangle 表的 POSTROUTING 鏈,到這裏已經做完了所有的路由決定,但數據包仍然在本地主機,我們還可以進行某些修改。
10. 進入 nat 表的 POSTROUTING 鏈,在這裏一般都是用來做 SNAT ,不要在這裏進行過濾。
11. 進入出去的網絡接口。完畢。

另一種情況是,數據包就是發給本地主機的,那麼它會依次穿過:

7. 進入 mangle 表的 INPUT 鏈,這裏是在路由之後,交由本地主機之前,我們也可以進行一些相應的修改。
8. 進入 filter 表的 INPUT 鏈,在這裏我們可以對流入的所有數據包進行過濾,無論它來自哪個網絡接口。
9. 交給本地主機的應用程序進行處理。
10. 處理完畢後進行路由決定,看該往那裏發出。
11. 進入 raw 表的 OUTPUT 鏈,這裏是在連接跟蹤處理本地的數據包之前。
12. 連接跟蹤對本地的數據包進行處理。
13. 進入 mangle 表的 OUTPUT 鏈,在這裏我們可以修改數據包,但不要做過濾。
14. 進入 nat 表的 OUTPUT 鏈,可以對防火牆自己發出的數據做 NAT 。
15. 再次進行路由決定。
16. 進入 filter 表的 OUTPUT 鏈,可以對本地出去的數據包進行過濾。
17. 進入 mangle 表的 POSTROUTING 鏈,同上一種情況的第9步。注意,這裏不光對經過防火牆的數據包進行處理,還對防火牆自己產生的數據包進行處理。
18. 進入 nat 表的 POSTROUTING 鏈,同上一種情況的第10步。
19. 進入出去的網絡接口。完畢。

各參數的作用

    -t<表>:指定要操縱的表;
    -A:	向規則鏈中添加條目;
    -D:	從規則鏈中刪除條目;
    -i:	向規則鏈中插入條目;
    -R:	替換規則鏈中的條目;
    -L:	顯示規則鏈中已有的條目;
    -F:	清楚規則鏈中已有的條目;
    -Z:	清空規則鏈中的數據包計算器和字節計數器;
    -N:	創建新的用戶自定義規則鏈;
    -P:	定義規則鏈中的默認目標;
    -h:	顯示幫助信息;
    -p:	指定要匹配的數據包協議類型;
    -m:	加載其他模塊功能;
    -s:	指定要匹配的數據包源ip地址;
    -j<目標>:		指定要跳轉的目標;
    -i<網絡接口>:	指定數據包進入本機的網絡接口;
    -o<網絡接口>:	指定數據包要離開本機所使用的網絡接口。

iptables配置語句規則

在這裏插入圖片描述在這裏插入圖片描述

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