# [Squid] Howto bloquear messenger de verdad

## Txema

Buenas, he estado peleándome esta semana con squid para completar esta loable tarea, privar del messenger a los fanáticos de la red y finalmente lo he conseguido, pero tengo que desmentir muchos de los pasos, sugerencias o mitos que he leído por ahí.

1) Lo primero que hay que hacer para que squid se entere de que tiene que hacer algo sería que el messenger pasara por el puerto 80 (o 3128 si tienes proxy transparente) y para esta tarea en internet se dice una solución que sólo funciona con versiones antiguas (con live messenger no funciona) se ve que esta gente cuando actualiza los programas los empeora xDDD, en fin el caso es que la solución pasa por redirigir el puerto y no bloquearlo, ya que si lo bloqueas el live messenger no se entera y no hay manera de que se conecte, ni el bloqueado ni ninguno.

```
iptables -t nat -A PREROUTING -i INTERFAZ_LOCAL -p tcp --dport 1863 -j REDIRECT --to-port 3128
```

Yo he puesto 3128 porque lo tengo como transparente, si no lo tienes así cambialo por 80.

INTERFAZ_LOCAL es la interfaz del router/servidor a la que esté conectada la red local yo tengo ahí br0 que es un puente entre la wifi, ath0 y la cableada, eth1.

2) Ya lo tenemos enrutado, ahora hay que decirle a Squid qué es lo que queremos, y es bien simple, solo tenemos que bloquear una web, o parte de esta, es decir, toda página web que acabe en gateway.dll que es a donde se conecta para realizar la conexión, valga la redundancia. Esto se hace mediante las siguientes reglas en squid.conf:

```
# Primero creamos las listas necesarias

acl webs_prohibidas url_regex "/etc/squid3/prohibidas"

acl PC src 192.168.0.139
```

Esto crea dos listas, la primera con un listado (/etc/squid3/prohibidas) en el que pondremos las webs que queremos prohibir (gateway.dll) y la segunda corresponde al ordenador al que queremos denegar el acceso, en este caso solo es uno, para añadir más no estoy seguro de si se puede hacer por listas, si no siempre se puede poner la misma línea varias veces. Yo he usado la IP (src) pero lo suyo sería usar la dirección MAC (arp).

3) Ahora que tenemos las listas procedemos a denegar accesos, pondremos las reglas en la siguiente sección:

```
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

# Example rule allowing access from your local networks.

# Adapt localnet in the ACL section to list your (internal) IP networks

# from where browsing should be allowed

#http_access allow localnet

-------------------- AQUÍ ----------------------

http_access allow localhost

http_access allow VuestraRed

# And finally deny all other access to this proxy

http_access deny all
```

Añadimos:

```
http_access deny webs_prohibidas PC
```

Y ya no podrá conectarse más al messenger ese PC.

Ya depende de como tengáis vuestra red establecida, tendréis que modificar las reglas a vuestra situación.

Os dejo el contenido de mi archivo /etc/squid3/prohibidas:

```
gateway.dll

video.google.es

video.google.com

youtube.com

fotolog.com

webmessenger

tuenti.com

tuenti.es

ebuddy.com

ebuddy.es

messengerfx.com

meebo.com

communicationtube.net

iloveim.com

koolim.com

jwchat.org

imunitive.com

wablet.com
```

Como véis tiene, además de gateway.dll, unas pocas de vídeos (youtube y google) y todas las demás son webs para conectarse al messenger de forma online saltándose las reglas que habíamos puesto antes, así que hay que tener vigiladas este tipo de webs   :Twisted Evil: 

EDITO: ----- Live Messenger -----

Bueno, no lo había probado lo suficiente ^^" efectivamente si bloqueamos el puerto 1863 no es capaz de conectarse, y si lo redirigmos tampoco, ya que no está usando el protocolo http, por lo que no se comunica como debe con el servidor, pero está el problema de que sí queramos darle acceso al messenger a algunos terminales de la red, con versiones antiguas lo hacemos usando squid, pero con Live Messenger no hay manera, por lo que hay que recurrir a la "violencia" xDD tenemos que añadir líneas del tipo:

```
iptables -A FORWARD -s IP -i INTERFAZ_LOCAL -p tcp --dport 1863 -j REJECT
```

Para cada IP que queramos bloquear de la red INTERFAZ_LOCAL, y como live messenger es tonto no intentará usar otro puerto, simplemente lo habremos bloqueado, pero sólo para la IP que queramos, bueno o la dirección MAC de la máquina, lo que más os guste  :Wink: 

Espero que os sirva  :Wink: 

Saludos.Last edited by Txema on Sat May 16, 2009 9:35 am; edited 2 times in total

----------

## Inodoro_Pereyra

Interesante, gracias txema, nunca he tenido la necesidad pero sacame la duda por que no termino de enteneder una cosa: Entiendo que uses squid para bloquear clientes web de messenger pero por que además bloquear con squid el windows live messenger? No se puede usar iptables para bloquear la versión nueva de messenger por que salta de puerto como los clientes p2p o algo parecido?

Me refiero a una regla que haga -j DROP y ya.

Por cierto, has tipeado 1836 en lugar de 1863  :Very Happy: 

Salud!

----------

## Txema

Gracias por el aviso, yo está corregido  :Wink: 

El funcionamiento interno de todas las versiones de messenger no lo conozco, pero puedo asegurar que las versiones menos modernas, si les bloqueas el puerto de conexión 1863, se pasan al http (80) por lo que tendrías que bloquear todo el tráfico web, además, en el caso del live messenger que por lo visto es tonto y simplemente bloqueándole el puerto ya no se conecta, pero entonces lo bloqueas para todos, esta mini guía es en el supuesto de que no quieras bloquearlo en toda la red, sino sólo en ciertas terminales, por ello acabo usando squid  :Wink: 

Saludos.

----------

## Inodoro_Pereyra

Entiendo... Todos los días se aprende algo nuevo en este foro  :Very Happy: 

Gracias de nuevo.

Salud!

----------

## Txema

He estado probandolo más y creo que ya lo tengo, con esta edición ya debería estar todo funcionando, es decir, que haya messenger en unos PC sí y en otros no  :Wink: 

Saludos.

----------

## Coghan

Hace tiempo leí esto en algún Blog, ahora no tengo el link donde lo explicaban, pero va bien con una simple regla de iptables.

```
$IPTABLES -I FORWARD -p tcp -m string --string "VER "  --from 51 --to 56 --algo bm -j REJECT
```

----------

## Inodoro_Pereyra

No me había percatado de esto pero l7filter puede bloquear MSN messenger por protocolo. 

Algo similar a esto en función de tus necesidades tiene que funcionar:

```
iptables -t nat -A PREROUTING -m layer7 --l7-proto msnmessenger + <match_por_IP_o_mac_address> -j DROP
```

Si no estás usando l7filter en el router te lo recomiendo, sobre todo para clasificar o bloquear tráfico p2p que usando cualquier otro método puede llegar a ser un dolor de cabeza.

Salud!

----------

