linux防火墙实现技术比较
2006-04-03 12:36:40 来源:WEB开发网FW1是怎么解决这个问题的呢?见下面的代码(从汇编代码翻译成的C程序):
packet_type *fw_type_list=NULL;
static struct packet_type fw_ip_packet_type =
{
__constant_htons(ETH_P_IP),
NULL, /* All devices */
fw_filterin,
NULL,
NULL, /* next */
};
fwinstallin(int isinstall )
{
packet_type *temp;
/*安装*/
if(isinstall==0){
dev_add_pack(&fw_ip_packet_type);
fw_type_list = fw_ip_packet_type->next;
for(temp = fw_type_list; temp; temp=temp->temp)
dev_remove_pack(temp);
}
/*卸载*/
else {
dev_remove_pack(&fw_ip_packet_type);
for(temp = fw_ip_packet_type; temp; temp=temp->next)
dev_add_pack(temp);
}
}
不难看出,FW1把ip_packet_type歇载掉了,然后自己在自己的处理函数(fw_filterin)中调ip_recv。
输出的挂载和lkm的手法一样,更改dev->hard_start_xmit。dev结构在2.2版本的发展过程中变了一次,为了兼容FW1对这点也做了处理(通过检查版本号来取偏移)。
还有一款linux下的防火墙产品WebGuard(http://www.gennet.com.tw/b5/csub_webguard.html)采用的手法与FW1其非常类似。有兴趣的人可以自行研究一下。
四 规则
4.0 综述
4.1 ipchains
man ipfw可以看到这一段的详细解释。关键数据结构如下:
规则链用ip_chain结构来表示,缺省有input,ouptput,forward三条链。在配置规则的时候,也可以添加新的链。每条链事实上就是一组相关的规则,以链表的形式存储。
更多精彩
赞助商链接