Linux 内核防火墙的工作原理二

包过滤

  每个钩子函数都可以对数据包进行处理,最基本的操作为对数据包进行过滤,系统管理员可以通过

iptable工具来向内核模块注册多个过滤规则,并且指明过滤规则的优先权,设置完以后每个钩子按照规则

进行匹配,如果与规则匹配,函数就会进行一些过滤操作,这些操作主要如下:

    NF_ACCEPT:继续正常地传递包

    NF_DROP:丢弃包,停止传送

    NF_STOLEN:已经接管了包,不要继续传送

    NF_QUEUE:排列包

    NF_REPEAT:再次使用该钩子

包选择

  在netfilter框架上已经创建了一个包选择系统,这个包选择工具默认已经注册了3个表,分别是过滤表(filter)、

网络地址转换表(NAT)和mangle表

  在调用钩子函数时是按照表的顺序来调用,例如在执行NF_IP_PRE_ROUTING时,首先检查filter表,然后

检查Mangle表,最后检查NAT表,

  过滤表(filter)过滤包而不会改变包,仅仅是过滤的作用,实际上由网络过滤框架来提供NF_IP_FORWARD钩子

的输出和输入接口使得很多过滤工作变得非常简单,从图中可以看出,NF_IP_lLOCAL_IN和NF_IP_LOCAL_OUT

也可以做过滤,但是只是针对本机,

  网络地址转换表(NAT)分别服务于两套不同的网络过滤挂钩的包,对于非本地包,NF_IP_PRE_ROUTING和

NF_IP_POST_ROUTING可以挂钩可以完美地解决源地址和目的地址的变更

  NAT表与filter表的区别在于只有新建连接的第1个包会在表中传送,结果将被用于以后所有来自这一连接的包,

例如某一个连接的第1个数据包在这个表中被替换了源地址,那么以后这条连接的所有包都将被替换源地址

  mangle表被用于真正的改变包的信息,mangle表和所胡的5个网络过滤的钩子函数都有关

原文地址:https://www.cnblogs.com/myworld5218/p/9779243.html