Publicado el Lunes 14 de abril de 2008 a las 06:44:28 por jav_esm
Lecturas
Que tal lectores, ya me han preguntado varias veces como he configurado mi SQUID, asi que ahora que tengo un tiempo puedo plantearles una respuesta :D
Yo me prefiero ubuntu, sin muchas complicaciones, para lo que necesito.... es muy basico y puedes meterle los paquetes que quieras...
El mejor texto de referencia que he podido hallar está en la página de los mismos wikis de ubuntu-es:
http://www.ubuntu-es.org/index.php?q=node/57578
Y aunque no me gusta el copy-paste, nada mas se los dejo por si no pueden ver el enlace (o lo pierden) :D a mi me pasa seguido...
Vuelvo a comunicar que no es de mi creación, sino de los mismos de ubuntu-es
-------------------------------------------------------------------------
Squid es un Servidor Intermediario (Proxy) de alto desempeño, que puede funcionar como Servidor Intermediario (Proxy) y caché de contenido de Red para los protocolos HTTP, FTP, GOPHER y WAIS, Proxy de SSL, caché transparente, WWCP, aceleración HTTP, caché de consultas DNS, filtración de contenido y control de acceso por IP y por usuario.
Consiste básicamente en un programa principal como servidor, un programa para búsqueda en servidores DNS, programas opcionales para reescribir solicitudes y realizar autenticación y algunas herramientas para administración y y herramientas para clientes.
Al iniciar Squid da origen a un número configurable (5, de modo predefinido a través del parámetro dns_children) de procesos de búsqueda en servidores DNS, cada uno de los cuales realiza una búsqueda única en servidores DNS, reduciendo la cantidad de tiempo de espera para las búsquedas en servidores DNS.
No puede ser utilizado como Servidor Intermediario (Proxy) para protocolos como SMTP, POP3, TELNET, SSH, IRC, etc. Si se requiere intermediar para cualquier protocolo distinto a HTTP, HTTPS, FTP, GOPHER y WAIS se requerirá hacer uso de un servidor SOCKS como Dante
No se instala por defecto, pero se encuentra en los repositorios de Ubuntu, por lo que puede ser instalado a través de Synaptic, Aptitude o apt-get
Configuración
Squid utiliza el archivo de configuración localizado en /etc/squid/squid.conf, y se puede editar con el siguiente comando, en modo consola (terminal)
sudo gedit /etc/squid/squid.conf
Para editar al menos los siguientes parámetros:
http_port
cache_dir
Al menos una Lista de Control de Acceso
Al menos una Regla de Control de Acceso
httpd_accel_host
httpd_accel_port
httpd_accel_with_proxy
Parámetro http_port
Los Puertos Registrados recomendados para Servidores Intermediarios (Proxies) pueden ser el 3128 y 8080 a través de TCP.
# You may specify multiple socket addresses on multiple lines.
# Default: http_port 3128
http_port 3128
http_port 8080
Si se desea incrementar la seguridad, puede vincularse el servicio a una IP que solo se pueda acceder desde la red local. Considerando que el servidor utilizado posee una IP 10.140.111.1, puede hacerse lo siguiente:
# You may specify multiple socket addresses on multiple lines.
# Default: http_port 3128
http_port 10.140.111.1:3128
http_port 10.140.111.1:8080
Parámetro cache_mem.
El parámetro cache_mem establece la cantidad ideal de memoria para lo siguiente:
Objetos en tránsito.
Objetos frecuentemente utilizados (Hot).
Objetos negativamente almacenados en el caché.
De modo predefinido se establecen 8 MB. Si se posee un servidor con al menos 128 MB de RAM, 16 MB es el valor para este parámetro:
cache_mem 16 MB
Parámetro cache_dir:
El parámetro cache_dir se utiliza para establecer que tamaño se desea que tenga el caché en el disco duro para Squid. De modo predefinido Squid utilizará un caché de 100 MB, de modo tal que encontrará la siguiente línea:
cache_dir ufs /var/spool/squid 100 16 256
Mientras más grande sea el caché, más objetos se almacenarán en éste y por lo tanto se utilizará menos el ancho de banda. La siguiente línea establece un caché de 700 MB:
cache_dir ufs /var/spool/squid 700 16 256
Los números 16 y 256 significan que el directorio del caché contendrá 16 directorios subordinados con 256 niveles cada uno.
Parámetro ftp_user.
Al acceder a un servidor FTP de manera anónima, de modo predefinido Squid enviará como clave de acceso Squid@. Puede establecerse una dirección de correo especificada como clave de acceso:
ftp_user proxy@gmail.com
Controles de acceso.
Las Listas de Control de Acceso definen una red o bien ciertas máquinas en particular. A cada lista se le asignará una Regla de Control de Acceso que permitirá o denegará el acceso a Squid.
Listas de control de acceso, se establecen con la siguiente sintaxis:
acl [nombre de la lista] src [lo que compone a la lista]
Si se desea establecer una lista de control de acceso que abarque a toda la red local, basta definir la IP correspondiente a la red y la máscara de la sub-red. Por ejemplo, si se tiene una red donde las máquinas tienen direcciones IP 10.140.111.n con máscara de sub-red 255.255.255.0, podemos utilizar lo siguiente:
acl miredlocal src 10.140.111.0/255.255.255.0
Más conveniente es definir una Lista de Control de Acceso especificando un archivo localizado en cualquier parte del disco duro, y la cual contiene una lista de direcciones IP.:
acl permitidos src "/etc/squid/permitidos"
El archivo /etc/squid/permitidos contendría algo como siguiente:
10.140.111.2
10.140.111.3
10.140.111.4
10.140.111.5
10.140.111.6
En caso de querer restringir el acceso de una pc, basta con eliminarla de la lista.
Listas de control de acceso: Bloqueo de Dominios de Destino.
Es conveniente definir una Lista de Control de Acceso especificando los dominios bloqueados en un archivo localizado en cualquier parte del disco duro, y la cual contiene una lista de los dominios:
acl bloqueados dstdomain "/etc/squid/bloqueados"
El archivo /etc/squid/bloqueados contendría algo como siguiente:
www.microsoft.com
www.ibm.com
www.hotmail.com
Reglas de Control de Acceso.
Las Reglas de control de Aceso definen si se permite o no el acceso hacia Squid. Se aplican a las Listas de Control de Acceso. Deben colocarse en la sección de reglas de control de acceso definidas por el administrador, es decir, a partir de donde se localiza la siguiente leyenda:
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
La sintaxis básica es la siguiente:
http_access [deny o allow] [lista de control de acceso]
En este ejemplo la regla que establece acceso permitido a Squid a la Lista de Control de Acceso denominada permitidos:
http_access allow permitidos
La expresión !, significa no. Pueden definirse así respecto de dos listas de control de acceso, lista1 y lista2, que se permite el acceso a Squid a lo que comprenda lista1 excepto aquello que comprenda lista2:
http_access allow lista1 !lista2
Esta regla es útil cuando se tiene un gran grupo de IP dentro de un rango de red al que se debe permitir acceso, y otro grupo dentro de la misma red al que se debe denegar el acceso.
Aplicando Listas y Reglas de control de acceso.
Considerando como ejemplo que se dispone de una red 10.140.111.0/255.255.255.0, si se desea definir toda la red local, utilizaremos la siguiente línea en la sección de Listas de Control de Acceso:
acl todalared src 10.140.111.0/255.255.255.0
Listas de Control de Acceso: definición de una red local completa
# Recommended minimum configuration:
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 todalared src 10.140.111.0/255.255.255.0
A continuación procedemos a aplicar la regla de control de acceso:
http_access allow todalared
Reglas de control de acceso: Acceso a una Lista de Control de Acceso.
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
http_access allow localhost
http_access allow todalared
http_access deny all
La regla http_access allow todalared permite el acceso a Squid a la Lista de Control de Acceso denominada todalared, la cual está conformada por 10.140.111.0/255.255.255.0. Esto significa que cualquier máquina desde 10.140.111.1 hasta 10.140.111.254 podrá acceder a Squid.
Si solo se desea permitir el acceso a Squid a ciertas direcciones IP de la red local, deberemos crear un archivo que contenga dicha lista, en modo consola ejecutar
sudo gedit /etc/squid/listas/redlocal
Incluir las direcciones IP que desea confirmen la Lista de Control de acceso;
10.140.111.1
10.140.111.4
10.140.111.17
10.140.111.19
10.140.111.21
Denominaremos a esta lista de control de acceso como redlocal:
acl redlocal src "/etc/squid/listas/redlocal"
Listas de Control de Acceso: definición de una red local completa
# Recommended minimum configuration:
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 redlocal src "/etc/squid/listas/redlocal"
Aplicar la regla de control de acceso:
http_access allow redlocal
Reglas de control de acceso: Acceso a una Lista de Control de Acceso.
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
http_access allow localhost
http_access allow redlocal
http_access deny all
La regla http_access allow redlocal permite el acceso a Squid a la Lista de Control de Acceso denominada redlocal, la cual está conformada por las direcciones IP especificadas en el archivo /etc/squid/listas/redlocal. Esto significa que cualquier máquina no incluida en /etc/squid/listas/redlocal no tendrá acceso a Squid.
Parámetro chache_mgr.
De modo predefinido, si algo ocurre con el caché, se envia un mensaje de aviso a la cuenta webmaster del servidor, puede especificarse una distinta si se considera conveniente;
cache_mgr webmaster@gmail.com
Caché con aceleración.
Cuando un usuario hace petición hacia un objeto en Internet, este es almacenado en el caché de Squid. Si otro usuario hace petición hacia el mismo objeto, y este no ha sufrido modificación alguna desde que lo accedió el usuario anterior, Squid mostrará el que ya se encuentra en el caché en lugar de volver a descargarlo desde Internet.
Proxy Acelerado
En la sección HTTPD-ACCELERATOR OPTIONS deben habilitarse los siguientes parámetros:
httpd_accel_host virtual
httpd_accel_port 0
httpd_accel_with_proxy on
Para crear el directorio cache, en modo consola ejecutamos;
sudo /usr/local/squid/sbin/squid -z
Iniciar, reiniciar y añadir el servicio al arranque del sistema.
Para iniciar por primera vez Squid en modo consola:
sudo service squid start
Para reiniciar en modo consola ejecutar:
sudo service squid restart
Para que Squid se inicie de manera automática al inicio el sistema, en modo consola ejecutar:
sudo chkconfig squid on
Cualquier error al inicio de Squid solo significa que hubo errores de sintaxis, errores de teclado o de las rutas hacia los archivos de las Listas de Control de Acceso.
Para realizar el diagnóstico de problemas indicándole a Squid que vuelva a leer configuración, lo cual devuelve los errores que existen en el archivo /etc/squid/squid.conf, en modo consola ejecutar:
sudo service squid reload
En caso de errores graves que no permiten iniciar el servicio, examinar el contenido del archivo /var/log/squid/squid.out ejecutando en consola:
less /var/log/squid/squid.out
Ajustes para el muro corta-fuegos.
Re-direccionamiento de peticiones a través de iptables y Firestarter.
Para dar salida transparente hacia Internet a ciertos servicios yo al mismo tiempo re-direccionar peticiones hacia servicio HTTP para pasar a través del el puerto donde escucha peticiones Squid (8080), de modo que no haya salida alguna hacia alguna hacia servidores HTTP en el exterior sin que ésta pase antes por Squid, los protocolos HTTPS, FTP, GOPHER ni WAIS, deben ser filtrados a través del NAT.
El re-direccionamiento se hace a través de iptables. Suponiendo que la red local se accede a través de una interfaz eth1, el siguiente esquema ejemplifica un re-direccionamiento:
Lo anterior, que requiere un guión de cortafuegos funcional en un sistema con dos interfaces de red, hace que cualquier petición hacia el puerto 80 (servicio HTTP) hecha desde la red local hacia el exterior, se re-direccionará hacia el puerto 8080 del servidor.
Utilizando Firestarter, la regla anteriormente descrita se añade en el archivo /etc/firestarter/user-post.