Linux 透過支援網路命名空間的介面公開網路狀態。自 Linux 2.6.25 起,
/proc/net 是指向 /proc/self/net 的相容性符號連結,因此它描述的是執行讀取操作之程序所在的
網路命名空間。現代工具通常使用 Netlink,而不是解析 procfs。
路由與 Netlink #
IPv4 轉送資訊庫(FIB)決定封包的傳送位置。
/proc/net/route 是它的歷史檢視;ip route 則透過 Netlink 查詢和變更核心。Netlink 是一種
以訊息為導向的通訊端家族,讓使用者空間無需新增系統呼叫即可設定和檢查核心子系統。
路由、連結、位址、鄰居、流量控制和 Netfilter 都使用它。
Netfilter 與 iptables #
Netfilter 在網路堆疊中提供封包處理掛鉤。iptables 是用於 IPv4 的傳統使用者空間規則管理工具
(IPv6 使用 ip6tables);目前的系統通常使用 nftables,但其相容層仍可接受 iptables 語法。
重要的 iptables 表包括:
filter是預設的過濾表,包含INPUT、FORWARD和OUTPUT鏈。nat對連線的第一個封包執行位址或連接埠轉譯,並包含PREROUTING、INPUT、OUTPUT和POSTROUTING鏈。mangle在多個掛鉤處修改特殊的封包欄位。raw在連線追蹤之前執行,並可透過NOTRACK讓流量免於連線追蹤。security在過濾表之後套用強制存取控制標籤,用於 SELinux 及相關 Linux Security Module 原則。
規則會依照鏈中的順序進行評估。INPUT 套用於傳送至本機通訊端的封包,FORWARD 套用於經過路由的流量,
而 OUTPUT 套用於本機產生的封包。連線追蹤讓後續封包能夠遵循針對其流程所作出的決定。
評論
在 GitHub 上閱讀或評論(發表評論需要登入)