10.4 升级iptables控制BT
自从出现诸如电驴、Kazaa及BT等P2P软件之后,海量的数据文件(如大容量文件交换及视频文件下载等)逐渐占据了大部分的网络带宽。P2P这一新应用为用户带来了前所未有的方便和丰富的资源,但同时也引发了网络带宽和安全问题。本节将介绍在Linux中如何利用Netfilter/iptables限制P2P应用流量。
10.4.1 P2P应用现状
P2P即端到端对等网络技术,指网络主机在充当客户端获取资源的同时充当服务器为其他对等体(Peer)提供服务。随着计算机网络的广泛应用和多媒体资源的不断丰富,P2P技术被主要应用于文件(主要是大型的多媒体文件)共享方面。当前用于文件共享的P2P协议种类很多,在美国大量使用的是KaZaA,在欧洲存在的大量用户是eDonkey和WinMx,在我国使用最频繁的是BitTorrent,其他常用的P2P协议还有FastTrack、eMule、Grokster、Groove及Gnutella等。P2P用户的总数庞大到数以百万计,占用的带宽资源也高达60%以上。广泛应用的P2P文件共享机制主要具有以下几个特点。
(1)使用向多个IP终端并发多个连接的方法使用带宽。
(2)在下载数据的同时使用相当的带宽上传数据。
(3)单独用户上传及下载持续时间长,一般为几个小时。
(4)总使用时间遍布24小时,峰值集中在晚上和周末。
10.4.2 下载软件
所需下载软件为ipp2p-0.74.tar.gz、kernel-2.6.9-11.EL.src.rpm和iptables-1.2.11-3.1.RHEL5. src.rpm。
10.4.3 安装
依次使用如下命令安装软件包:
#rpm -ivh kernel-2.6.9-11.EL.src.rpm #rpm -ivh iptables-1.2.11-3.1.RHEL4.src.rpm #cd /usr/src/redhat/SOURCES #tar jxvf iptables-1.2.11.tar.gz
将ipp2p目录中的Markfile:
IPTABLES_SRC = -I/usr/src/iptables
修改为:
IPTABLES_SRC = /usr/src/redhat/SOURCES/iptables-1.2.11 #make “编译模块” #cp libipt_ipp2p.so /lib/iptables #cp ipt_ipp2p.ko /lib/modules/2.6.9-11.EL/kernel/net/ipv4/netfilter/ #insmod ipt_ipp2p.ko
10.4.4 测试
使用“iptables -m ipp2p-help”命令测试模块是否能正常装载,如果能够显示正常的帮助文件,表示加载成功,如图10-11所示。
图10-11 测试模块是否能正常装载
ipp2p帮助信息中的P2P协议中文注释如下:
# 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 Grab all eDonkey/eMule/Overnet data packets (抓所有已知的eDonkey/eMule/Overnet数据包) --dc Grab all known Direct Connect packets (抓所有已知的直接连接包) --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类型的包)
ipp2p目前支持的P2P协议为FastTrack(KaZaa、Grokster)、eDonkey(eDonkey、eMule)、Direct Connect、Gnutella(regular clients and Shareaza's gnutella 2)、BitTorrent和OpenFT(giFT)。
10.4.5 使用方法
添加如下命令封锁使用P2P软件:
iptables -A INPUT -m ipp2p -edk -kazaa -bit -j DROP