在我们的机构里,我们通过互联网连接了300多台电脑到不同的局域网。 这里包括正式的局域网,和互联网实验室的学生。 我们想要控制Torrent或任何P2P协议。 以前的解决scheme是我们的问题是KerioWinRoute 6.5.x,最满意。
问题是,我们已经使用Webmin平台迁移到Ubuntu 8.04 LTS。
基于端口的P2P阻塞几乎不是100%的解决scheme。 您可能需要考虑的是L7过滤(第7层过滤)。 基本上,Linux有一个实现基于正则expression式匹配所有数据包来决定什么是好的,什么是坏的。
http://l7-filter.sourceforge.net/
这可以帮助你阻止各种各样的东西,包括Skype。
http://l7-filter.sourceforge.net/protocols
请注意:正则expression式匹配检查和过滤数据包是资源密集型,使任何系统更容易受到DDOS攻击,首选的方法是在iptables中的目标协议。
唯一适当的技术解决scheme是让所有stream量都通过代理来实时解密SSLstream量,然后对stream量通过应用第7层过滤。
这样的产品非常昂贵,因为通常有一大批工程师在他们后面更新分类所需的规则。
你可以像前面提到的ipp2p或者l7-filter一样使用iptables模块sush,但是它们不会捕获encryption的stream量。
无论如何,技术很less是解决社会问题的办法,误用公司/公众/任何P2Pnetworking是一个社会问题。 尝试与您的用户交谈,让您的组织制定适当的政策并加以制裁。 在我的经验中,这比用户持续的技术军备竞赛要好得多。
阻止常见的跟踪器端口是一个很好的做法,如:6881-6889 2710 6969
但是这对于绑定在80端口上的追踪器(例如tpb.tracker.thepiratebay.org)没有帮助。 所以阻止所有,但80,443,22没有帮助。
ipp2p是我所知道的最佳解决scheme。 请参阅文档/用法部分
关于l7-filter。 在bittorrent.pat评论说:
这种模式已经过testing,相信运作良好。 但是,它并不适用于encryption的BitTorrentstream,因为不可能匹配(良好)encryption的数据。
在BSD系统中,pf可以根据每秒的状态或连接数来应用动作,因此您可以标记类似于等效的stream量,因为它会快速生成连接。 阅读iptables的手册,也可能是这样做的。
有一个名为IPP2P的模块,可以检测和阻止P2P协议: http ://www.ipp2p.org/
简单的解决scheme是阻止除了你想允许的所有输出端口。
或者,您可以find可能用于常见P2P应用程序的端口列表,并阻止这些端口。 如果您还没有上传,BitTorrent只允许非常有限的下载量,所以您还应该确保不接受任何传入的连接。
您可能会发现,根据所使用的TCP端口在路由器上设置某种types的IP记帐,然后查明哪个端口使用最为严重。 IPTraf是检查这个的一个有用的工具。
我应该警告你,你永远不会停止一切; 人们是巧妙的,会find一个解决任何限制你的地方。 大多数防火墙都会阻止临时用户,这可能就足够了。
你不能完全阻止P2P – 除非你只允许“好”的TCP端口80,443,22 …即使这样做对于那些拥有VPN和类似东西的计算机型的人来说也是足够的。
BitTorrent和现在的大部分P2P是相当回避。 使用QOS规则来阻止使用大量带宽的客户端,或者慢慢地将p2pstream量限制在零时间内,而不是阻塞stream量。 它不会阻止协议,但它会阻止p2p'ers它是如此之慢,这是不值得做的。
请记住,并非所有的洪stream交通是不好的,有些是好的! 🙂
像Ultrasurf这样stream行的SSL隧道程序可以让用户轻松绕过防火墙。 要阻止encryption的bittornetstream量,您需要一个专门的UTM设备,可以检查并阻止通过http(s)的encryption隧道。 我只知道一个能够做到这一点的人 – 阿斯塔罗,但应该有更多。
如前所述,您可以使用ip2p。 但是,它不会完全阻止事物。 理想情况下,你应该防火墙每一个你不具体使用的端口,并使用ip2p。 不是一个完美的解决scheme,但最好的,你可能会得到。
你不能使用直接端口阻塞。 有几个select。 Layer7filter是缓慢的,不可靠的,而且我知道不再维护。
IPP2P没问题,但被OpenDPI取代,现在已经被赞助商ipoque(谁出售PACE,一个相当的商业)停止了nDPI似乎是这条小路的合乎逻辑的结论: http ://www.ntop.org/products/ NDPI /
最简单,最有效的是David Pashley的build议的延伸。 阻止所有的端口,只允许你需要的 – 并通过代理你需要的服务来扩展这个 – 例如,一个web代理,或者一个允许port25的内部邮件服务器,但是客户端只和内部服务器通信。 这样你就可以拥有防火墙上完全不需要开放端口的客户端。 这应该可以工作,但是如果您需要使用任何需要直接访问的复杂和/或写得不好的应用程序,则可能会开始崩溃。
下面是我的iptables规则集。 这就像一个魅力。 我已经创build了https透明拦截代理,并通过该代理服务器发送所有stream量。
使用这个iptables规则,我可以控制networking。
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