Usando Linux IPTables, ¿Cómo bloquear torrents o cualquier protocolo P2P?

17

En nuestra institución habíamos conectado más de 300 computadoras a diferentes LAN con Internet. Aquí se incluyen las oficinas LAN y el laboratorio de Internet para estudiantes. Y queremos controlar Torrents o cualquier protocolo P2P. La solución anterior a nuestro problema es KerioWinRoute 6.5.x, que satisface más.

El problema es que hemos migrado a Ubuntu 8.04 LTS usando la plataforma Webmin.

Nathaniel Varona
fuente

Respuestas:

14

El bloqueo P2P basado en puertos no es una solución al 100%. Lo que es posible que desee considerar se llama filtrado L7 (filtrado de capa 7). Básicamente, Linux tiene una implementación que hace coincidir expresiones regulares en todos los paquetes para decidir qué es bueno y qué es malo.

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

Esto puede ayudarlo a bloquear todo tipo de cosas, incluido Skype.

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

Tenga en cuenta: la coincidencia de expresiones regulares para inspeccionar y filtrar paquetes requiere muchos recursos, lo que hace que cualquier sistema sea más vulnerable a los ataques DDOS, el método preferido sería apuntar al protocolo dentro de iptables.

Karolis T.
fuente
11

La única solución técnica adecuada es hacer que todo el tráfico pase por un proxy que descifre el tráfico SSL sobre la marcha y luego aplique el filtro de capa 7 al tráfico que pasa.

Dichos productos son bastante caros ya que generalmente hay un gran equipo de ingenieros detrás de ellos que actualizan las reglas necesarias para clasificar los paquetes.

Puede ayudarse un poco con los módulos de iptables, como se mencionó anteriormente como ipp2p o l7-filter, pero no detectarán el tráfico encriptado.

En cualquier caso, la tecnología rara vez es la solución para problemas sociales, y el mal uso de las redes corporativas / públicas / lo que sea para p2p es un problema social. Intente hablar con sus usuarios, haga que su organización cree políticas apropiadas y las imponga con sanciones. En mi experiencia, esto funciona mucho mejor que una carrera armamentista de tecnología constante con sus usuarios.

Aleksandar Ivanisevic
fuente
¿Cómo los servidores proxy descifran SSL sobre la marcha?
David Pashley
Tenga cuidado de que el uso del proxy SSL esté prohibido en algunos países
radio
David Pashley, enviaron allí el certificado en lugar del sitio. Para que ahora sean privados, luego envían la solicitud al sitio verdadero.
radio
1
Otro paso involucrado en eso es usar la Política de grupo para enviar un certificado raíz confiable para el proxy SSL para que pueda falsificar certificados confiables.
Zan Lynx
1
Esa es solo una solución realmente fea ... Hable con sus usuarios ...
Antoine Benkemoun
2

Es una buena práctica bloquear puertos de rastreador comunes como: 6881-6889 2710 6969

pero esto no ayudará contra los rastreadores vinculados en el puerto 80 (es decir, tpb.tracker.thepiratebay.org). Así que bloquear todo, pero 80,443,22 no ayudaría.

ipp2p es la mejor solución que conozco. Consulte la sección de documentación / uso

Acerca del filtro l7. En bittorrent.pat el comentario dice:

Este patrón ha sido probado y se cree que funciona bien. Sin embargo, no funcionará en las secuencias de bittorrent que están encriptadas, ya que es imposible hacer coincidir (bien) los datos encriptados.

En los sistemas BSD, pf puede aplicar acciones según el número de estados o conexiones por segundo, por lo que puede etiquetar el tráfico similar a bittotent, ya que genera conexiones rápidamente. Lea el manual de iptables, puede hacerlo también.

SaveTheRbtz
fuente
1

Hay un módulo llamado IPP2P que puede detectar y bloquear protocolos P2P: http://www.ipp2p.org/

radio
fuente
1
Este sitio web ya no existe.
Achilles
1

La solución simple es bloquear todos los puertos salientes, excepto los que desea permitir.

Alternativamente, puede encontrar una lista de los puertos que probablemente se usarán para aplicaciones P2P comunes y bloquearlos. Bittorrent tiende a permitir solo una cantidad muy limitada de descargas si no está cargando, por lo que también debe asegurarse de no aceptar ninguna conexión entrante.

Puede que le resulte útil configurar algún tipo de contabilidad IP en su enrutador en función del puerto TCP utilizado, y luego averiguar qué puerto es el más utilizado. IPTraf es una herramienta útil para verificar esto.

Debo advertirte que nunca detendrás todo; las personas son ingeniosas y encontrarán una forma de evitar cualquier restricción que usted establezca. Sin embargo, la mayoría de los firewalls detendrán al usuario ocasional, lo cual puede ser suficiente.

David Pashley
fuente
1

No puede bloquear P2P por completo , a menos que solo permita los puertos TCP "buenos" 80, 443, 22 ... E incluso eso suele ser suficiente para los tipos con mentalidad informática que tienen VPN y cosas similares.

usuario1686
fuente
p2p funciona utilizando puertos http y https sin problemas y mucha configuración
Kazimieras Aliulis
softly.lt lo llamó directamente. En los últimos años, cada vez más aplicaciones p2p se están moviendo hacia el puerto 80 (a menudo encriptado) o escanean a través de los puertos buscando uno que esté abierto. La indagación de la capa de aplicación (una forma específica de inspección profunda de paquetes) capturará el uso directo, pero no necesariamente si se está canalizando el tráfico.
Scott Pack
1
@packs: cada vez más clientes de BitTorrent ofrecen cifrado completo e incluso camuflaje como otros protocolos debido a que los ISP realizan la inspección de paquetes.
Zan Lynx
@grawity - Exactamente, pero tendrían que ser un usuario bastante avanzado, que sepa cómo usar VPN + proxy, y ese tipo de personas probablemente sean lo suficientemente inteligentes como para no utilizar Torrent en el trabajo.
djangofan
@packs: sí, los ISP ciertamente tienen una inspección de paquetes, pero si tienen habilitado el cifrado uTorrent, no podrá saber cuál es el tráfico, excepto que tienen una gran cantidad de conexiones abiertas. Por lo que saben, es posible que estés jugando Diablo 3.
djangofan
1

Bittorrent y la mayoría de los p2p ahora son bastante evasivos. En lugar de bloquear el tráfico, use las reglas de calidad de servicio para matar de hambre a los clientes que usan una gran cantidad de ancho de banda, o reduzca lentamente el tráfico p2p a cero durante un período de tiempo prolongado. No bloqueará el protocolo, pero disuadirá a los p2p'ers de que es tan lento que no vale la pena hacerlo.

Recuerde que no todo el tráfico de torrents es malo, ¡parte de él es bueno! :-)

El conserje de Unix
fuente
1

Use estas reglas de reenvío de iptables para eliminar la siembra de torrent de bits y el descubrimiento de pares. Trabajaron para mi.

#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

Reglas en acción, el contador de visitas se incrementa muy bien.

# 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
fuente
Gracias por compartir. ¿Cómo funciona el filtrado? Si la cadena BitTorrentse encuentra en la URL, ¿se descartará? Esto es solo para evitar la descarga del archivo torrent inicial, pero una vez que el archivo torrent ya está descargado, esto no bloqueará el tráfico de bittorrent, ¿correcto?
Houman
0

Los programas populares de túnel SSL como Ultrasurf pueden permitir a los usuarios evitar sus firewalls fácilmente. Para bloquear el tráfico de bittornet encriptado, necesitaría un dispositivo UTM especializado que pueda inspeccionar y bloquear túneles encriptados que atraviesen http (s). Solo conozco uno que sea capaz de hacer eso: Astaro, pero debería haber más.

Taras Chuhay
fuente
0

Puede usar ip2p, como se mencionó anteriormente. Sin embargo, no va a bloquear las cosas por completo. Lo ideal sería que cortara todos los puertos que no usa específicamente y que use ip2p. No es una solución perfecta, pero es lo mejor que probablemente obtendrá.

Cian
fuente
0

No puede usar el bloqueo de puerto directo. Hay algunas alternativas. El filtro Layer7 es lento, poco confiable y, que yo sepa, ya no se mantiene.

IPP2P está bien, pero fue reemplazado por OpenDPI, que ahora ha sido descontinuado por el patrocinador ipoque (que vende PACE, un equivalente comercial) nDPI parece ser la conclusión lógica de este pequeño camino: http://www.ntop.org/products/ ndpi /

Más fácil y bastante efectivo es una extensión de la sugerencia de David Pashley. Bloquee todos los puertos y solo permita lo que necesita, y extienda esto mediante la representación de los servicios que necesita, por ejemplo, con un proxy web y tal vez un servidor de correo interno que tenga permitido el puerto 25, pero los clientes solo hablan con el servidor interno. De esta manera, puede tener clientes que no necesitan puertos abiertos en el firewall. Esto debería funcionar, pero puede comenzar a caer en pedazos si necesita usar aplicaciones complejas y / o mal escritas que necesitan acceso directo.

Tom Newton
fuente
0

A continuación se muestra mi conjunto de reglas de iptables. Esto funciona como un encanto. He creado un proxy de intercepción transparente https y envío todo el tráfico a través de ese servidor proxy.

Usando estas reglas de iptables, puedo controlar la red.

  • Los puertos 2086, 2087, 2095 están abiertos porque usamos WHM cpanel y cpanel web mail.
  • 8080 para servidor web adicional.
  • 192.168.2.0 es la red local.

Regla de 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
fuente