______ ______ ______ ______ ______ ______ ______ ______
| ____| | ____| | ____| | ____| | ____| | ____| | ____| | ____|
__| |______| |______| |______| |______| |______| |______| |______| |________
----------------------------------------------------------------------------
Codigo Titulo Autor
SWP04-06 SQUID, Buen Punto ReYDeS
----------------------------------------------------------------------------
Presentacion
------.
Es evidente que la teoria en nuestro que hacer diario es fundamental, pero
no hay mucho que de "experiencia" puedas aprender en la teoria. Ayuda mucho
mas leer las experiencias de otros y compartir estas experiencias, ha sido mi
tonica en todos los textos, o la mayoria de textos mios, que ustedes ubicaran
en internet.
Al leer lo anterior, tal vez cruce por su mente. "Pero si yo ya se eso", o
tal vez "Otro que va a hablar lo mismo de SQUID", o tal vez "SQUID???", o mi
preferido; ""Es parecido a QUAKE o ..".
Asi es que como habran percibido, ya sea que esos comentarios y otros hayan
pasado por su mente, estoy decidio a seguir con el texto. :)
Y reitero por ultima vez: son experiencias personales.
Intro
------.
Cuando uno se empapa de teoria y de conceptos, las cosas parecen claras, y
faciles. ;) Es obvio que es de gran ayuda, pero es diferente cuando tienes en
frente el reto de hacer aquello que leiste o practicaste a nivel casero, a un
nivel de empresa o compa~ia.
Como el titulo del presente escrito lo describe aqui se hablara de SQUID
and GNU/Linux ;) No se porque siempre que mencionan SQUID, se me viene a la
mente la imagen de un calamar. :-D
Entonces se plasma el primer reto de que una empresa migre ciertos
servicios a una alternativa basada en Software Libre; y como estuve leyendo
por alli, es mucho mejor para la seguridad y estabiliad de un sistema,
dividir y usar diferentes sabores, llamese Windows, GNU/Linux, Novell, Mac,
etc. esto hara que de presentarse una falla en algunos de estos sistemas;
sobre todo el primero antes mencionado, nuestros sistemas no queden;
digamoslo de forma delicada; "comprometidos". Hagamos la cosa heterogenea :)
Ademas que aumentara nuestros conocimientos.
Estamos en el primer punto; el de migrar a una solucion basado en Software
Libre. Mayoritariamente una empresa peque~a o mediana, tiene una coneccion a
internet, y claro esta, una intranet; si tuviera 2 conecciones a hacia
afuera; se me viene a la mente una reparticion de carga de coneccion; una
coneccion tolerante a fallos, pero suministrada por 2 proveedores; pero
dejemos eso para otra oportunidad. Que sino me voy del tema.
De lo anterior concentremonos en la intranet, imagenemos una red de unas 25
pc's, entre servidores y pc's de escritorio. Ahora bien, no es que vamos a
descubrir la polvora al hacer un estudio o un analisis rapido de las ventajas
que podemos obtener; o mejor seria decir; que la empresa puede obtener al
usar una solucion basada en Software Libre; y no solamente el Hecho de que
nos ahorramos las licencias, sino hay que mirar mas alla de eso.
tatatANNtaTaan! (como se plasman las onomatopeyas?) Complicado. A menos que
incluya un file ogg vorbis aqui :)
Bueno, dejemosno de cosas, sin mucho preludio; o mejor; sin mas preludio,
les presento a SQUID.
SQUID
------.
-o
SQUID, para conocimiento publico; aunque dudo mucho que algun individuo
metido en este mundillo, no tenga conocimiento de lo que es SQUID; es un
programa proxy-cache de alta performance. Pudiendo definir de manera
relevante a un proxy como un punto de acceso y un "cache" como aquello que se
mantiene para un rapido acceso.
-o
Ahora bien, la concepcion de la implementacion es una empresa, el acto
seguido es llevar el proxy-cache de la mano con una intranet enmascarada. Al
menos es la desicion que creo conveniente. Es evidente que puedes utilizar un
proxy-cache, teniendo IP publico, pero estamos hablando de tomar las
precauciones del caso. Alguien dijo seguridad? :-)
Osea que lo primero que hay que hacer es realizar un proxy fisico. Atencion
a la receta:
PIV o superior. Hay superior? Procesadores duales?
2 tarjetas de red porfavor. 3com ;) D-link :S
1 switch programable. ;) HUB? :S
1 router. CISCO ;). otro :S
1 coneccion de acceso a internet, de preferencia NO Telefonica :D
Bueno, es obvio que lo anterior puede mejorars, pero hablamos de una
mediana empresa.
OK, entonces asignamos y repartimos IP's. Digamos.
192.168.1.1 Para la eth0. Tarjeta de red de la intranet.
200.*.*.* Para la eth1. Tarjeta de red de cara a internet.
192.168.1.0/24 Para las pc's de la intranet, repartidos apropidamente por
las necesidades de cada area de la empresa. Y siempre empezemos por
sistemas.;)
Les presento mis dotes de dibujante ASCII.
PROXY /
FIREWALL
-- 192.168.1.1 --- SERVER --- 200.*.*.* --
| IDS |
SWITCH |
192.168.1.200 INTERNET
|
|
INTRANET
192.168.1.0/24
Entonces, ya hemos realizado una enmascaramiento a nuestra red, usese,
IP-MASQUERADING, para que de esta manera los IP's privados puedan conectarse
a traves de nuestro server a internet y viceversa. Sino es asi; pues a leer;
que es el secreto, lectura + cafeina + google.
Espero que el ASCII haya aclarado un poco el panorama. Ya tenemos
enmascarada la situacion y la asignacion con los IP's y de igual manera ya
definimos la distro. En este caso me baso en un RH 8.0. Ya tenemos
configuradas las tarjetas de red correctamente seteadas a su velocidad de
mayor performance, y tenemos instalado los servicios necesarios.
Ahora bien, esta parte tal vez deberia ir dedicada a comentar la
instalacion, pero el man del SQUID y la documentacion que se ubica en la web
habla muy bien sobre este tema, por fuentes, pues mayor control y se retocan
algunas cosas a mano ;). Para RH, el servicio ya puede venir instalado si se
dio la opcion en la fase de instalacion del servidor de nos ser asi, pues a
instalar los RPM's correspondientes, ya sea en freshmeat o el repositorio del
mismo RH. Ahora bien luego mirar los servicios con un serviceconf o hacerlo
manualmente con el xinetd.
-o
En en el intento de 'grafico' anterior pueden notar que tambien se utiliza
el mismo servidor como proxy-cache, IDS y firewall, ustedes ya saben que no
es muy recomendable que digamos tal situacion; pero estamos hablando de
aprovechar los recursos existentes en la organizacion y 'tocando' algunas
cosas en el server, se puede lograr un excelente rendimiento y buena
seguridad, sin perjudicar a la intranet.
Una vez seteadas las tarjetas de red es momento de ir mas alla, levantamos
el servicio de SQUID. Yo suelo adjudicar el puerto 8080, pero son libres de
elegir el puerto que deseen.
Un telnet al puerto correspondiente y un GET / para vuna mejor vision. :)
tanto desde dentro como desde afuera de la intranet. Aunque no tiene sentido
aceptar peticiones al SQUID desde afuera, a menos que sean IP's de confianza
o que se comparta cache. Cuidado alli. Canta informatizate :)
Ahora, unos de los puntos importantes luego de la instalacion de SQUID es
cuanto espacio en disco es recomendable disponer para una buena prestacion
del servicio.
Un ejemplo simple para clarificar la idea es el siguiente:
Supongamos que la trasmision maxima de download que nos proporcionada
nuestro proveedor de acceso a internet es de 25 KB / seg al multiplicar esto
por 3600 segundos (1 Horas), nos da un aproximado de 98.8 Megas / Hora. Y
esto multiplicado por 24 Horas al dia, nos da un aproximando de 2.1 Gigas por
dia. Esto, obviamente en el caso 'tope' y de un acceso continuo y constante
de nuestro ancho de banda. Es decir que debemos tener un minimo de
almacenamiento para cache en disco de aproximadamente 2.1 Gigas.
Otro punto a tomar en consideracion es la memoria del sistema, SQUID
mantiene un indice de objetos en memoria y obviamente es mucho mas rapido el
accesar a memoria RAM que a SWAP.
Sigamos con el ejemplo anterior; si cada objeto en disco ocupa 75 bytes y
el promedio de los objetos en internet es de 13Kb, con 2.1 Gigas,
almacenaremos alrededor de 150000 objetos. A 75 bytes de RAM por objeto,
necesitamos aproximadamente 11 megas solamente para el índice de objetos de
SQUID.
:S Espero haya aclarado el panorama, yo creo que si :)
-o
Otro punto de revision. Tenemos entonces al SQUID funcionando y respecto al
almacenimiento y requisitos necesarios estamos en lo optimo. Tenemos que
hacer un proxy transparente ;) Asi es que a apuntar todos los clientes si es
que ya no estan seteados al IP, 192.168.1.1; es un decir; asi todo el trafico
o peticiones web seran controlados por nuestro proxy fisico. Y como controlan
lo demas?. smtp, ftp, pop?, pues un con firewall, IPTABLES tal vez?, es su
desicion, y claro que a LOGear TODO!. Claro no solo logear sino REVISAR, que
hay cada cosa extra~a o inusual que puede presentarse, asi es que ser
precavidos.
CONFIGURA
------.
No, no no voy a comenzar a relatar cada una de las opciones de
configuracion de SQUID; que como dije anteriormente la documentacion al
respecto es muy buena; sino voy a tocar aqui las opciones de configuracion
relevantes para una instalacion y configuracion sencilla pero segura.
* Asegura:
Pues de preferencia no anden por alli dejando proxys abiertos al publico,
ya que cualquiera podria navegar y dejar vuestra IP en actos poco licitos.
Aunque para contraparte, somos nosotros mismos los que buscamos y
utilizamos proxy anonimos mal configurados para aprovecharlos ;) Pero eso si
con precuacion. Van entendiendo la paradoja?. Si sabemos como se ataca,
sabremos como se defiende, es como un juego de ajedrez, pero las
consecuencias pueden no ser un juego.
Un "sub" punto a tomar en consideracion en seguridad, seria utilizar un
puerto NO acostumbrado a utilizar con el squid, ya que este por defecto es
3128 u 8080. Puedes utilizar otro y en cierta forma minimizar riesgos.
http_port 6969 :-O
Tambien aparta tu directorio de cache, si es posible en otro disco u otra
particion, uno nunca sabe ;) Tolerancia a fallos? :D
Corre el SQUID como user y group de SQUID, NO como root. Siempre es bueno
recordarlo. Arranca como root, pero dejar privilegios.
* Vigila:
Revisar los logs periodicamente, para que puedas ver que diantres estan
haciendo tus usuarios y de paso te aprenden algunas paginas nuevas ;) Para
los reportes, puedes utilizar al SARG, que da reportes muy buenos; y de paso
que me evoca algunos recuerdos a mi mente, que en noches de plenilunio como
estas me hacen sentir en estados mas etereos. :S
Bueno, como decia, tambien pueden utilizar el SQUINT, que es que uso de
preferencia, ya que es podemos recabar informacion de diferente manera, por
algo estan en el mundo de Software Libres :)
* Bloquea:
Punto a tomar en consideracion, ya que es bueno haber determinado y que los
usuarios de la empresa estan concientes de que sus acciones estan siendo
vigiladas por el bien de la empresa, no podemos darnos el lujo de
desperdiciar recursos, como por ejemplo que se accesen a paginas para
adultos, o hotmail :P o paginas de modas, o de compras; uno esta en su puesto
de trabajo, para eso mismo, para trabajar, y a menos que sea una dise~adora
de modas, o este haciendo un estudio de las consecuencias de la pornografia
en la sociedad; no creo que este contenido sea beneficioso para la
empresa. Para eso pueden pedirnos; a nosotros; los administradores o al jefe
encargado de que deje de filtrar cierta informacion si hubiera alguna
necesidad de accesar a ella. Pero todo con las debidas aprobaciones del
caso. Para este proposito podemos utilizar al DANSGuardian.
Pero obviamente filtrar el contenido es casi imposible, podemos minimizar
el acceso a cierta informacion, pero es casi imposible impedir
definitivamente; por ejemplo; el acceso a paginas para adultos; ya que
cientos, sino miles, aparecen dia a dia.
Estos 3 ultimos acapites son fundamentales. Estos 3 estan relacionados, y
aqui podemos inmiscuir de la manera mas descarada a las ACL' o Listas de
control de Acceso, uno de los organos fundamentales del SQUID, sino, el
fundamental.
Creo que debe estar claro lo que es un ACL, asi es que mejor definimos algo
mas. Primero definimos una clase, y luego dependiendo de la definicion del
tipo de acceso, estas son puestas en funcionamiento; para aclarar el
panorama, vamos con un ejemplo:
Deseamos que el ip 192.168.1.7 no 'navegue', entonces..
acl NO_SALES src 192.168.1.7
Luego le dicimos que hacer.
http_access deny NO_SALES
Claro, verdad?. Es decir, se acepta la coneccion, en esta caso HTTP, se
comprueba la linea http_access deny, y como en NO_SALES se definio al IP
192.168.1.7, la peticion es denegada.
Pudes denegar todo y luego permitir, o permitir y luego denegar todo, como
tu creas sentirte mas comodo; esos son gustos personales. :)
Pero en este caso deseamos que nuestros queridos usuarios puedan utilizar
nuestro proxy cache para navegar, asi es que:
acl mi_linda_red 192.168.1.0/255.255.255.0
http_access allow mi_linda_red
http_access deny all
Dengamos los demas que no sea nuestra intranet. Y de paso hazle un DROP al
puerto definido de tu SQUID para que loguee y bloquee el puerto de accesos no
autorizados externos.
Ahora bien, se ha segmentado los IP's correctamente de acuerdo a las areas
constituyente de la empresa u organizacion. Asi tenemos un mejor control.
Ahora lo que quiero es que los Usuarios de sistemas, no tengan ninguna
restriccion para salir a internet. Para este proposito podemos crear un
archivo conteniendo los IP's, menos los de area de sistemas. ;) y luego armar
la ACL correspondiente.
Entonces tenemos por ejemplo el file MIS_PCS. Y tenemos otro file NO_WEBS,
que, es una manera primitiva de negar el acceso a ciertas paginas basado en
patrones o expresiones. Hagamos lo siguiente:
acl intranet src "/etc/squid/MIS_PCS"
acl paginas url_regex "/etc/squid/NO_WEBS"
Dentro de esa lista coloco a hotmail.com, para que mis usuarios "no" puedan
accesar a la pagina en horarios de trabajo, pero si deseo que lo hagan
despues de sus horarios de trabajo. :) Politicas de la empresa.
acl ALL src 192.168.1.0/24
acl PRIMER_TIEMPO time MTWHF 13:00-15:00
acl SEGUNDO_TIEMPO time MTWHF 20:00-22:00
Ahora bien, que seguia?. :D
http_access allow intranet PRIMER_TIEMPO
http_access allow intranet SEGUNDO_TIEMPO
Ahora denegar el acceso a paginas, lo recuerdan?. Si se dan cuenta esto es
consecutivo como un if then else.
http_access deny intranet paginas
y es una buena politica denegar todo lo demas. ;)
Una ultima cosa par culmiar el presente escrito. Quisiera extenderme mas,
pero sera para una proxima oportunidad. Como decia; supongamos que tenemos
una pagina institucional la cual es actualizada constantemente, esa pagina
quedara en cache, y es probable que cuando se accese, se vea informacion
anterior, lo cual no es bueno para nuestros usuarios de la intranet, para
esto podemos utilizar lo siguiente en SQUID, mejor dicho en el archivo de
configuracion "squid.conf":
acl MI_WEB dstdomain .mi.web.com
no_cache deny MI_WEB
Well, obviamente estos son solo cosas basicas de SQUID, el poder que
encierra este SOFT es muchisimo mas del que se expresa y se plasma en el
presente texto. Espero que para una proxima oportunidad pueda dar mas
alcances y combinaciones mas refinadas, para sacarle el maximo provecho.
Bueno, si me pongo a agradecer tendria que empezar desde que toque o tuve
conocimiento de que existia una computadora, asi es que solo doy gracias a
todos aquellos que 'saben' algo de mi y claro esta a mis amigos de SWP.
Estamos en contacto.!
" Hay demasiado electromagnestismo
en esta habitacion."
Si, si... como siempre va
dedicado a ti" :)
______ ______ ______ ______ ______ ______ ______ ______
| ____| | ____| | ____| | ____| | ____| | ____| | ____| | ____|
__| |______| |______| |______| |______| |______| |______| |______| |______
--------------------------------------------------------------------------
-- --
Security Wari Projects / SWP |
(c) Todos los Derechos Reservados
| PERU / 2002 - 2003
-- --
|