iptables和netfilter
1.iptables和netfilter說明
[1]netfilter/iptables組成Linux平臺下的包過濾防火牆,iptables是使用者空間的管理工具,netfilter是核心空間的包處理框架。
2.資料包處理流程
這個還是很簡單的,首先資料包進入PREROUTING鏈,之後根據路由決策進入INPUT(本機)還是FORWARD(轉發),進入INPUT後會繼續進入OUTPUT鏈,最後都走到POSTROUTING鏈。
另外,如果加入各種規則之後,則資料包進入某個鏈之後,還要順序執行鏈上的規則,如果匹配某個規則,則根據匹配的規則來處理資料包(例如ACCEPT、DROP或者REJECT),如果都不匹配則使用預設的策略處理資料包。
3.表、鏈、規則
理論上,只要在鏈上新增規則就可以了,這樣每個鏈上就有一個規則連結串列,只要資料包到鏈上之後,順序檢查這些規則就可以了。
但是,實現中又把規則分為了四種類型,放到了四張表中,即raw、mangle、nat、filter,並且優先順序raw > mangle > nat > filter,並且還有下面一張圖,這個圖從左往右是這四個表的優先順序,並且說明了每個表可以新增到哪個鏈上,但是這個圖和資料包的流程沒有關係,這個圖只是說明了規則之間的關係,正確的理解應該為:
[1]每個規則肯定是位於某個鏈上,並且這個規則還在某個表中,其實就是這個規則的型別,這樣當一個鏈上有多個規則時,便會根據規則型別的不同,有了優先順序,優先順序高的規則先檢查。
[2]iptables命令格式為:iptables [-t table] COMMAND chain CRETIRIA -j ACTION,可以看到-t是在最前面的,這就表示對於新增規則來說,規則的型別(表)是最重要的引數。
最終,四張表、五條鏈的理解為:資料包依次進入鏈中進行處理,然後根據每個鏈上的規則的優先順序,依次執行每個鏈上的規則。新增規則時,根據要新增的這個規則的作用,首先指定規則的型別,然後再配置這個規則的其他引數。