今年4月,看到一则报道说尽管某宽带公司现有技术可以容纳的网络用户容量为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。 中国网管论坛bbs.bitsCN.com
  
  有了内核支持后,还需要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表示退出。

网管联盟www.bitsCN.com

  
  首先应该确定当前的模块是否需要,不需要就按“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
  
  编译大内核:
  <CENTER><ccid_nobr>
  <table width="400" border="1" cellspacing="0" cellpadding="2"
  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
  <tr>
  <td bgcolor="e6e6e6" class="code" style="font-size:9pt">
  <pre><ccid_code>
  #make bzImage
  
  编译选择的模块:
  
  #make modules
  
  将编译后的模块转移到系统标准位置:

网管联盟www.bitsCN.com

  
  #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,并拷贝相关文件到相应的目录: 网管联盟www.bitsCN.com
  
  #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)

feedom.net

  
  ◆ 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的实例脚本。 feedom.net
  
  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 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 中国网管联盟www、bitsCN、com
  (抓所有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

怎样用Netfilter/IPtables控制P2P流量相关推荐

  1. P2P流量识别技术汇总(原理、优缺点介绍)

    随着P2P技术不断地发展演进,P2P技术及架构的演进经历了集中式.全分布式.混合式三个阶段.P2P常规流量检测一般通过常用的端口来进行识别,然而随着架构的演进,P2P流量识别也因此从简单的端口匹配到复 ...

  2. 关于P2P流量的识别方式

    在上网行为管理之类的系统中,P2P流量识别是必须的,然而具体到怎么实现却有良种方式: 1.将熟知的P2P协议硬编码到系统进行识别: 2.使用一种统一的模糊识别方式来识别所有的P2P流量. 被应用的最多 ...

  3. netfilter/iptables模块功能中文介绍

    功能介绍 (每个info和help本是英文的,为方便阅读我把它翻译成中文,由于水平有限,如果有误请有经验者来信指正) 获取最新patch-o-matic-ng的地址:[url]ftp://ftp.ne ...

  4. netfilter/iptables全攻略

    netfilter/iptables全攻略 日期:2011-11-18 点击:113 来源: fp_moon 分享至: 转自:http://www.opsers.org/linux-home/vide ...

  5. netfilter/iptables详解

    防火墙的简介 防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性.它通过访问控制机制,确定哪些内部服务允许外部访问,以及允许哪些外部请求可以访问内部服务.它可以根 ...

  6. matlab 神经网络dpi,基于DPI和BP神经网络的P2P流量识别研究

    研究与开发 现代计算机 2019.04 上 文章编号:1007-1423(2019)10-0031-05 DOI:10.3969/j.issn.1007-1423.2019.10.007 基于 DPI ...

  7. 第十七部分 Istio控制 Egress 流量

    简述 默认情况下,Istio服务Mesh中的Pod,由于其 iptables 将所有外发流量都透明的转发给了 Sidecar,所以这些集群内的服务无法访问集群之外的 URL,而只能处理集群内部的目标. ...

  8. 控制 Egress 流量

    原文链接:控制 Egress 流量 本文主要内容来自 Istio 官方文档,并对其进行了大量扩展和补充. 缺省情况下,Istio 服务网格内的 Pod,由于其 iptables 将所有外发流量都透明的 ...

  9. linux防火墙 限制流量,Linux防火墙对P2P流量的限制

    Linux防火墙对P2P流量的限制 应用和检测P2P限制功能 iptables-p2p的应用 1.iptables-p2p目前支持如下协议: ◆ FastTrack(KaZaa.Grokster... ...

最新文章

  1. 【蓝桥java】递归基础之智力训练
  2. 互联网广告系统综述一生态圈
  3. 实变函数与泛函分析课本pdf_实变函数与泛函分析
  4. http 和 https 区别
  5. php俄语包,俄语资源汇总 - 俄语 | Russian | Pусский - 声同小语种论坛 - Powered by phpwind...
  6. 专利学习笔记5:CPC客户端的安装方法
  7. win10cmd重置系统_win10命令提示符一键还原修复系统
  8. Android WebView开发(三):WebView性能优化
  9. 新特汽车在重庆“复活”:打造新品牌“电动屋”,已获网约车牌照
  10. 【计算机网络】【应用层-5】
  11. Compose版来啦!仿自如裸眼3D效果
  12. 浙大计算机学硕453分,卷卷卷!2021计算机专业考研神仙打架:浙大最高分超450,人均400+?...
  13. SQLiteSpy软件学习sql语句Group by的各种用法。
  14. C语言之出圈游戏(详解)
  15. 星秒入选毕马威(KPMG)汽车科技新锐企业榜
  16. 《管理学》第九章 沟通
  17. iPhoneX利用unc0ver来越狱iOS12
  18. 通信方面工作一些简单的名词解释整理
  19. OpenStack--Glance组件部署!!!
  20. 幸福地生活 -哈佛幸福公开课

热门文章

  1. 聊聊我当面试官的感受吧
  2. python 输入名字输出hello名字_Python 输入输出
  3. 太牛了!我的阿里春招之路分享,值得收藏!
  4. Python 理解 精灵 和 精灵组
  5. [DQN] Playing Atari with Deep Reinforcement Learning
  6. android 颜色透明度16进制换算
  7. 把Nodejs做成CentOS系统服务并开机启动
  8. 电脑打字习惯让人提笔忘字
  9. 深入理解Android L新特性之 页面内容amp;共享元素过渡动画
  10. 存储结构和磁盘划分(基于RedHat7)