Linux 的内核提供的防火墙功能通过netfilter框架实现,并提供了iptables工具配置和修改防火墙的规则。
1. netfilter 框架
netfilter的通用框架不依赖具体协议。而为每种网络协议定义了一套钩子函数。这些钩子函数在数据包经过协议栈的几个关键点被调用。协议栈将数据包以及钩子函数作为参数,传递给netfilter框架。
netfilter 主要步骤及函数:
NF_IP_PRE_ROUTING:
NF_IP_LOCAL_IN:
NF_IP_FORWARD:
NF_IP_POST_ROUTING:
NF_IP_LOCAL_OUT:
NF_IP_POST_ROUTING:
2.包过滤
每个函数都可以对数据包进行处理。系统管理员可以通过iptables工具来向内核模块注册多个过滤规则,并且指明过滤规则的优先权。设置完成后每个钩子按照规则进行匹配。如果与规则匹配,函数就会进行一些过滤操作。主要操作:
NF_ACCEPT:
NF_DROP:
NF_STOLEN:
NF_QUEUE:
NF_REPEAT
3.包选择
在netfilter上已经创建了一个包选择系统,这个包选择工具默认已经注册了3个表:
1.过滤表(filter):过滤包而不会改变包。
2.NAT表:
3.mangle表:mangle表被用于真正改变包的信息。
在调用钩子函数时,是按照表的顺序来调用的。 package->filter表->nat表->mangle表
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/2014.html