lunes, octubre 11, 2010

Problemas con Speedy


Al igual que Javier, tengo problemas con Speedy: navegando por paginas Web aparece un error aleatorio que me obliga a apretar F5 cada cierto tiempo.

Es bastante molesto hacer eso a mano, asi que hice un mini script para automatizar la tarea. Les presento a Hammer of Thor, un Proxy SOCKS que cuando detecta el error puntual de desconexion de Speedy sigue insistiendo hasta que logra cargar la página.

Técnicamente hablando, de forma aleatoria se genera un paquete IP con el flag RST activado, generando que efectivamente se cierre la conexión. Lo extraño es que ese paquete llega unos pocos milisegundos más tarde del saludo de tres vias. Cosa 'e mandinga dirá alguno.

El programa está hecho en Python usando Twisted, e implementa de forma casera el protocolo SOCKS v5 siguiendo la RFC. Espero poder sacar una nueva version que entienda tambien v4 y Proxy HTTP, pero mi tiempo libre es poco. Se aceptan contribuciones :)

Actualización 12 de Octubre: Parece que la causa de fondo es en realidad un "TCP reset attack"; para mas detalles mirar el thread de la lista de Ubuntu. Una alternativa al Martillo de Thor es filtrar los paquetes RST; por ejemplo con iptables para Linux se puede hacer:
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -m recent --set --name thor --rdest -j ACCEPT
iptables -A INPUT -p tcp -m tcp --tcp-flag RST RST -m state --state ESTABLISHED -m recent --name thor --rcheck --rsource --seconds 1 -j DROP
La idea es muy similar al Martillo de Thor: si llega un RST antes de que se cumpla 1 segundo desde que se inició la conexion, descartarlo. Este es un problema que seguro habrá que escalarlo a la CNC, ¿no?.

18 comentarios:

Unknown dijo...

Gracias Alejo, por lo que estuvimos comentando en Ubuntu-Ar es mucho más probable si tenés algún SO que no sea Windows.

https://lists.ubuntu.com/archives/ubuntu-ar/2010-September/033428.html

Lo pruebo y lo difundo. :-)

Saludos

alejolp dijo...

Excelente!

Ahi estuve leyendo el tread en la lista, parece que todos llegamos a las mismas conclusiones.

Al Proxy seguro que le faltan pulir varios detalles, entre ellos el timeout de espera. Una desventaja del HoT es que hace la navegacion ligeramente más lenta.

(aunque siempre es mejor el 70% de algo que el 0% de nada)

Damián dijo...

Muy bueno che! lo estoy usando y funciona de 10, ya me estaba volviendo loco esto, al menos sirve para zafar hasta que los de speedy decidan ponerse las pilas...

Javier Salinas dijo...

Alejo:
Infinitas gracias por tu aporte desinteresado. Ya estoy probando tu hammer y no noto para nada la ralentización de velocidad que indicás.
Será que yo siempre escribo bastante mas que lo que navego ;-)
Saludos

Tadeo dijo...

Excelente!
Esto me viene re bien. En el trabajo estuvimos con este drama. Va a ser fácil poner en funcionamiento este script porque todos usamos Linux.
Gracias por este aporte.

Frank dijo...

Funciona muy bien, gracias me estaba volviendo loco con el F5!!!

germands dijo...

Hola Alejo, te cuento que el problema tambien se da con mi fono con symbian. Se puede usar HoT con twisted 9.0.0-1?
Gracias

germands dijo...

otra cosa que note es que con windows 7 se nota menos que con win xp :S. Como siempre MS esconde los problemas de fondo :(

alejolp dijo...

German,

HoT solo usa una pequeña parte del framework Twisted, por lo que estimo que deberia funcionar sin mayores complicaciones.

En caso de que funcione, ¿podrás escribir alguna mini guia, asi lo agrego en la documentacion?

Gracias!

germands dijo...

Lo estoy usando en este momento con esa version de twisted sin problemas aparentemente. Te cuento que use esta version porque es un paquete precompilado que uso en mi NAS (un WD con un linux compactito) y es la ultima version que compilo la gente que administra el repositorio. Resumiendo, HoT funcionando en un NAS WD mybook WE. Tengo que hacer algo para usar mi fono porque solo acepta http proxy.

Rodrigo dijo...

y pensé que estaba loco, que estaba solo... yo noté lo mismo con los RST que llegaban a mi conexión. Esto es un problema feo, no se si un error porque son idiotas o queriendo, porque son forros, lo importante es que speedy le esta pifiando feo con esto. No se si le pasó a alguno pero usar iPod/iPhones/iPads, en fin cualquier cosa que use safari se hace imposible con este problema, los otros navegadores como q no son tan sensibles pero el problema se nota igual!

martin dijo...

Tiene buena pinta.
Para hacer andar esto en Tomato, hay que cargar antes el módulo de ipt_recent!

steppenwolf dijo...

Hola Alejo, soy un usuario de OSX y estoy sufriendo el mismo problema. Quería consultarte si sabes como sería la sintaxis que utilizas en iptables para ipfw. Te agradecería si podés darme una mano.

alejolp dijo...

steppenwolf,

No, no conozco como hacerlo en OSX. Probaste usar Hammer of Thor? Tengo entendido que con Firefox funciona bien.

Camilo dijo...

Hola cuando quiero descarlar el script me dice que no esta disponible. Podrìas chequear el upload? gracias.

Cómo utilizo el iptables?
Gracias.
Camilo.

camirie@gmail.com

alejolp dijo...

@Camilo,

Acabo de chequearlo y la descarga esta funcionando lo mas bien.

Sobre iptables, son dos reglas para que ejecutes en Linux. Si estas usando Ubuntu deberias primero hacer:

sudo bash

y despues ejecutar los dos comandos.

endecasilabo dijo...

Para mitigar el problema si estan usando haciendo NAT con linux. Es basicamente lo mismo pero usando conntrack.

iptables -I FORWARD -p tcp --dport 80 -m conntrack --ctstate NEW -m recent --set --name thor --rdest -j ACCEPT

iptables -I FORWARD -p tcp --sport 80 -m tcp --tcp-flag RST RST -m conntrack --ctstate ESTABLISHED,RELATED -m recent --name thor --rcheck --rsource --seconds 1 -j DROP

endecasilabo dijo...

Para mitigar el problema si estan usando haciendo NAT con linux. Es basicamente lo mismo pero usando conntrack.

iptables -I FORWARD -p tcp --dport 80 -m conntrack --ctstate NEW -m recent --set --name thor --rdest -j ACCEPT

iptables -I FORWARD -p tcp --sport 80 -m tcp --tcp-flag RST RST -m conntrack --ctstate ESTABLISHED,RELATED -m recent --name thor --rcheck --rsource --seconds 1 -j DROP