jueves, 3 de septiembre de 2009

MONTAR UN SERVIDOR PROXY CON SQUID

Software necesario:
1- squid
2- apache (no es necesario obligatoriamente pero acelerara la cache y trae un paquete que necesitaremos para encriptar las contraseñas de los usuarios en caso de que queramos que el proxy sea con autentificacion de usuarios)

Lo 1º tenemos que descargar el squid si quedemos compilarlo a mano lo descargaríamos de www.squid-cache.org aunque en muchas de las distribuciones ya esta en los repositorios, Yo como uso Debian usare apt y es tan sencillo como apt-get install squid3 y lo mismo con apache2.
Después tenemos que ir al archivo de configuracion de squid ( /etc/squid/squid.conf ) y editarlo cambiando unos parámetros que a continuación pondré.

Puerto de escucha
El primero es buscar la linea " # Squid normally listens to port 3128 " esta dentro de la sección NETWORK OPTIONS, (Este archivo parece un autentico caos por la cantidad de lineas que tiene pero luego no lo es tanto y no hay que cambiar tantas cosas...yo diría que el 90% del archivo son esplicaciones.)
Bueno buscamos esa linea (si usáis nano se busca con ctrl+W ) y justo debajo añadís (sin la almoadilla que eso es para comentarios)

http_port 3128
http_port 8080




memoria cache y cache en disco

Que sera el puerto por el que escuchara squid.
Luego buscamos la parte donde pone " cache_mem " y lo desmarcamos de comentario y lo dejamos así:

cache_mem 32 MB


Después buscamos esta linea: " cache_dir ufs /var/spool/squid 100 16 256 "


Donde aquí podríamos cambiar el 100 que puse en negrita que es cuantos megas de disco vamos a dejar para que guarde las paginas en la cache y se pueda acceder a ellas mas rápido, Yo creo que con el volumen de discos que manejamos hoy en dia se pueden dejar sin problemas 500 que aun así 500 megas para almacenar paginas no creo que este mal, pero eso ya es al gusto del consumidor, necesidades de la red y demás.

lista de control de acceso

Luego nos encontramos la parte de control de accesos, Aquí tenemos que saber sobre que red vamos a trabajar, 192.168.1.0 o 192.168.2.0 y la mascara de subred que salvo casos excepcionales, En ambientes de hogar claro ya que una gran empresa dudo que consulte este blog para montar su proxy, pues salvo esos casos suele ser 255.255.255.0.
Lo que tendríamos que cambiar aquí en principio seria poner esta linea " acl miredlocal src 192.168.1.0/255.255.255.0 " pero digo en principio porque luego veremos que depende como lo hagamos esta linea puede ser muy importante, y apartir de ahora los acl donde pongamos miredlocal se refreirá a 192.168.1.0/255.255.255.0, También podemos crear una lista de maquinas que queramos que accedan al proxy con lo siguiente " acl permitidos src "/etc/squid/permitidos" " y en /etc/squid/permitidos una lista con las ips internas que queramos que accedan, la sintaxis seria la siguiente:

acl (nombre) src (red o dir archivo)

un ejemplos:

acl miredlocal src 192.168.1.0/255.255.255.0
acl miredlocal src 192.168.1.0/255.255.255.0 192.168.2.0/255.255.255.0
acl permitidos src "/etc/squid/permitidos

Lo anterior es una lista de control de acceso, lo siguiente que vamos a ver son las reglas de control de acceso

Tenemos que buscar el texto " INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS "
La sintaxis seria " http_access (deny o allow) (lista) " y usando el archivo anterior podíamos crear la siguiente regla:

http_access allow permitidos

Pero esta parte tiene mucho juego ya que en una misma regla podemos poner varias listas y dejar acceso a unas y otra denegarlas, poniendo ! delante de la lista la deniegas el acceso, un ejemplo en el que la lista1 va a tener acceso y la lista2 no:

http_access allow lista1 !lista2

Aquí investigando mas en profundidad podemos hacer mucho, restringir dominios, Que no se descarguen ficheros con mp3,avi.., por contenidos, Cuando investigue mas en profundidad las reglas igual hago un post sobre ello. pero vamos que es una de las partes donde mas se puede hacer.
Y las lineas de esta parte tendrían que quedar mas o menos así con una configuracion simple, Por debajo de " # Recommended minimum configuration " :

Así podría ser la configuracion de la lista de control de acceso

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl miredlocal src 192.168.1.0/255.255.255.0



y así la de las reglas de control de acceso

http_access allow localhost
http_access allow miredlocal
http_access deny all

Como dije esto es una configuracion simple para que funcione el squid

Podemos poner también los mensajes de error en español si lo deseamos con eliminar el directorio actual " rm -f /etc/squid/errors " y cambiar el enlace simbólico " ln -s /usr/share/squid/errors/Spanish /etc/squid/errors "

AUTENTIFICACION DE USUARIOS


Ahora vamos con otra parte importante que es el acceso con autentificacion, Hay 2 formas con LDAP y con módulo NCSA,que es una forma de atentificacion por un texto simple que ademas ya viene incluido en squid,obviamente es mas seguro por LDAP pero es esta segunda la que yo voy a utilizar yo, la de por modulo NCSA.

Bueno este método es muy sencillo de usar, Solo tenemos que crear un fichero que el usuario squid pueda leer (en esto mirar bien si el usuario que arranca es squid o proxy que a mi me dio algún problemilla esto) para crear el archivo nada mas que:

touch /etc/squid/usuarios


y despues solo hacer que tenga squid (o proxy) los permisos y que sea el propietario

chmod 600 /etc/squid/usuarios
chown squid:squid /etc/squid/usuarios


Después solo tenemos que usar el comando htpasswd que dicho paquete viene incluido en apache, Un ejemplo:

htpasswd /etc/squid/usuarios david

Después no pide la contraseña para el usuario y se guarda cifrada en /etc/squid/usuarios.
Después buscar la linea " auth_param basic program " y añadirle" /usr/lib/squid/ncsa_auth /etc/squid/usuarios " y desmarcarla como comentario, vamos que tiene que quedar así:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/claves

Con esto le decimos donde esta el archivo de los usuarios y las contraseñas.

Y en la lista de control de accesos que vimos antes añadir esta linea:

acl password proxy_auth REQUIRED
y la parte lista de control de accesos anterior quedaria asi:

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl miredlocal src 192.168.1.0/255.255.255.0
acl password proxy_auth REQUIRED



Ya solo queda añadir la palabra password donde definimos las reglas y que quede así:

http_access allow localhost
http_access allow miredlocal password
http_access deny all


Y con esto quedaría squid listo, sin olvidarnos de parar y arrancar el servicio para que coja la configuracion claro, el comando es fácil:

/etc/init.d/squid stop
/etc/init.d/squid start

o
/etc/init.d/squid restar para reiniciarlo

Ahora vamos a tocar un poco la parte física y como debe ir la red.

Bien vamos a tener un router, 2 ordenadores, uno sera el servidor y otro el cliente, clientes podemos tener mas de uno pero entonces necesitariamos también un switch, pero para este caso sera solo un cliente, aunque para mas no habrá mas que hacer lo mismo en los demas clientes.

bien el router sera un router normalito, esto en principio no tiene misterio.
El servidor va a tener que tener 2 targetas de red, una para conectarla al router y otra para que el cliente se conecte a el (en el caso de varios clientes, en esta segunda targeta iria conectado el switch y a el los clientes)
y el cliente pues un ordenador normal, sin nada especial.

Las tarjetas del servidor han de estar en redes diferentes la 1º en la red del router, por ejemplo la 192.168.1.x y la segunda en otra red, por ejemplo la 192.168.2.x y el equipo ha de estar en la red de la segunda tarjetas (192.168.2.x) para que así ningún equipo de la red pueda ver el router y todos tengan que pasar por el servidor proxy y autentificarse para poder salir a internet, ni que decir que las ips fijas, y claro las " acl miredlocal src 192.168.1.0/255.255.255.0 "de la lista de control de accesos (y de las reglas y de cualquier sitio donde vaya la dirección de nuestra red) han de cambiar a la red 192.168.2.x

No os olvidéis tampoco de añadir estas lineas en los ficheros /etc/bash.bashrc y /etc/environment para poder acceder por el proxy a Internet desde concosa, Sin esto apt,wget y demás aplicaciones de consola que acceden a internet no podrán acceder.

export http_proxy="http://usuario:password@proxy:puerto"
export https_proxy="http://usuario:password@proxy:puerto"
export ftp_proxy="http://usuario:password@proxy:puerto"


Y bueno, con esto creo que el post (que este fue un poco mas largo) queda terminado,cualquier duda, sugerencia o lo que sea...ya sabéis, ponerlo en los comentarios o mandarme un email y os responderé con mucho gusto.
Un saludo