nat linux 内核模块,Linux netfilter/iptables内核模块介绍

netfilter架构

netfilter架构其实就是在一个packet流经系统时的多个关键点处设置了钩子,程序员可以为每一个钩子点注册一个监听器(即钩子函数,就是在packet流经这个钩子点时的一段处理代码),钩子函数将决定packet的下一个动作是什么?

5dd784ceee822c5dba7dd297338a2005.gif

在钩子函数的代码最后需要决定netfiler框架接下来需要怎么处理packet,可以返回以下5种值:

NF_ACCEPT: continue traversal as normal.

NF_DROP: drop the packet; don't continue traversal.

NF_STOLEN: I've taken over the packet; don't continue traversal.

NF_QUEUE: queue the packet (usually for userspace handling).

NF_REPEAT: call this hook again.

Iptables--filter、nat、mangle表

IPtables作为一个packet选择系统建立在netfilter框架之上。Iptables可扩展内核,注册一系列规则表,从而要求每一个packet进过某个表从而实现对某些packet的过滤。系统中默认含有3张表,它们分别是:filter、nat、mangle

1. filter,默认表,不能修改packet的内容,只能过滤packet。filter表中设置的规则仅能在NF_IP_LOCAL_IN,NF_IP_FORWARD和NF_IP_LOCAL_OUT钩子点上注册监听器。其中对于NF_IP_FORWARD钩子,netfilter还提供INPUT和OUTPUT两种接口。

2. nat, 在‘nat’领域使用,在修改源和目的地址时使用。对于非本地packet,NF_IP_PRE_ROUTING和NF_IP_POST_ROUTING钩子可以使用来修改packet的源和目的地址。如果定义了CONFIG_IP_NF_NAT_LOCAL,可是使用NF_IP_PRE_ROUTING和NF_IP_POST_ROUTING钩子修改本地packet的源和目的地址。

3. mangle, 在修改packet信息时使用。mangle表支持所有的5类钩子。

对于一个packet,程序用能够编写钩子函数的地方及处理的顺序如下图所示:

003a18f8c5953d6ae1717c77994c68e4.gif0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值