对
ip_ext.patch.configure.help
对
ip_ext.patch.help
用于runme脚本显示本patch的帮助信息;
ip_ext.patch.makefile
对
示例可以参看patch-o-matic下的源文件。
iptables本身的扩展稍微简单一些,那就是在extensions目录下增加一个libipt_ip_ext.c的文件,然后在本子目录的Makefile的PF_EXT_SLIB宏中附加一个ip_ext字符串。
第一次安装时,可以在iptables的根目录下运行make pending-patches命令,此命令会自动调用runme脚本,将所有patch-o-matic下的patch文件打到内核中,之后需要重新配置和编译内核。
如果只需要安装所要求的patch,可以在patch-o-matic目录下直接运行runme ip_ext,它会完成ip_ext patch的安装。之后,仍然要重编内核以使patch生效。
iptables本身的make/make install过程可以编译并安装好libipt_ip_ext.so,之后,新的iptables命令就可以通过加载libipt_ip_ext.so来识别ip_ext target了。
Extensions还可以定义头文件,一般这个头文件核内核外都要用,因此,通常将其放置在
灵活性是Netfilter-iptables机制的一大特色,因此,扩展Netfilter-iptables也是它的应用的关键。为了与此目标相适应,Netfilter-iptables在结构上便于扩展,同时也提供了一套扩展的方案,并有大量扩展样例可供参考。
回页首
4. 案例:用Netfilter实现VPN
虚拟专用网的关键就是隧道(Tunnel)技术,即将报文封装起来通过公用网络。利用Netfilter-iptables对报文的强大处理能力,完全可以以最小的开发成本实现一个高可配置的VPN。
本文第一部分即描述了IP Tunnel技术中报文的流动过程,从中可见,IP Tunnel技术的特殊之处有两点:
一个特殊的网络设备tunl0~tunlx--发送时,用指定路由的办法将需要封装的内网报文交给该网络设备来处理,在"网卡驱动程序"中作封装,然后再作为正常的IP报文交给真正的网络设备发送出去;
一个特殊的IP层协议IPIP--从外网传来的封装报文拥有一个特殊的协议号(IPIP),报文最终在该协议的处理程序(ipip_rcv())中解封,恢复内网IP头后,将报文注入IP协议栈底层(netif_rx())重新开始收包流程。
从中不难看出,在报文流出tunlx设备之后(即完成封装之后)需要经过OUTPUT的Netfilter HOOK点,而在报文解封之前(ipip_rcv()得到报文之前),也要经过Netfilter的INPUT HOOK点,因此,完全有可能在这两个HOOK上做文章,完成报文的封装和解封过程。报文的接收过程可以直接沿用IPIP的处理方法,即自定义一个专门的协议,问题的关键即在于如何获得需要封装的外发报文,从而与正常的非VPN报文相区别。我们的做法是利用Netfilter-iptables对IP头信息的敏感程度,在内网中使用标准的内网专用IP段(如192.168.xxx.xxx),从而通过IP地址将其区分开。基于IP地址的VPN配置既方便现有系统管理、又便于今后VPN系统升级后的扩充,而且可以结合Netfilter-iptables的防火墙设置,将VPN和防火墙有机地结合起来,共同维护一个安全的专用网络。
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 扩展 技术 机制 实现 struct 规则 处理 iptables Netfilter |
注册
个人空间
