使用Linux IPTables,如何阻止torrent或任何P2P协议?


17

在我们的机构中​​,我们已通过互联网将300多台计算机连接到不同的LAN。这里包括办公室Office LAN和学生的Internet实验室。而且我们要控制Torrent或任何P2P协议。解决此问题的先前解决方案是KerioWinRoute 6.5.x,它可以满足大多数要求。

问题是,我们已经使用Webmin Platform迁移到Ubuntu 8.04 LTS。

Answers:


14

基于端口的P2P阻止几乎不是100%的解决方案。您可能要考虑的是称为L7过滤(第7层过滤)。基本上,Linux有一个实现,该实现基于对所有数据包的匹配进行正则表达式,以确定优缺点。

http://l7-filter.sourceforge.net/

这可以帮助您阻止各种内容,包括skype。

http://l7-filter.sourceforge.net/protocols

请注意:用于检查和过滤数据包的正则表达式匹配会占用大量资源,因此任何系统都更容易受到DDOS攻击,首选方法是将协议定位到iptables中。


11

唯一合适的技术解决方案是让所有流量都通过代理,该代理将动态解密SSL流量,然后对通过的流量应用第7层过滤。

这样的产品非常昂贵,因为通常后面会有一大批工程师来更新分类数据包所需的规则。

您可以通过前面提到的ipp2p或l7-filter的iptables模块sush来帮助自己,但它们不会捕获加密的流量。

无论如何,技术很少是解决社会问题的方法,而将企业/公共/任何网络滥用于p2p都是社会问题。尝试与您的用户交谈,让您的组织创建适当的策略并通过制裁实施它们。根据我的经验,这比与用户进行持续的技术军备竞赛要好得多。


代理服务器如何动态解密SSL?
David Pashley 09年

请注意,在某些情况下禁止使用SSL代理
半径

大卫·帕什利(David Pashley),他们发送了证书,而不是站点证书。这样,他们现在成为私有站点,然后将请求转发到真实站点。
半径

1
其中涉及的另一步骤是使用组策略为SSL代理推送受信任的根证书,以便它可以伪造受信任的证书。
Zan Lynx

1
那只是一个非常丑陋的解决方案...与您的用户交谈...
Antoine Benkemoun

2

阻止常见的跟踪器端口是一个好习惯,例如:6881-6889 2710 6969

但这对绑定到80端口(即tpb.tracker.thepiratebay.org)的跟踪器没有帮助。因此,阻止所有内容,但阻止80,443,22则无济于事。

ipp2p是我所知道的最佳解决方案。请参阅文档/用法部分

关于l7过滤器。在bittorrent.pat中评论说:

此模式已经过测试,并且被认为可以很好地工作。但是,由于无法匹配(正确)加密的数据,因此它不适用于加密的Bittorrent流。

在BSD系统中,pf可以根据每秒状态或连接数来应用操作,因此您可以标记类似于位的流量,因为它可以快速生成连接。阅读iptables手册,也许它也可以做到。



1

简单的解决方案是阻止除您要允许的端口外的所有传出端口。

另外,您可以找到可能用于常见P2P应用程序的端口列表,并阻止这些端口。如果您也没有上传,Bittorrent往往只允许非常有限的下载量,因此您还应该确保您不接受任何传入的连接。

您可能会发现,根据使用的TCP端口在路由器上设置某种IP记帐,然后找出使用最频繁的端口会很有用。IPTraf是检查此问题的有用工具。

我警告你,你将永远停止一切;人们很有创造力,他们会为您施加的限制找到解决方法。不过,大多数防火墙都会阻止临时用户,这可能就足够了。


1

你不能阻止P2P 完全 -除非你只允许“好”的TCP端口80,443,22 ...甚至就是通常足以让谁拥有VPN和类似的事情在计算机志同道合的类型。


p2p使用http和https端口可以正常工作并且没有太多配置
Kazimieras Aliulis 2009年

轻声地叫它。在过去的几年中,越来越多的p2p应用程序要么朝着端口80(通常是加密的)发展,要么会扫描端口以寻找开放的端口。应用程序层侦听(一种深度数据包检查的特定形式)将捕获直接使用,但不一定要对流量进行隧道传输。
Scott Pack

1
@packs:由于ISP进行数据包检查,因此越来越多的BitTorrent客户端像其他协议一样提供完全加密甚至伪装。
Zan Lynx

@grawity-的确如此,但是他们需要成为一个相当高级的用户,知道如何使用VPN + proxy,并且这些类型的人可能足够聪明,无法在Torrent上班。
djangofan 2012年

@packs-是的,ISP当然具有数据包检查功能,但是如果启用了uTorrent加密,则您将无法确定流量是多少,除非它们具有大量打开的连接。因为他们都知道,你可能会玩暗黑破坏神3
djangofan

1

bittorrent和当今大多数p2p都是回避的。可以使用QOS规则来饿死正在使用大量带宽的客户端,而不是阻止流量,或者在一段时间内将p2p流量缓慢限制为零。它不会阻止协议,但会阻止p2p'ers,它太慢了,不值得这样做。

请记住,并不是所有的洪流流量都很糟糕,有的还不错!:-)


1

使用这些iptables转发规则来丢弃种子种子和对等发现。他们为我工作。

#Block Torrent
iptables -A FORWARD -m string --algo bm --string "BitTorrent" -j DROP
iptables -A FORWARD -m string --algo bm --string "BitTorrent protocol" -j DROP
iptables -A FORWARD -m string --algo bm --string "peer_id=" -j DROP
iptables -A FORWARD -m string --algo bm --string ".torrent" -j DROP
iptables -A FORWARD -m string --algo bm --string "announce.php?passkey=" -j DROP
iptables -A FORWARD -m string --algo bm --string "torrent" -j DROP
iptables -A FORWARD -m string --algo bm --string "announce" -j DROP
iptables -A FORWARD -m string --algo bm --string "info_hash" -j DROP

在执行规则时,计数器会很好地递增。

# iptables -vL -n

Chain FORWARD (policy ACCEPT 16403 packets, 6709K bytes)
 pkts bytes target     prot opt in     out     source               destination
    8   928 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "BitTorrent" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "BitTorrent protocol" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "peer_id=" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  ".torrent" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "announce.php?passkey=" ALGO name bm TO 65535
  582 52262 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "torrent" ALGO name bm TO 65535
   10  1370 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "announce" ALGO name bm TO 65535
   31  4150 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "info_hash" ALGO name bm TO 65535

感谢分享。过滤如何工作?如果BitTorrent在URL中找到字符串,将其删除吗?这只是为了防止下载初始的torrent文件,但是一旦torrent文件下载完毕,这不会阻止bittorrent流量,对吗?
Houman

0

诸如Ultrasurf之类的流行SSL隧道程序可以使用户轻松绕过防火墙。要阻止加密的bittornet流量,您将需要专用的UTM设备,该设备可以检查和阻止通过HTTP的加密隧道。我只知道能够做到这一点的一个人-Astaro,但应该还有更多。


0

您可以使用ip2p,如前所述。但是,这不会完全阻止事情。理想情况下,应该对每个您不专门使用的端口进行防火墙保护,并使用ip2p。这不是一个完美的解决方案,但您可能会得到最好的解决方案。


0

您不能使用直端口阻止。有几种选择。Layer7筛选器速度慢,不可靠,并且据我所知不再维护。

IPP2P没问题,但已被OpenDPI取代,OpenDPI已被赞助商ipoque(出售PACE,与之等效的商业产品)终止,nDPI似乎是这条小路的合理结论:http ://www.ntop.org/products/ ndpi /

David Pashley建议的最简单有效的扩展。阻止所有端口,仅允许您需要的端口-并通过代理所需的服务来扩展此端口-例如,使用Web代理,以及可能允许使用port25的内部邮件服务器,但客户端仅与内部服务器通信。这样,您可以拥有根本不需要防火墙上任何开放端口的客户端。这应该可以工作,但是如果您需要使用任何需要直接访问的复杂和/或写得不好的应用程序,则可能会陷入僵局。


0

以下是我的iptables规则集。这就像一个魅力。我创建了一个https透明拦截代理,并通过该代理服务器发送所有流量。

使用此iptables规则,我可以控制网络。

  • 由于我们使用WHM cpanel和cpanel Web邮件,因此打开了2086、2087、2095端口。
  • 8080用于其他Web服务器。
  • 192.168.2.0是本地网络。

IPTables规则:

#Generated by iptables-save v1.4.8 on Tue Mar 10 15:03:01 2015
*nat
:PREROUTING ACCEPT [470:38063]
:POSTROUTING ACCEPT [9:651]
:OUTPUT ACCEPT [1456:91962]
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.1:3128
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.2.1:3127
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3127
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue Mar 10 15:03:01 2015
# Generated by iptables-save v1.4.8 on Tue Mar 10 15:03:01 2015
*filter
:INPUT ACCEPT [2106:729397]
:FORWARD ACCEPT [94:13475]
:OUTPUT ACCEPT [3252:998944]
-A INPUT -p tcp -m tcp --dport 3127 -j ACCEPT
-A FORWARD -m string --string "BitTorrent" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "BitTorrent protocol" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "peer_id=" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string ".torrent" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "announce.php?passkey=" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "torrent" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "announce" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "info_hash" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "get_peers" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "announce_peer" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "find_node" --algo bm --to 65535 -j DROP
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 8080 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 2086 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 2087 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 2095 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -s 192.168.2.0/24 -p udp -m udp --sport 1024:65535 --dport 1024:65535 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Tue Mar 10 15:03:01 2015
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.