标签:netfilter firewall iptables
以高效网络著称的 Linux,网络安全当然也不容忽视,如何能以高效强大的手段对网络数据包的处理进行配置也就显得尤为重要,而 NetFilter 就是承担这一重任的组件。简单点来讲,防火墙其实就是在恰当的点,来接过 ip 包的处理,然后根据配置的规则来决定采取怎样的处理。那么问题来了,如何选择恰当的点呢。见下图:
上图是摘抄了网络上的一张图,其中的五个位置,就是 Linux 支持的几个拦截点,那么问题的第一步就变得非常简单了,在这些位置的函数实现中 hook 一下就可以了。这样当数据包经过这些函数处理时,就可以调用到我们的函数,我们就有机会去处理了,NetFilter 也不能免俗,幸好,内核的网络部分与 NetFilter 完美兼容,它提供出了注册机制,只要表明一下自己的网络类型以及想要 hook 的地点,那么你的回调函数就将有机会在 hook 被执行。
extern struct list_head nf_hooks[NPROTO][NF_MAX_HOOKS]; int nf_register_hook(struct nf_hook_ops *reg) { struct nf_hook_ops *elem; int err; err = mutex_lock_interruptible(&nf_hook_mutex); if (err < 0) return err; list_for_each_entry(elem, &nf_hooks[reg->pf][reg->hooknum], list) { if (reg->priority < elem->priority) break; } list_add_rcu(®->list, elem->list.prev); mutex_unlock(&nf_hook_mutex); return 0; }
标签:netfilter firewall iptables
原文地址:http://blog.csdn.net/henzox/article/details/43762263