1、防火墙 II 利用 netfilter构建用户级防火墙2012-12课程内容 Netfilter概述 Netfilter工作机制 利用 netfilter构建用 户级 防火 墙 原理 Libipq工作流程与相关函数 实验题 目Netfilter概述Netfilter 更准确地 讲 是 Linux 内核中,一个包 过滤 框架,默 认地,它在 这 个框架上 实现 了包 过滤 、状 态检测 、网 络 地址 转换 和包 标记 等多种功能,因 为 它 设计 的开放性,任何有内核开 发经验 的开 发 人 员 ,也可以很容易地利用它提供接口,在内核的数据 链 路 层 、网 络层 , 实现 自己的功能模 块
2、。Netfilter工作机制Netfilter的五种操作 NF_DROP 丢 弃 该报 文, 释 放所有与 该报 文相关的 资 源; NF_ACCEPT 接受 该报 文,并 继续处 理; NF_STOLEN 该报 文已 经 被 HOOK函数接管, 协议栈 无 须继续处 理; NF_QUEUE 将 该报 文 传递 到用 户态 去做 进 一步的 处 理; NF_REPEAT 再次 调 用本 HOOK函数。利用 netfilter构建防火 墙 在内核中注册自己的 钩 子函数; 利用 IP_QUEUE实现 内核与用 户层 之 间 的数据包交 换 , 实现 用 户态 防火 墙利用 netfilter构建
3、用 户态 防火 墙 机制当 HOOK处 理函数返回 NF_QUEUE值时 ,内核 协议栈 将通 过 Linux NetLink通信机制把当前 报 文 传递 到用 户态 ,由用 户态 的防火 墙 程序 进 行 处 理。这样 ,只要能 够 在相 应 的 HOOK点上返回NF_QUEUE值 ,就可以安心地在用 户态 使用自己的程序来 过滤报 文了, 这 个功能可以由 iptables实现 。Libipq简 介Libipq是 NetFilter框架的重要 组 成部分。任何 时 候在任何 NetFilter规则链 中,数据 报 都可以被排 队转发 到用 户 空 间 去。用 户进 程能 对 数据 报进 行任何 处 理。 处 理 结 束以后,用 户进 程可以将 该 数据报 重新注入内核或者 设 置一个 对 数据 报 的目 标动作 。开发流程1. 设置过滤环境2. 编写应用程序设置过滤环境1. 加载过滤需要的内核模块 # modprobe iptable_filter # modprobe ip_queue1. 设置过滤规则iptables -A OUTPUT -p icmp -j QUEUEIptables -A OUTPUT p tcp j QUEUE