Solucion al Ultrasurf

Imagen de plcabgut

Tema: 

Hola
En la red que gestiono, por lo general el proxy indica que páginas se pueden ver y cuales no, nos movemos en un ambiente educativo, por lo que juegos, redes sociales y similares no son permitidos en general, es una política del centro educativo.

Hace un tiempo algún usuario de la red decidió que eso no era para él y busco la manera de
saltarse el proxy.
No hay que ser muy listo para conocer 3,4 o 5 maneras de saltarse algunas de las restricciones del proxy.
Este usuario había elegido el ultrasurf.
Después de mucho leer y probar me di cuenta que es poner puertas al mar.

La arquitectura de la red es un squid+dansguardian y el proxy no es transparente.
Hay politicas por iptables para controlar los accesos a los puertos y por defecto son DROP
las chain INPUT,OUTPUT y FORWARD.

Algunas soluciones inefectivas o efectivas sólo a corto plazo o muy trabajosas:

  • Probando el ultrasurf desde una máquina y con tcpdump en otra puedes llegar a obtener unos 100 proxies que usa para la navegación. si coges esas ip's y las bloqueas por iptables al día siguiente tienes otros 50 más. por lo que no es factible estar como el perro y el gato.
  • Si cierras el puerto 9666 por iptables pues abrirá otro y listo, por lo que tampoco vale.
  • Usando políticas GPO en el servidor de dominio, mediante los hash del programa, que cambia en cada versión por lo que no es viable estar cada 4 días metiendo un política nueva, para cada versión del ultrasurf.
  • Banear las paginas de descarga del ultrasurf. Más de lo mismo, imposible porque hay miles de paginas.

Leyendo encontré que una solución que llevó acabo un usuario y que comentó en un post anónimo de un foro y era regular el trafico de ultrasurf. La fuente es http://amperis.blogspot.com/2008/11/bloquear-ultrasurf.html.

Dado que el proxy no le puede meter mano al protocolo https ni al ssl(443) que son los que usa el ultrasurf para crear un tunel y saltarse las prohibiciones del proxy, lo que podemos hacer es reducir el ancho de banda de esos puertos tanto que no merezca la pena ser "libre".
El puerto 443 se usa para validar el usuario y contraseña en páginas https por lo que el tráfico de ese protocolo no es muy alto y no se vera muy afectado por la reducción del ancho de banda.(pero si hace falta se puede subir si hiciese falta)

Usando tc (trafic control) creamos diferentes colas para el trafico.
Podemos usar el script que viene en http://www.knowplace.org/pages/howtos/traffic_shaping_with_linux/examples.php o sólo estos comandos en un script
eth0 es el interfaz que voy a controlar.
Ancho de banda inicial 4MB o 4096Kb => 90% es 3686kb calculo un 10% de tráfico no útil.
Al SSL le voy a dejar con una tasa de trasferencia de 512 bits.

tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: htb default 20
tc class add dev eth0 parent 1: classid 1:1 htb rate 3686kbit
#a la clase 1:10 le digo que la tasa de salida es de 512 bit sobre un limite de 4Mb
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 512bit ceil 3686kbit prio 0
tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
# añado un filtro por si a las iptables se les escapa algun paquete sin marcar
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:10

Estas dos lineas en la consola para clasificar el trafico que va hacia el puerto 443
iptables -t mangle -F
# marco los paquetes que van al puerto 443 para que vayan a la cola de la clase 1:10
iptables -t mangle -A POSTROUTING -p tcp --dport 443 -j CLASSIFY --set-class 1:10
----------------

La línea de iptables clasifica (CLASSIFY)el trafico del puerto 443,al parecer, clasificar es mejor opción que marcar (MARK).

Tengo que agradecer a Diego Gonzalez en www.dgonzalez.net la ayuda que me ha prestado, así multitud de foros y blogs que no recuerdo y que me he tenido que leer para poder parar un poco la sangría del ultrasuf.

espero que a alguien le pueda haber ayudado o al menos dar una idea de por donde tirar.

Comentarios