Alonso Eduardo Caballero Quezada / ReYDeS





	
   ______   ______   ______   ______   ______   ______   ______   ______
  |  ____| |  ____| |  ____| |  ____| |  ____| |  ____| |  ____| |  ____|      
__| |______| |______| |______| |______| |______| |______| |______| |________
----------------------------------------------------------------------------
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           
                      --                              --