如何用 Netfilter/IPtables 限制 P2P 流量
作者: 作者:李志明 来源: 来源: 发表时间: 发表时间:2006-10-18 浏览次数: 浏览次数: 1358 字号: 字号:大 中 小
今年 4 月,看到一则报道说尽管某宽带公司现有技术可以容纳的网络用户容量为 400 至 60 0 万用户,可是目前,在容纳了 45 万用户的情况下,网络已经拥挤不堪,时常出现断网情 况,一到上网高峰,网速就会急剧下降.
为何网络会如此拥挤不堪?这是因为自从出现诸如电驴,Kazaa,BT 等 P2P 软件之后,海 量的数据文件(如大容量文件交换,视频文件下载等)逐渐占据了大部分的
网络带宽.P2P 这一新应用给用户带来了前所未有的方便和丰富的资源, 但同时也引发了网络带宽和安全问 题.
如何在发挥 P2P 强大功能的情况下对其进行一些必要的限制呢?本文将介绍在 Linux 中如何 利用 netfilter/iptables 实现对 P2P 应用流量的限制.
升级内核
由于在公开发布的 Linux 内核文件中, 有关 iptables 的各种参数里没有关于 P2P 属性的参数, 所以必须通过升级 Linux 内核和 iptables 来打上这个补丁,使其支持 P2P 属性设置.
在具体操作之前,先要了解一下升级内核补丁需要的一些相关软件:linux-2.4.20-8.tar.gz, patch-o-matic-20040609.tar.bz2,iptables-1.2.8.tar.bz2,iptables-p2p-0.3.0a.tar.gz 和 ipp 2p-0.5c.tar.gz.
这里的测试环境为 Red Hat 9.0,内核为 2.4.20-8.由于 2.4.*是一个稳定的内核,因此不 能把当前开发的一些新功能提交到主内核中去,而只能首先在 patch-o-matic 中测试,然后
打补丁到内核中.在 CVS 中可以找到最新的 patch-o-matic 包—Patch-o-matic-20040609.t ar.bz2.
有了内核支持后,还需要 iptables 支持,其中 iptables-p2p-0.3.0a.tar.gz 为 netfilter/iptabl es 组织开发的专门支持 P2P 的 iptables 扩展软件包;ipp2p-0.5c.tar.gz 为 Eicke Friedrich 开发的一个支持 P2P 的 iptables 扩展包.这两个扩展包各有特色,后面将会分别介绍.
装载模块
首先在/usr/src 下解压
软件包:
#bzip2 -d patch-o-matic-20040609.tar.bz2
生成 patch-o-matic-20040609.tar.out.
#tar xvf patch-o-matic-20040609.tar.out
生成补丁目录 patch-o-matic-20040609.Red Hat 9.0 中默认的内核目录为/usr/src/li nux-2.4.进入补丁目录/usr/src/patch-o-matic-20040609,由于支持 P2P 协议控制选项需 要 CONNMARK 模块,该模块在 extra 子目录下,因此需要运行如下命令来升级内核补丁.
#KERNEL_DIR=/usr/src/linux-2.4 ./runme extra
运行该命令后会出现一个模块选择界面,界面有两个区域,一个给出相关的模块名, 模块功能,用法和语法实例;另一个给出各种选项,如 N/y/b/r.../q/?,其中第一个为大写 字母,表示缺省选项,n 表示下一个模块,y 表示确定,b 表示上一个模块,q 表示退出.
首先应该确定当前的模块是否需要,不需要就按"N"键后回车,继续显示下
一个模块的 相关信息.当出现需要的模块时,按"Y"键确认,同时应该将里面的相关语法实例抄录下来 以备用.选择完所有需要的模块后,按"Q"键退出.
编译内核
进入内核文件所在目录/usr/src/linux-2.4,开始编译内核:
#make mrproper #make xconfig(或#make menuconfig)
注意,在配置选项中必须选择 Networking options→IP:Netfilter Configuration→Conn ection mark tracking support 和 CONNMARK target support 两个选项.确保关键文件在 正确位置:
#make dep
编译大内核:
xml:namespace prefix = td bgcolor="e6e6e6" class="code" style="font-size /> #make bzImage 编译选择的模块: #make modules 将编译后的模块转移到系统标准位置: #make modules_install 让系统自动修改启动配置文件 grub.conf: #make install 重新启动系统, 选择 Red Hat Linux (2.4.20-8custom) 选项, 则启动了新编译的内核. 升级 iptables 安装 iptables-1.2.8 首先解压 iptables-1.2.8.tar.bz2 文件: #bzip2 -d iptables-1.2.8.tar.bz2 #tar xvf iptables-1.2.8.tar.out 编译 iptables-1.2.8: #make KERNEL_DIR=/usr/src/linux-2.4 #make install KERNEL_DIR=/usr/src/linux-2.4 #make install-devel 拷贝可执行文件到相应目录: #cp iptables iptables-save iptables-restore /sbin 安装 iptables-p2p 软件 首先解压 iptables-p2p-0.3.0a.tar.gz: #tar zxvf iptables-p2p-0.3.0a.tar.gz #cd iptables-p2p-0.3.0a 拷贝 iptables-1.2.8 的头文件到适当的目录: #cp -a /usr/src/iptables-1.2.8/include/* /usr/include 运行"make"编译 iptables-p2p,并拷贝相关文件到相应的目录: #make #cp kernel/ipt_p2p.o /lib/modules/2.4.20-8custom/kernel/net/ipv4/netfilter/ #cp iptables/libipt_p2p.so /lib/iptables/ 安装 ipp2p 软件 首先修改 Makefile 文件中的源目录,内核目录和 netfilter 版本号,将以下内容: IKERNEL = -I/usr/src/linux/include IUSER = -I/usr/src/iptables-1.2.7a/include NETFILTER_VERSION = \"1.2.7a\" 改为: IKERNEL = -I/usr/src/linux-2.4/include IUSER = -I/usr/src/iptables-1.2.8/include NETFILTER_VERSION = \"1.2.8\" 编译软件,并拷贝库文件到相应的目录: #make #cp libipt_ipp2p.so /lib/iptables 装入模块: #insmod ipt_ipp2p 应用和检测 P2P 限制功能 iptables-p2p 的应用 1.iptables-p2p 目前支持如下协议: ◆ FastTrack(KaZaa,Grokster......) ◆ eDonkey(eDonkey,eMule......) ◆ Direct Connect ◆ Gnutella(regular clients and Shareaza's gnutella 2) ◆ BitTorrent ◆ OpenFT(giFT) 需要安装 CONNMARK 模块,通过 CONNMARK 模块的标记包来使用 iptables-p2p. 2.通过-help 参数获取帮助: #iptables -m p2p -help …… P2P match v0.3.0a options: --p2p-protocol [!] protocol[,...] --p2p ... match application-layer protocol(匹配的应用层协 议) Valid p2p protocols:(P2P 支持的有效协议如下:) fasttrack gn utella edonkey dc bittorrent openft iptables-p2p 模块通过-m p2p 参数来实现对所有已知 P2P 连接请求的识别.注意,m p2p 只能识别 P2P 类型的连接请求,不能识别所有的 P2P 包,可以通过--p2p-protocol 子参数来识别 P2P 的各种已知协议类型. 3.应用实例 #iptables -A FORWARD -m p2p -j DROP 阻塞网络上所有的 P2P 连接请求. #iptables -A FORWARD -m p2p --p2p-protocol fasttrack,bittorrent -j DROP 阻塞网络上 fasttrack 和 bittorrent 协议连接请求. 在实际使用过程中必须和 CONNMARK 目标结合起来,然后通过 tc 过滤才能真正对所 有 P2P 包进行限制.更多的信息可以参考 example/limit-p2p.sh 的实例脚本. ipp2p 的应用 1.ipp2p 目前支持如下 Linux 内核和 iptables 版本: ◆ Linux-Kernels 2.6:2.6.3 ◆ Linux-Kernels 2.4:2.4.18,2.4.19,2.4.20,2.4.21,2.4.22,2.4.23 ◆ iptables(netfilter.org)1.2.7a,1.2.8,1.2.9 2.获取 ipp2p 帮助 # iptables -m ipp2p --help …… IPP2P v0.5c options: --ipp2p Grab all known p2p packets (抓所有已知的 P2P 包) --ipp2p-data Grab all known p2p data packets (抓所有已知 P2P 数据包) --edk Grab all known eDonkey/eMule/Overnet packets (抓所有已知的 eDonkey/eMule/Overnet 类型的包) --edk-data packets (抓所有已知的 eDonkey/eMule/Overnet 数据包) --dc Grab all known Direct Connect packets (抓所有已知的直接连接包) Grab all eDonkey/eMule/Overnet data --dc-data Grab all Direct Connect data packets (抓所有已知的直接连接数据包) --kazaa Grab all KaZaA packets (抓所有 KaZaA 包) --kazaa-data Grab all KaZaA data packets (抓所有 KaZaA 数据包) --gnu Grab all Gnutella packets (抓所有 Gnutella 包) --gnu-data Grab all Gnutella data packets (抓所有 Gnutella 数据包) --bit Grab all BitTorrent packets (beta - handle with care) (抓所有 BitTorrent 包) --apple Grab all AppleJuice packets (beta - handle with care) (抓所有 AppleJuice 包) --soul SoulSeek (beta - handle with care) (SoulSeek 类型的包) …… 3.应用实例 ipp2p 只能识别 P2P 连接请求,而不能识别所有 P2P 包,因此也必须和 CONNMARK 目标结合在一起使用,目前只支持 TCP 协议标示.下面来看一个实例. #iptables -A |
-
相关文章
-
最新文件
关于网学 |
万能工具 |
在线交流 |
会员中心 |
查询论文 |
招聘说明 |
精品资源 |
专题论文 |
会员中心 |
联系方式 |
下载目录
论文目录
Copyright 2005-2018 www.myeducs.cn All Rights Reserved 版权所有·网学网 提供大量原创论文 参考论文 论文资料 源代码 管理及投稿 E_mail:3710167@qq.com
郑重声明: 本网站论文均来自互联网,由本站会员上传或下载,仅供个人交流、学习、参考之用,版权归原作者所有
请下载完后24小时之内删除,任何人不得大幅抄录、在期刊上发表或作为商业之用。如涉及版权纠纷,本网站不承担任何法律及连带责任。