it167.com  设为主页
 收藏本站
 
  资讯:业界动态 | 软件动态 | 人物专栏 | 安全资讯 | 网络生活 | 电子商务 | 小游戏 | 视频 | 美女图片 | 音乐
  网络编程 | 网站运营 | 网页制作 | 图形图象 | 操作系统 | 媒体动画 | 软件教学 | 网络应用 | 邮件系统 | 网络安全 | 认证考试
asp | .net | php | jsp | Sql | java | Dreamweaver | FrontPages | Javascript | css | Coreldraw | photoshop | Flash | Coreldraw
当前位置: > 主页>操作系统>linux >怎样用Netfilter/IPtables控制P2P流量
最新新闻

·机会与整合 边缘化互联
·TOM-Skype新增三大本地
·雅虎抢闸邮箱竞赛 网易
·新浪抢攻北京奥运
·洞悉网络口碑的掘金机会
·拆解网络病毒黑金交易
·木马下载器近期出现新变
·《互联网周刊》第17期文
·Web2.0是否催生自吹自擂
·三张宝宝裸照招来MSN封
热门新闻
·如何让您的Linux操作系
·为Linux系统蒙上Windows
·监控和保护Linux系统下
·解读Linux系统文件权限
·Linux的权限和所有权模
·新手看招 Unix和Linux下
·实用技巧 防止系统进程
·Linux手册——基本命令
·Ubuntu Linux中自带的程
·Linux下Squid代理服务器
推荐新闻
 
 

怎样用Netfilter/IPtables控制P2P流量 

作者:   来源:   点击:   日期:2007-01-01

到一则报道说尽管某宽带公司现有技术可以容纳的网络用户容量为400至600万用户,可是目前,在容纳了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和ipp2p-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.tar.bz2。

有了内核支持后,还需要iptables支持,其中iptables-p2p-0.3.0a.tar.gz为netfilter/iptables组织开发的专门支持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/linux-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→Connection mark tracking support和CONNMARK target support两个选项。确保关键文件在正确位置:

#make dep

编译大内核:




bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
编译选择的模块:
#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

gnutella

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(www.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 pa

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·如何让您的Linux操作系统更加安全 ·为Linux系统蒙上Windows面纱
·监控和保护Linux系统下进程安全 ·RedHat linux 9系统下构建小型入侵检测系
·解读Linux系统文件权限的设置方法 ·RedHat Linux手动创建RAID和LVM分区

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:it167  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。