歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux netfilter/iptables內核模塊介紹

netfilter架構

netfilter架構其實就是在一個packet流經系統時的多個關鍵點處設置了鉤子,程序員可以為每一個鉤子點注冊一個監聽器(即鉤子函數,就是在packet流經這個鉤子點時的一段處理代碼),鉤子函數將決定packet的下一個動作是什麼?

在鉤子函數的代碼最後需要決定netfiler框架接下來需要怎麼處理packet,可以返回以下5種值:

NF_ACCEPT: continue traversal as normal.

NF_DROP: drop the packet; don't continue traversal.

NF_STOLEN: I've taken over the packet; don't continue traversal.

NF_QUEUE: queue the packet (usually for userspace handling).

NF_REPEAT: call this hook again.

Iptables--filter、nat、mangle表

IPtables作為一個packet選擇系統建立在netfilter框架之上。Iptables可擴展內核,注冊一系列規則表,從而要求每一個packet進過某個表從而實現對某些packet的過濾。系統中默認含有3張表,它們分別是:filter、nat、mangle

1. filter,默認表,不能修改packet的內容,只能過濾packet。filter表中設置的規則僅能在NF_IP_LOCAL_IN,NF_IP_FORWARD和NF_IP_LOCAL_OUT鉤子點上注冊監聽器。其中對於NF_IP_FORWARD鉤子,netfilter還提供INPUT和OUTPUT兩種接口。

2. nat, 在‘nat’領域使用,在修改源和目的地址時使用。對於非本地packet,NF_IP_PRE_ROUTING和NF_IP_POST_ROUTING鉤子可以使用來修改packet的源和目的地址。如果定義了CONFIG_IP_NF_NAT_LOCAL,可是使用NF_IP_PRE_ROUTING和NF_IP_POST_ROUTING鉤子修改本地packet的源和目的地址。

3. mangle, 在修改packet信息時使用。mangle表支持所有的5類鉤子。

對於一個packet,程序用能夠編寫鉤子函數的地方及處理的順序如下圖所示:

Copyright © Linux教程網 All Rights Reserved