netfilter 模块中的数据处理.ppt

netfilter 模块中的数据处理.ppt

NF_IP_POST_ROUTING HOOK FUNCTION FILE ? NF_IP_POST_ROUTING ? __ip_finish_output ip_output.c ip_mc_output ip_output.c ip_mc_output ip_output.c hook的顺序(优先级) NF_IP_POST_ROUTING NF_IP_PRE_ROUTING NF_IP_FORWARD NF_IP_LOCAL_OUT conntrack[-200] nat[dnat][-100] mangle[-150] conntrack[max] nat[snat][100] mangle[-150] NF_IP_LOCAL_IN filter[0] conntrack[max-1] mangle[-150] mangle[-150] filter[0] filter[0] nat[dnat][-100] mangle[-150] conntrack[-200] nat[100] * * 专业化、规范化、标准化、电子化 2 1 表 目录 HOOK 3 阅读代码 4 结束 * * 专业化、规范化、标准化、电子化 2 1 表 目录 HOOK 3 阅读代码 4 结束 * * 专业化、规范化、标准化、电子化 腾达与你共同发展 HOOK(检查点/链):是按照数据在内核中的处理位置来设置的监测点 表:是按照功能进行的分类,是链的结合 * * * * 在NF_IP_LOCAL_IN上没有规则,所以用了alloc_null_binding,做空绑定?? * * * * 最多支持8个检查点 检查点的命名:有一定的含义 检查点的位置:包的流程,执行流(流是根据包的信息来分流的),协议栈的流程(协议栈有多种实现方式) 同一执行流上,同一检查点可以出现几次?(一般来说,只需要出现一次,否则就是浪费) 同一检查点可以出现在不同的执行流上,保证对所有的网络流量都要控制的能力 如何确定网络流的路径?如何避免遗漏?如何提高效率? 过滤的意义就在于:对所有的网络流量都有控制的能力 检查点上的钩子函数是扩展的关键 检查点上钩子函数的顺序安排是否合理决定了功能的实现是否合理 * 注意传递给nf_hookfn的参数:hooknum,检查点的编号;skb,需要检查的包;in,接收包的设备;out,发送包的设备;okfn,检查通过后需要执行的后续处理(与nf_hookfn的执行结果相关) in并不一定就是收到包的物理设备的指针,这个需要看二层传递给三层的参数是什么 in和out在不同的检查点上的值可能不同,也可能为空 * 检查点就像一个水闸,可以截断水流。如果水流被截断,后面的沟渠就不会有包流到。 钩子函数就是一个个闸门,闸门的开关决定了水流是否可以往下流。 那么okfn当然就是水闸后的沟渠,检查通过后,水当然是往下流。(把这个okfn与nf_hook_ops中的okfn区分开) 如果在钩子函数中截断水流,后面的钩子函数就没有机会检查水流了。 钩子函数中不能设置跳转 * NF_DROP:水流被闸门消耗了?(不符合质量守恒定律啊?) NF_ACCEPT:水流可以通过 NF_STOLEN:水流被缓存(这个闸门的缓存量可够大的了) NF_QUEUE:把水流引向其他地方 NF_REPEAT:再次调用当前的钩子函数 * 发往本机的包流过NF_IP_PRE_ROUTING,NF_IP_LOCAL_IN 本机发出的包流过NF_IP_LOCAL_OUT,NF_IP_POST_ROUTING 本机转发的包流过NF_IP_PRE_ROUTING,NF_IP_FORWARD,NF_IP_POST_ROUTING 这是三层检查点的位置,二层的检查点和这个不一样 第一个ROUTE将包分流成流向本机的包和本机需要转发的包(一个简单的分类) 第二个ROUTE是为本机发出的包找发送设备 本机分片在NF_IP_POST_ROUTING之前还是之后?应该是之后吧? NF_IP_PRE_ROUTING里面会将分片重组,在NF_IP_FORWARD里面还会再分片,然后再NF_IP_POST_ROUTING里面再重组,然后再NF_IP_POST_ROUTING之后再分片,这样的流程合理吗? 在NF_IP_LOCAL_OUT之前的ROUTE会做哪些事,只有找本机发出包的源地址吗?能不能直接用它找到的路由cache? * 执行流:多个执行流可以执行同一段代码,但是每个执行流的状态却不同 协议栈流程:函数的调用关系,是静态的 包的流程:包在协议栈中的流动

文档评论(0)

1亿VIP精品文档

相关文档