COMO: Filtrado de tipos MIME con Squid

::[INTRO]::

Como buenos "bastardos sysadmin del infierno" en ocasiones nos vemos obligados a delimitar los accesos de los "buenos, santos, puros e indefensos angelitos" usuarios de nuestra red. Muchas veces contamos con soluciones perimetrales que nos ayudan a filtrar los tipos de archivos que reciben los usuarios del sistema a través del correo corporativo. ¿Pero que sucede cuando los usuarios resultan ser más vivos que nosotros, diciéndole al amigo, amiga, novio, novia, esposo, esposa, etc. que le envien el flash de la monita aquella ejercitando sus atributos pectorales (si, yo también lo he visto) a hotmail o a yahoo porque en el correo corporativo no dejan pasar esa clase archivo?. Suponiendo que somos los suficientemente "bastardos", hemos de tener saliendo a Internet a toda la compañía a través de un Proxy como Squid (http://www.squid-cache.org). Esta vez aprenderemos a "parar" esta clase de "artimañas" de los usuarios.

 

::[ESCENARIO]::

                                        /---------\
/------------------------\              |  LINUX  |           /--------------------\
|       RED LOCAL        |   10.1.0.254 |   BOX   |           |  ESA COSA LLAMADA  |
|                        |--------------|  SQUID  |-----------|      "DISQUE"      |
| 10.1.0.0/255.255.0.0   |              |  PROXY  | 200.1.1.1 |      INTERNET      |
\------------------------/              \---------/           \--------------------/

El escenario es bastante "minimalista". Tenemos una subred local en donde están los "ángelitos", es decir, los usuarios. El direccionamiento IP de dicha subred es 10.1.0.0/255.255.0.0. Tenemos una máquina con Linux y Squid Proxy instalado en donde está "el bastardo del infierno", o sea, nosostros. Por último tenemos conectada la caja Linux hacia Internet para poder brindar el acceso "a toda la pornografía de este planeta" a los "angelitos".

Como mencioné anteriormente, supongo que todos los "angelitos" de la subred local tiene configurada la salida a Internet a través del Proxy, esto es, 10.1.0.254. La dirección IP pública asignada a nuestra caja Linux es la 200.1.1.1 (solo por información).

 

::[HOWTO]::

Ahora veremos como permitir el acceso de la subred 10.1.0.0/16 (/16 es lo mismo que 255.255.0.0 ) hacia Internet pasando por la caja Linux que tiene Squid instalado, obviamente haciendo las restricciones de los tipo MIME que vamos a ver.

  • Editamos el archivo de configuración de Squid, generalmente ubicado en: /etc/squid/squid.conf y agregamos en la parte de las listas de acceso, las siguientes listas de acceso:
acl RED_LOCAL src 10.1.0.0/255.255.0.0
acl NO_MIMES rep_mime_type -i "/etc/squid/mimes_prohibidos.txt"

La primera lista de acceso con el nombre "RED_LOCAL" define el conjunto de hosts de la subred 10.1.0.0/255.255.0.0.

La segunda lista de acceso con el nombre "NO_MIMES" define el conjunto de tipos MIME especificados en el archivo /etc/squid/mimes_prohibidos.txt. En este archivo vamos a definir los tipos MIME que vamos a denegar al momento en que los "angelitos" decidan descargar un archivo con un tipo MIME específico.

  • Nuevamente en el archivo de configuración de Squid, agregamos las siguiente regla (ó restricción) para la primera lista de acceso creada. Ubique la siguiente restricción en la sección http_access del archivo de configuración. Usualmente, agregamos esta línea ANTES de la línea que dice http_access deny all.
http_access allow RED_LOCAL	

Con esto entonces estamos diciéndole a Squid que permita pasar a través de él todo el conjunto de equipos conectados en la subred 10.1.0.0/255.255.0.0.

  • En la sección http_reply_access del archivo de configuración de Squid, agregamos la siguiente restricción, usualmente, ANTES de la línea que dice http_reply_access allow all.
http_reply_access deny NO_MIMES

Con lo anterior, le especificamos a Squid que no permita pasar en el encabezdo HTTP de RESPUESTA ningún tipo MIME definido en la lista de control de acceso llamada NO_MIMES. Recordemos que la lista de control de acceso NO_MIMES la definimos para que hiciera referencia al archivo "/etc/squid/mimes_prohibidos.txt ". Es allí en donde vamos a definir los tipos MIME que no vamos a permitir que se descarguen.

En el archivo /etc/mime.types hay un sinfín de definiciones de los tipos MIME correspondientes a cada tipo de archivo. A continuación voy a listar los tipos MIME más comunes para el bloqueo:

  • Archivos ejecutables, descansadores de pantalla: .exe, .bin, .dms, .lha, .lzh, .class, .so, .dll, .scr:
application/octet-stream
  • Archivos de Power Point (en donde llegan una cantidad de pendejadas):
application/vnd.ms-powerpoint
  • Archivos de JavaScript en donde se suelen contener instrucciones peligrosas:
application/x-javascript
  • Archivos en Flash en donde suelen venir unas rubias que mueven sus pectorales de manera peculiar. No es que me disguste, por el contrario, quienes manejan las compañías (hombres, mujeres y dogbert) para las que trabajamos, tienen tanta doble moral y tanto morbo como cualquier mortal y por eso exigen este tipo de bloqueos.
application/x-shockwave-flash

Bueno, el resto lo consultan ustedes o me escriben para preguntarme.

  • El siguiente paso es alimentar el archivo /etc/squid/mimes_prohibidos.txt con los tipos MIME de interés de la siguiente manera, cada tipo MIME lo especificamos en una línea y tal cual como lo escribo a continuación. Cada línea DEBE comenzar con el caractér ("^")
^application/octet-stream
^application/vnd.ms-powerpoint
^application/x-javascript
^application/x-shockwave-flash
  • El último paso es reiniciar Squid para que comience a heredar las características de un sysadmin tan "bastardo" como nosotros:
/etc/init.d/squid restart

::[CUIDADOS]::

  • OJO con el orden de las reglas en la sección http_access.
  • OJO con el orden de las reglas en la sección http_reply_access.

El orden de cada línea en cada una de estas secciones es influyente para que apliquen correctamente las reglas definidas. Una mala organización de las mismas y nada funcionará como esperamos.

 

::[FINAL]::

  • ¿Verdad que soy un bastardo?
  • LINUX ES GRANDE!!!!
  • Esto no se escribió con la idea de ser una manual detallado de Squid, por eso no explico al detalle que significa http_access ó http_reply_access ni tampoco explico que es un encabezado HTTP, ni mucho menos que es MIME, para eso hay cantidad de información en Internet.

Comments

Duda...

Hola, muy bueno tu manual, pero creo que por que tengo el servidor haciendo NAT con un script no me esta funcionando...

Dejare aqui el script que uso para ver si recomiendas una modificacion y que asi me funcione el filtrado Squid+MIME

-----inicio de mi script-----
## Activa Forward
echo 1 > /proc/sys/net/ipv4/ip_forward

# Limpa Tabelas & define Politica de ACEPTAR todo
iptables -F INPUT
iptables -P INPUT ACCEPT
iptables -F FORWARD
iptables -P FORWARD ACCEPT
iptables -F OUTPUT
iptables -P OUTPUT ACCEPT
iptables -F -t nat

# Define Variables
INTERNET="0/0"
IF_EXTERNA="eth0"
RED_INTERNA="192.168.1.0/24"
IF_INTERNA="eth1"

## INPUT
iptables -A INPUT -i $IF_EXTERNA -s $INTERNET -d $RED_INTERNA -j ACCEPT -v
iptables -A INPUT -i $IF_INTERNA -s $RED_INTERNA -d $INTERNET -j ACCEPT -v

## FORWARD - Internet Rede Adm
iptables -A FORWARD -i $IF_EXTERNA -o $IF_INTERNA -s $INTERNET -d $RED_INTERNA -j ACCEPT -v
iptables -A FORWARD -i $IF_INTERNA -o $IF_EXTERNA -s $RED_INTERNA -d $INTERNET -j ACCEPT -v

## NAT
iptables -t nat -A POSTROUTING -s $RED_INTERNA -j MASQUERADE -v

## Activacion del redireccionamiento del puerto 80 -> 3128
iptables -t nat -A PREROUTING -s $RED_INTERNA -p TCP --dport 80 -j REDIRECT --to-port 3128

-----fin de mi script-----

Gracias por cualquier recomendacion

Recomendaciones y sugerencias

Hola. Las recomendaciones y sugerencias fueron enviadas a tu e-mail.
JFMF

Solicitud de las recomendaciones

Hola.

En este momento estoy tratando de darle seguridad a mi red. Podrías hacerme el favor de enviarme a mi tambiem las sugerencias y recomendaciones ?.

mi email: hbmiguel@hotmail.com

Muchas gracias por la colaboracion prestada.

Oye, eres un genio!!!

Esto esta genial, ahora si que se tengan estos usuarios... jajajaja