Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176176
  • 博文数量: 72
  • 博客积分: 2527
  • 博客等级: 少校
  • 技术积分: 835
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-07 01:30
文章分类
文章存档

2010年(3)

2009年(1)

2008年(8)

2007年(18)

2006年(42)

我的朋友

分类: LINUX

2006-12-13 21:14:05

iptables的功能扩展全面封杀P2P流量(不要重新编译内核及Netfilter模块)  

P2P下载软件这几年的突然兴起,受到大部分网友的异常欢迎.确实,有了P2P下载软件,网络的资源共享从某种程度上得到了进一步提升,因为资料容量的下载上限得到了很大的提高,在以前看来,下载一个1G以上的文件,无论你的网络环境如何,相信对绝大多数人来说那肯定是一个噩梦,但是有了P2P下载软件(BitTorrent,EMule,EDonkey)和众多资源的支持,下载3G左右的文件已经是非常的轻松,看到P2P资源站点上放的那么多50-100G(比如有人把国家地理100多张DVD共享:))的下载资源,我想很多网友已经见识过了P2P下载的能力.但是这一切对任何一个网络管理人员来说并不是一件值的高兴的事情.

任何事物的发展都有他的另一面,撇开各种什么版权等法律问题的因素不说,P2P下载软件的对网络性能的影响来说,这几年一直就是被吵的沸沸扬扬.P2P软件最初兴起时,笔者曾看到过有报纸整版专页讨论P2P下载软件的是是非非,重庆电信为此曾经专门屏蔽了所有用户的P2P下载软件而引发了大量用户的愤怒.的确,由于P2P下载软件设计的技术原理,如果普通用户为了追求下载速度,而不加限制的使用,那么对所在网络出口性能的影响是灾难性的, 很多人会感觉网络速度和以前相比变的非常慢,严重时候网络甚至会出现断断续续的现象,网络管理人员在出口处爪包,回看到一个P2P下载软件运行的电脑上保持着数量大的惊人的连接,怎么办?封工作端口?P2P下载软件设计者在不断升级过程中好象意识到了这点,他们已经可以在使用者的设置下,是软件工作在任意端口,甚至工作时随机选择端口!封资源站点的IP?P2P的资源站,除了主要的外,数量多的惊人,而且一个站点也可能有很多工作IP,同时可能有新的资源站点出来!报告行政部门开了他?更直接去拔了该用户的电脑网线?_ _!使用具有限制P2P下载软件和限制单流量等市场产品能解决问题,你向BOSS递交请求采购某某产品,预算X万元?BOSS会不解的看着你的!其实并不是每个公司都具备这些条件, 所以始终感觉以上这些都不是解决实际问题的恰当方法,如果有一种价格低廉,适合各种应用环境灵活的解决方法就好了!于是笔者想起了Linux….

Linux真是好东西啊!Linux系统不但稳定,平台相对安全,而且还是开放源代码且是免费的,其中的iptables更是功能强大,所以笔者公司一直在用他做公司的内部网关, 并通过iptables 的设置做一些安全方面的初步设定.于是从网上查询iptables资料,呵呵,很多网友已经做过了相关的尝试,并且由于P2P在网络上的影响,使很多Linuxer们开发出了相关的patch,专门来应对P2P对网络性能的不良影响,通过研究网上的绝大多数资料,看到很多种解决方法,见的最多的是使用netfilterpatch-o-matic-ng补定包,打上ipp2p的补丁,然后再编译netfilter,还有就是先编译内核再结合多种软件包再来完成这种功能等,所有的方法有一点是相同的,就是都必须先打上补丁后,要重新编译内核,然后才能使功能得的扩展,暂不说众多的补丁如何正确的应用和重新编译内核步骤的纷杂,稍有不熟悉内核编译或者补丁应用就会造成有版本冲突,致使整个过程失败.笔者使用网上的很多方法,反复测试,最后还是不能完全成功,总是有这样那样的错误,冲突!经过了约一周的反复测试,和受到网上各位大侠的启发,终于发现了一种更简单的方法可以完全实现对P2P流量的完全控制,该方法最大的特点是不用任何重新编译内核和模块.

.测试工作环境:

RedHat Linux 9.0

内核版本:2.4.20-8

.需要的软件包:

1.NetfilterIPTABLES 1.2.9

下载位置:

得到软件包为: iptables-1.2.9.tar.bz2

2. IP2PP 0.80

下载位置:

得软件包为: ipp2p-0.8.0.tar.gz

3. SourceForgeIPTABLES-P2P

下载位置:

得到软件包为: iptables-p2p-0.3.0a.tar.gz

.版本选择的说明:

由于对P2P下载软件的限制主要是依靠ip2pp-0.8.0iptables-p2p,所以选择iptablesLinux内核版本均要兼顾他们的实际需求,这样主要是避免各种版本间的互相冲突,出现不可预知的错误.

首先ip2pp-0.8.0,也是目前发布的最新稳定版本,从说明文档可以看到

发布者在以下版本已经测试通过:

-Linux-Kernels 2.6: 2.6.3, 2.6.4, 2.6.6

-Linux-Kernels 2.4: 2.4.18, 2.4.19, 2.4.20, 2.4.21, 2.4.22, 2.4.23, 2.4.26

-iptables (from netfilter.org) 1.2.7a, 1.2.8, 1.2.9, 1.2.11, 1.3.0, 1.3.1

再看iptables-p2p最新版本是0.30a,从相关文档资料中看到,最后更新日期大概是2004/03/06 22:39:00,而且明确的看到在iptables 1.2.9下测试通过,Linux内核的支持2.4也支持2.6, 但没有明确哪个具体版本.

综合以上信息笔者选了以上iptables1.2.9, kernel 2.4.20-8, 目的是避免以上两个软件包出现问题的可能性.

.安装软件包

1.首先当然是你自己安装好RedHat Linux 9.0, 这个我想非常简单, 主要在分区时新手的问题多点,网上资料众多,随便拿个作为参考就可以了,如果比较懒的话就按Linux预先定制安装就可以了!

2.登陆系统把两个软件包放到适合的位置,然后解压缩

一般软件的包的源码都放在/usr/src,我下载的软件包都在这下面准备使用

#cd /usr/src

#tar xjvf iptables-1.2.9.tar.bz2

#tar zxvf ipp2p-0.8.0.tar.gz

#tar zxvf iptables-p2p-0.3.0a.tar.gz

3.升级IPTABLES

RedHat 9.0自带的iptables版本是.1.2.7a,所以先升级iptables1.2.9

#cd /usr/src/iptables-1.2.9

#export KERNEL_DIR=/usr/src/linux-2.4

#export IPTABLES_DIR=/usr/src/iptables-1.2.9

#make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install

4.安装IPP2P软件包

#cd /usr/src/ipp2p-0.8.0

#make

#cp libipt_ipp2p.so /lib/iptables

#insmod ipt_ipp2p.o

5.安装iptables-p2p软件包

#cd /usr/src/iptables-p2p-0.3.0a

#cp –a /usr/src/iptables-1.2.9/include/* /usr/include

#make

#cp kernel/ipt_p2p.o /lib/modules/2.4.20-8/kernel/net/ipv4/netfilter

#cp iptables/libipt_p2p.so /lib/iptables/

所有安装工作完成了,是不是很简单!:)

.功能简介

1.ipp2p的使用说明

#iptables -m ipp2p –help

关于ipp2p段的说明:

IPP2P v0.8.0 options:

--ipp2p Grab all known p2p packets

--edk [TCP&UDP] All known eDonkey/eMule/Overnet packets

--dc [TCP] All known Direct Connect packets

--kazaa [TCP&UDP] All known KaZaA packets

--gnu [TCP&UDP] All known Gnutella packets

--bit [TCP&UDP] All known BitTorrent packets

--apple [TCP] All known AppleJuice packets

--winmx [TCP] All known WinMX

--soul [TCP] All known SoulSeek

--ares [TCP] All known Ares

Note that the follwing options will have the same meaning:

'--ipp2p' is equal to '--edk --dc --kazaa --gnu --bit --apple --winmx --soul --ares'

IPP2P was intended for TCP only. Due to increasing usage of UDP we needed to change this.

You can now use -p udp to search UDP packets only or without -p switch to search UDP and TCP packets.

See README included with this package for more details or visit

Examples:

iptables -A FORWARD -m ipp2p --ipp2p -j MARK --set-mark 0x01

iptables -A FORWARD -p udp -m ipp2p --kazaa --bit -j DROP

iptables -A FORWARD -p tcp -m ipp2p --edk --soul -j DROP

2.iptables-p2p的使用说明

#iptables -m p2p –help

P2P段的说明:

P2P match v0.3.0a options:

--p2p-protocol [!] protocol[,...]

--p2p ...

match application-layer protocol

Valid p2p protocols:

fasttrack

gnutella

edonkey

dc

bittorrent

openft

OK,一切准备就绪,就等你使用了,有专门识别包类型的控制(ipp2p),也有专门对准协议的控制(iptables-p2p),一切允许与否就看你的几条命令了!:)

:以上所有过程本人都经过测试通过,没发现任何问题,本人初次原创,不足之处希望大家谅解,如果能对一些朋友有帮助,在下非常荣幸!另外本人参考过网上多篇文章,再此对他们表示感谢!

后记:写这篇文章的目的并不是要求所有网络管理人员全部屏蔽P2P下载软件,本人也是P2P软件使用的爱好者,但是使用软件时从来都是先设置连接数量和下载速度限制,以免影响别人的网络使用.由于深深感受到不加限制使用P2P下载软件对整个网络系统性能造成的严重影响,所以建议大家能在使用P2P下载软件时考虑网络环境,先设置连接数量和下载速度限制.同时也建议网络管理同行们根据情况到最后再考虑是否完全屏蔽掉P2P.

阅读(527) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~