測試內核版本:Linux Kernel 2.6.35----Linux Kernel 3.2.1
知識基礎:本防火牆的開發基於對Linux內核網絡棧有個良好的概念,本人對網絡棧的分析是基於早期版本(Linux 1.2.13),在明確了網絡棧架構的前提下,上升一步分析高級版本內核中的Netfilter防火牆實現原理,然後進行模塊或內核編程,開發一款基於包過濾的個人防火牆。
包過濾防火牆:包過濾防火牆是用一個軟件查看所流經的數據包的包頭(header),由此決定整個包的命運。它可能會決定丟棄(DROP)這個包,可能會接受(ACCEPT)這個包(讓這個包通過),也可能執行其它更復雜的動作。工作於網絡層,能對IP數據報進行首部檢查。例如:IP源地址,目的地址,源端口和目的端口等。
本防火牆的包過濾功能如下:
* 拒絕來自某主機或某網段的所有連接。
* 允許來自某主機或某網段的所有連接。
* 拒絕來自某主機或某網段的指定端口的連接。
* 允許來自某主機或某網段的指定端口的連接。
* 拒絕發去某主機或某網段的所有連接。
* 允許發去某主機或某網段的所有連接。
* 拒絕發去某主機或某網段的指定端口的連接。
* 允許發去某主機或某網段的指定端口的連接。
Netfilter框架是Linux內核分析和過濾特定協議數據包處理框架,為其他模塊動態參與網絡層數據包處理提供了方便的途徑。
本防火牆的簡單功能就是檢查數據包是否符合過濾的條件,如果不符合就捨棄(Drop),否則就接受(Accept),這裡定義八個鏈表頭結點
用於保存配置文件中的地址或端口信息。
定義兩個鉤子函數hook_func_in和hook_func_out,分別將其掛載到INET協議族的入口NF_INET_LOCAL_IN和出口NF_INET_LOCAL_OUT:
說明一下自己定義的一些宏和引用的頭文件: