从五个方面分析linux防火墙框架
在Linux系统Netfilter提供了实现该框架的子功能抽象和一般框架是包过滤系统的定义、框架包括以下五个部分:1。对于每一个网络协议(IPv4,IPv6)定义了一组钩子函数(IPv4定义了5个钩子函数)。在数据的几个关键点的钩子函数通过协议栈的报道称,这些点,协议栈将调用Netfilter框架采用数据报和钩子函数标记作为参数。
2的任何模块。内核可以注册每个协议的一个或多个钩子,并实现连接。当一个数据包被传递到内核的Netfilter框架,可以检测任何模块登记协议和钩子函数。如果注册,注册时使用的模块调用回调函数,使这些模块有机会检查(修改)的数据包,丢弃该数据包并指导Netfilter进入包到用户空间的队列。
三.排队的数据包的处理异步发送到用户空间,用户进程可以检查数据包,修改数据包,甚至把数据包通过该钩子函数从内核到4内核。这是任何IP数据包被丢弃在IP层之前,他们是真的放弃了检查。例如,一个模块可以检查IP欺骗包(找出)。
这一点已经在内核中定义的,内核模块可以在这些钩子点注册,可以使用nf_register_hook函数指定。数据称为数据报通过这些钩子函数的时候,这样的模块可以修改数据并返回下列值的Netfilter:
nf_accept继续数据的正常传输
nf_drop丢弃该数据报,不再传输
的nf_stolen模块进行数据报不继续发送数据报
nf_queue队列的数据包(通常是用来处理数据到用户空间)。
nf_repeat调用钩子函数了
数据报选择系统基于Netfilter框架,称为防火墙,应用在Linux2.4内核。事实上,这是一个简单的继承人的工具,但它具有更好的可扩展性。内核模块可以登记一个新的规则表(表)和需要的数据流通过指定的规则表。这个数据包选择用来实现数据过滤(filter表),网络地址转换(NAT表)和数据报处理(mangle表)。三数据处理功能的设置是基于Linux2.4内核的Netfilter钩子函数和IP表。他们是独立的模块,相互独立的。他们完全融入了netfileter框架。
包过滤
过滤器表不修改数据,但只有滤波器的数据报。一方面iptables的优于ipchains是更小、更快。它是通过钩子函数nf_ip_local_in,nf_ip_forward连接到Netfilter框架,并nf_ip_local_out.so只有一个地方的任何数量的报纸进行过滤,这是在利用巨大的改进,因为转发数据报在IPchains穿越三链。
NAT
NAT表听三Netfilter钩子函数:nf_ip_pre_routing,nf_ip_post_routing,和nf_ip_local_out.nf_ip_pre_routing实现地址转换的源地址,需要转发,而nf_ip_post_routing地址需要转发的数据包的地址。对局部数据的目的地址的转换是由nf_ip_local_out.the NAT实现形式不同过滤表,因为只有第一个数据报,新连接将导线的形式,和随后的数据报将根据第一数据结果做同样的变换处理。NAT表中使用源地址NAT,目的地址NAT,伪装(这是源地址转换的一种特殊情况)和透明代理(它是目标NAT的特殊情况)。
数据处理(数据处理)
mangle表是在nf_ip_pre_routing和nf_ip_local_out钩注册。使用mangle表,您可以修改数据或附加了一些波段数据报文。当前mangle表支持TOS位的修饰和skb的nfmard字段的设置。
如果我们要添加自己的代码,我们需要使用nf_register_hook功能。我们的工作是产生结构nf_hook_ops结构和使用nf_register_hook把钩在它的一个实例。其中,我们总是初始化列表项,{零和零};因为PF总是pf_inet当工作在IP层一般;hooknum就是我们选择的钩点;钩点可以挂多个处理功能;谁想看到它第一取决于优先权,即优先的设计。netfilter_ipv4。H指定的内置处理功能的优先级与枚举类型