在我们的机构中,我们已通过互联网将300多台计算机连接到不同的LAN。这里包括办公室Office LAN和学生的Internet实验室。而且我们要控制Torrent或任何P2P协议。解决此问题的先前解决方案是KerioWinRoute 6.5.x,它可以满足大多数要求。
问题是,我们已经使用Webmin Platform迁移到Ubuntu 8.04 LTS。
在我们的机构中,我们已通过互联网将300多台计算机连接到不同的LAN。这里包括办公室Office LAN和学生的Internet实验室。而且我们要控制Torrent或任何P2P协议。解决此问题的先前解决方案是KerioWinRoute 6.5.x,它可以满足大多数要求。
问题是,我们已经使用Webmin Platform迁移到Ubuntu 8.04 LTS。
Answers:
基于端口的P2P阻止几乎不是100%的解决方案。您可能要考虑的是称为L7过滤(第7层过滤)。基本上,Linux有一个实现,该实现基于对所有数据包的匹配进行正则表达式,以确定优缺点。
http://l7-filter.sourceforge.net/
这可以帮助您阻止各种内容,包括skype。
http://l7-filter.sourceforge.net/protocols
请注意:用于检查和过滤数据包的正则表达式匹配会占用大量资源,因此任何系统都更容易受到DDOS攻击,首选方法是将协议定位到iptables中。
唯一合适的技术解决方案是让所有流量都通过代理,该代理将动态解密SSL流量,然后对通过的流量应用第7层过滤。
这样的产品非常昂贵,因为通常后面会有一大批工程师来更新分类数据包所需的规则。
您可以通过前面提到的ipp2p或l7-filter的iptables模块sush来帮助自己,但它们不会捕获加密的流量。
无论如何,技术很少是解决社会问题的方法,而将企业/公共/任何网络滥用于p2p都是社会问题。尝试与您的用户交谈,让您的组织创建适当的策略并通过制裁实施它们。根据我的经验,这比与用户进行持续的技术军备竞赛要好得多。
阻止常见的跟踪器端口是一个好习惯,例如:6881-6889 2710 6969
但这对绑定到80端口(即tpb.tracker.thepiratebay.org)的跟踪器没有帮助。因此,阻止所有内容,但阻止80,443,22则无济于事。
ipp2p是我所知道的最佳解决方案。请参阅文档/用法部分
关于l7过滤器。在bittorrent.pat中评论说:
此模式已经过测试,并且被认为可以很好地工作。但是,由于无法匹配(正确)加密的数据,因此它不适用于加密的Bittorrent流。
在BSD系统中,pf可以根据每秒状态或连接数来应用操作,因此您可以标记类似于位的流量,因为它可以快速生成连接。阅读iptables手册,也许它也可以做到。
你不能阻止P2P 完全 -除非你只允许“好”的TCP端口80,443,22 ...甚至就是通常足以让谁拥有VPN和类似的事情在计算机志同道合的类型。
使用这些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流量,对吗?
诸如Ultrasurf之类的流行SSL隧道程序可以使用户轻松绕过防火墙。要阻止加密的bittornet流量,您将需要专用的UTM设备,该设备可以检查和阻止通过HTTP的加密隧道。我只知道能够做到这一点的一个人-Astaro,但应该还有更多。
您不能使用直端口阻止。有几种选择。Layer7筛选器速度慢,不可靠,并且据我所知不再维护。
IPP2P没问题,但已被OpenDPI取代,OpenDPI已被赞助商ipoque(出售PACE,与之等效的商业产品)终止,nDPI似乎是这条小路的合理结论:http ://www.ntop.org/products/ ndpi /
David Pashley建议的最简单有效的扩展。阻止所有端口,仅允许您需要的端口-并通过代理所需的服务来扩展此端口-例如,使用Web代理,以及可能允许使用port25的内部邮件服务器,但客户端仅与内部服务器通信。这样,您可以拥有根本不需要防火墙上任何开放端口的客户端。这应该可以工作,但是如果您需要使用任何需要直接访问的复杂和/或写得不好的应用程序,则可能会陷入僵局。
以下是我的iptables规则集。这就像一个魅力。我创建了一个https透明拦截代理,并通过该代理服务器发送所有流量。
使用此iptables规则,我可以控制网络。
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