概述
Netfilter 是由内核 2.4.x 和 2.6.x 提供的数据包截获机制,它替代了内核 2.2.x 中 使用的 ipchains、防火墙钩子和其他方法。Netfilter 也可以作为 LKM 获得。
要使用 netfilter,在内核编译时设置 Packet Filtering 选项。
可以对采用防火墙钩子机制的同类应用程序使用 netfilter 机制,这些应用程序有:路由程序、数据包嗅探器和其他位于网络边缘并访问通信流的实体。
回页首
使用 Netfilter
Netfilter 可以在通过 TCP/IP 协议栈的路径中的几个定义良好的点上捕获数据包:
NF_IP_PRE_ROUTING
在对数据包进行初始正确性检查(校验和等)后,保存该数据包。
NF_IP_LOCAL_IN
如果数据包将要到达本地主机,则捕获该数据包。
NF_IP_FORWARD
如果数据包将要到达某些其他主机,则捕获该数据包。
NF_IP_LOCAL_OUT
在本地捕获其目的地是外部的已创建的数据包。
NF_IP_POST_ROUTING
这是最后的钩子,在此之后将传输数据包。
当数据包穿过 TCP/IP 协议栈后,协议调用带有数据包和钩子号的 netfilter 框架。钩子也 可以指派优先级。
函数的返回值包括:
NF_ACCEPT
数据包继续在正常的 TCP/IP 路径上传输。