Bloquear contenido

Mayo 10th, 2008

Hace algunos días un padre preocupado me preguntó como podía controlar lo que sus hijos ven en Internet, o incluso bloquear ciertos sitios web de contenido dudoso. Esta preocupación no es nueva y de hecho ha sido explotada por numerosas compañías para obtener buenos beneficios. Pero lo cierto es que nos basta tener un pequeño servidor con Linux para montar un sistema de este tipo de forma barata y sencilla. En este post explicaré paso a paso lo que tenemos que hacer para lograrlo.

En los ejemplos usaré el gestor de paquetes apt, sustitúyelo por el de tu distribución según el caso.

Lo primero que tenemos que hacer es instalar un proxy en nuestro servidor. Un proxy es un programa que hace de intermediario entre dos aplicaciones, una vez configurado todo adecuadamente, el navegador web se conectará al proxy y es éste el que se conectará a la página web final. Así pues, todas las conexiones pasarán a través del proxy lo que llegado el momento nos permitirá filtrarlas según nos convenga.

1. Instalamos el proxy, yo usaré un proxy libre llamado squid y un plugin diseñado especialmente para filtrar contenido, squidGuard:

# apt-get install squid squidguard

Seguidamente editamos el fichero de configuración /etc/squid/squid.conf, buscamos la sección que hace referencia a la claúsula visible_hostname y añadimos al fichero la opción:

{…}

visible_hostname localhost

{…}

2. Modificamos la configuración para que el proxy lo pueda usar cualquier máquina de la red local

La configuración por defecto sólo permite que el squid sea usado desde el host en el que está instalado (localhost). Así pues, si quisieramos que todos los usuarios de la red interna pudieran usar el proxy, tendríamos que editar el squid.conf y añadir lo siguiente bajo la sección http_access

{…}

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
acl localnet src 192.168.1.0/255.255.255.0
http_access allow localhost
http_access allow localnet
http_access deny all
{…}

Con la primera regla (acl localnet…) establecemos una acl (lista de control de acceso) llamada localnet que hace referencia a nuestra red local. Aquí deberás cambiar la IP mostrada por la que corresponda a tu red.

3. Conectamos el squid con el squidGuard, para que este útlimo pueda determinar si debe filtrar la dirección o no:

Al final del squid.conf añadimos siguiente línea

{…}

redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf

4. Nos bajamos la lista de sitios prohibidos y la colocamos en su ubicación final

# cd /var/lib/squidguard

# wget http://squidguard.mesd.k12.or.us/blacklists.tgz

# tar xvzf blacklists.tgz

# rm -rf db

# mv blacklists db

# squidGuard -C all

# chown -R proxy:proxy db

5. Configuramos el squidGuard para que no permita acceder a los sitios prohibidos

Editamos el fichero de configuración /etc/squid/squidGuard.conf y en la sección # DESTINATION CLASSES añadimos:

{…}

#
# DESTINATION CLASSES:
#

dest ads {
domainlist ads/domains
urllist ads/urls
}
dest aggressive {
domainlist aggressive/domains
urllist aggressive/urls
}
dest audio-video {
domainlist audio-video/domains
urllist audio-video/urls
}
dest drugs {
domainlist drugs/domains
urllist drugs/urls
}
dest gambling {
domainlist gambling/domains
urllist gambling/urls
}
dest hacking {
domainlist hacking/domains
urllist hacking/urls
}
dest mail {
domainlist mail/domains
urllist mail/urls
}
dest porn {
domainlist porn/domains
urllist porn/urls
}
dest proxy {
domainlist proxy/domains
urllist proxy/urls
}
dest redirector {
domainlist redirector/domains
urllist redirector/urls
}
dest spyware {
domainlist spyware/domains
urllist spyware/urls
}
dest suspect {
domainlist suspect/domains
urllist suspect/urls
}
dest violence {
domainlist violence/domains
urllist violence/urls
}
dest warez {
domainlist warez/domains
urllist warez/urls
}

{…}

Ahora, buscamos la línea que empieza por acl { y la borramos junto con todo lo que le sigue hasta el final del fichero. En su lugar ponemos:

{…}

acl {
default {
pass !ads !aggressive !drugs !gambling !hacking !mail !porn !proxy !violence !warez all
redirect http://www.sendaoscura.com/prohibido.html
}
}

Y con esto queda configurado todo. Si quisieramos añadir una lista de sitios prohibidos propios, nos bastaría con añadir un nuevo directorio en /var/lib/squidguard/db y en ahí dentro poner dos ficheros: domains (que contendrá una lista de IPs de dominios inválidos) y urls (que contendrá una lista de urls inválidas). Tras eso ejecutaríamos “squidGuard -C all“, que acutaliza las bases de datos del SquidGuard y luego editaríamos el squidGuard.conf como hemos hecho anteriormente para añadir esta nueva lista a las ya controladas.

6. Configuración de los equipos clientes para que usen el proxy

Ya sólo nos queda obligar a los distintos navegadores de la red local a que usen el proxy que hemos configurado. Llegados a este punto hay diferentes alternativas, pero cómo no quiero extenderme más de lo necesario os comentaré la más simple de todas y nombraré alguna más. Si tenéis interés podéis dejar un comentario y os amplio información.

En esta aproximación, simplemente vamos equipo por equipo configurando los navegadores para que usen nuestro proxy, en esta web podéis encontrar información detallada sobre como hacer esto: configuración del navegador para que use un proxy

Luego nos aseguramos que la configuración del proxy no se pueda alterar, según el navegador elegido tendremos que hacer esto de una manera u otra. A modo de ejemplo comentaré como hacerlo con el Firefox, que además es muy sencillo. Nos basta instalar la extensión Public Fox, la cual nos permite poner un password para acceder a las opciones de configuración (entre otras cosas). Así pues, configuramos el plugin de la forma adecuada y ya nadie que no conozca el password podrá acceder a las opciones para desactivar el proxy. Y con esto nuestro sistema queda listo.

Una alternativa más elegante es el uso de un proxy transparente junto con un filtro de red a nivel TCP (IPTables, por ejemplo). Este último forzaría a todas las peticiones dirigidas a un puerto HTTP a pasar a través del proxy transparente.

Categorías: seguridad, tutoriales |

7 comentarios

  1. Marcos

    Muy interesante! Seguramente le va ser muy útil a muchas personas!

  2. SynWenn

    Gracias por el comentario. La verdad es que muchas veces uno escribe un tutorial y luego no sabe si ha valido la pena, si alguien lo va a usar. Espero que sea como tú dices y a alguien le resulte útil.

    Saludos

  3. Lisan al-Gaib

    Muy interesante el articulo, me ha recordado una tarea que tuve hacer en cierta entidad publica… que recuerdos!! Sobre lo de ir configurando los equipos uno a uno, obviamente mola mas usar iptables, eso si, hay que configurarlo bien para que nos deje salir sin pasar por el proxy, porque eso de !gambling es un poco inquietante :D

  4. SynWenn

    Pues curiosamente yo también me acordé de una tarea que tuviste que hacer para una entidad pública mientras lo escribía :P

    Ya en otro artículo hablaré de como nos podemos saltar este tipo de restricciones… a mi también me resulta perturbador el !gambling y el !hacking xD

  5. shanakadu

    Juas,juas,Me la parto, como siempre en tu línea, explicas la defensa y luego la contradefensa.. Esto debería ser “meneado”, pero seguro k m banean….
    Jodias politicas anti-autobombo

  6. SynWenn

    Ya sabes, soy escorpión, lo llevo en la sangre :P

  7. Rub

    Claro que ha sido util el tutorial amigo, muy bueno!!!!!

    Nosotros teniamos squid en una empresa para controlar los accesos a internet y luego cuando compramos un buen firewall se quito, la verdad que el squid es sencillo y efectivo.

    Un saludo

    Rub
    http://www.peninsulapm.com

Deja un comentario