Usando Linux IPTables, como bloquear torrents ou qualquer protocolo P2P?

17

Em nossa instituição, conectamos mais de 300 computadores a diferentes LANs com Internet. Aqui estão incluídas as Oficinas LAN e o Laboratório de Internet para estudantes. E queremos controlar Torrents ou quaisquer protocolos P2P. A solução anterior para o nosso problema é o KerioWinRoute 6.5.x, que satisfaz mais.

O problema é que migramos para o Ubuntu 8.04 LTS usando a Webmin Platform.

Nathaniel Varona
fonte

Respostas:

14

O bloqueio de P2P baseado em porta dificilmente é uma solução 100%. O que você pode querer considerar é chamado de filtragem L7 (filtragem da camada 7). Basicamente, o linux tem uma implementação que faz a correspondência baseada em expressões regulares em todos os pacotes para decidir o que é bom e o que é ruim.

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

Isso pode ajudá-lo a bloquear todos os tipos de coisas, incluindo o skype.

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

Observação: a correspondência de Regex para inspecionar e filtrar pacotes consome muitos recursos, tornando qualquer sistema muito mais vulnerável a ataques DDOS, o método preferido seria direcionar o protocolo nas tabelas de ip.

Karolis T.
fonte
11

A única solução técnica adequada é ter todo o tráfego passando por um proxy que decodifique o tráfego SSL em tempo real e aplique a filtragem da camada 7 no tráfego que passa.

Esses produtos são muito caros, pois geralmente há uma grande equipe de engenheiros por trás deles, atualizando as regras necessárias para classificar os pacotes.

Você pode se ajudar um pouco com os módulos iptables sush, como mencionado ipp2p ou l7-filter, mas eles não capturam tráfego criptografado.

De qualquer forma, a tecnologia raramente é a solução para problemas sociais e o uso indevido de redes corporativas / públicas / quaisquer que sejam as redes p2p é um problema social. Tente conversar com seus usuários, peça à sua organização para criar políticas apropriadas e aplicá-las com sanções. Na minha experiência, isso funciona muito melhor do que uma constante corrida armamentista tecnológica com seus usuários.

Aleksandar Ivanisevic
fonte
E como os servidores proxy descriptografam o SSL em tempo real?
David Pashley
Tome cuidado para que o uso de SSL Proxy é proibido em alguns contries
raio de
David Pashley, eles enviaram lá o certificado em vez do site. Para que eles agora sejam privados, encaminhem a solicitação para o site verdadeiro.
raio
1
Uma outra etapa envolvida é usar a Diretiva de Grupo para enviar por push um certificado raiz confiável para o proxy SSL, a fim de criar certificados confiáveis.
Zan Lynx
1
Isso é apenas uma solução realmente feio ... Fale com os seus usuários ...
Antoine Benkemoun
2

É uma boa prática bloquear portas comuns do rastreador, como: 6881-6889 2710 6969

mas isso não ajudará contra rastreadores vinculados na porta 80 (ou seja, tpb.tracker.thepiratebay.org). Então, bloquear tudo, mas 80.443,22 não ajudaria.

ipp2p é a melhor solução que eu conheço. Consulte a seção Documentação / Uso

Sobre l7-filter. No comentário bittorrent.pat diz:

Esse padrão foi testado e acredita-se que funcione bem. No entanto, ele não funcionará em fluxos bittorrent criptografados, pois é impossível corresponder (bem) dados criptografados.

Nos sistemas BSD, o pf pode aplicar ações, dependendo do número de estados ou conexões por segundo, para que você possa marcar tráfego parecido com bits, porque ele gera conexões rapidamente. Leia o manual do iptables, pode ser que também seja possível.

SaveTheRbtz
fonte
1

Existe um módulo chamado IPP2P que pode detectar e bloquear protocolos P2P: http://www.ipp2p.org/

raio
fonte
1
Este site não existe mais.
Achilles
1

A solução simples é bloquear todas as portas de saída, exceto as que você deseja permitir.

Como alternativa, você pode encontrar uma lista das portas que provavelmente serão usadas para aplicativos P2P comuns e bloqueá-las. O Bittorrent tende a permitir apenas uma quantidade muito limitada de download se você também não estiver enviando, portanto, verifique também se não aceita nenhuma conexão de entrada.

Você pode achar útil configurar algum tipo de contabilidade IP no seu roteador com base na porta TCP usada e depois descobrir qual porta é a mais usada. O IPTraf é uma ferramenta útil para verificar isso.

Eu devo avisar que você nunca vai parar tudo; as pessoas são engenhosas e encontrarão uma maneira de contornar qualquer restrição que você colocar em prática. A maioria dos firewalls interrompe o usuário casual, o que pode ser suficiente.

David Pashley
fonte
1

Você não pode bloquear completamente o P2P - a menos que você permita apenas as "boas" portas TCP 80, 443, 22 ... E até isso geralmente é suficiente para os tipos de computadores que possuem VPNs e coisas semelhantes.

user1686
fonte
p2p funciona usando HTTP e HTTPS portas sem problema e muito configuração
Kazimieras Aliulis
suavemente. - chamou-o diretamente. Nos últimos anos, mais e mais aplicativos p2p estão se movendo em direção à porta 80 (geralmente criptografada) ou varrem as portas procurando por uma que esteja aberta. A espionagem da camada de aplicativo (uma forma específica de inspeção profunda de pacotes) capturará o uso direto, mas não necessariamente se o tráfego estiver sendo encapsulado.
21416 Scott Pack
1
@packs: Mais e mais clientes BitTorrent oferecem criptografia completa e até camuflagem como outros protocolos devido aos ISPs fazerem inspeção de pacotes.
Zan Lynx
@grawity - Exatamente, mas eles precisariam ser um usuário bastante avançado, sabendo como VPN + proxy, e esse tipo de pessoa provavelmente é inteligente o suficiente para não usar o Torrent no trabalho.
precisa saber é o seguinte
@ packs - sim, os provedores de serviços de Internet certamente têm uma inspeção de pacote, mas se eles tiverem a criptografia de uTorrent ativada, você não poderá dizer qual é o tráfego, exceto que eles têm um grande número de conexões abertas. Por tudo o que sei, você pode estar jogando Diablo 3.
djangofan
1

bittorrent e mais p2p agora dias é bastante evasivo. Em vez de bloquear o tráfego, use as regras de QOS para deixar de lado os clientes que estão usando uma grande quantidade de largura de banda ou acelere lentamente o tráfego p2p para zero ao longo do tempo. Ele não bloqueará o protocolo, mas impedirá que os usuários sejam tão lentos que não valham a pena.

Lembre-se de que nem todo o tráfego de torrents é ruim, alguns são bons! :-)

O zelador do Unix
fonte
1

Use essas regras de encaminhamento do iptables para eliminar a propagação de bits de torrents e a descoberta de pares. Eles trabalharam para mim.

#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

Regras em ação, contador de visitas incrementando bem.

# 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
Giancarlo D
fonte
Obrigado por compartilhar. Como funciona a filtragem? Se a string BitTorrentfor encontrada no URL, ela será descartada? Isso é apenas para impedir o download do arquivo torrent inicial, mas uma vez que o arquivo torrent já foi baixado, isso não bloqueará o tráfego bittorrent, correto?
Houman 14/10
0

Programas populares de encapsulamento SSL como o Ultrasurf podem permitir que os usuários ignorem seus firewalls facilmente. Para bloquear o tráfego criptografado de bits, você precisaria de um dispositivo UTM especializado que possa inspecionar e bloquear túneis criptografados que passam por http (s). Eu sei apenas sobre um que é capaz de fazer isso - Astaro, mas deve haver mais.

Taras Chuhay
fonte
0

Você pode usar o ip2p, como mencionado anteriormente. No entanto, não vai bloquear completamente as coisas. Idealmente, você deve usar paredes de fogo em todas as portas que não usa especificamente e usar o ip2p. Não é uma solução perfeita, mas a melhor que você provavelmente obterá.

Cian
fonte
0

Você não pode usar bloqueio direto de porta. Existem algumas alternativas. O filtro Layer7 é lento, não confiável e, pelo que sei, não é mais mantido.

O IPP2P está ok, mas foi substituído pelo OpenDPI, que foi descontinuado pelo ipoque do patrocinador (que vende PACE, um equivalente comercial). O nDPI parece ser a conclusão lógica desse pequeno caminho: http://www.ntop.org/products/ ndpi /

Mais fácil e bastante eficaz é uma extensão da sugestão de David Pashley. Bloqueie todas as portas e permita apenas o que você precisa - e estenda isso ao proxyizar os serviços que você precisa - por exemplo, com um proxy da web e talvez um servidor de correio interno que seja permitido port25, mas os clientes apenas conversam com o servidor interno. Dessa forma, você pode ter clientes que não precisam de portas abertas no firewall. Isso deve funcionar, mas pode começar a cair em pedaços se você precisar usar aplicativos complexos e / ou mal gravados que precisem de acesso direto.

Tom Newton
fonte
0

Abaixo está o meu conjunto de regras do iptables. Isso funciona como um encanto. Criei um proxy de interceptação transparente https e envie todo o tráfego através desse servidor proxy.

Usando estas regras do iptables, eu posso controlar a rede.

  • As portas 2086, 2087, 2095 estão abertas porque usamos o WHM cpanel e cpanel web mail.
  • 8080 para servidor da web adicional.
  • 192.168.2.0 é a rede local.

Regra 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
Dinoosh
fonte