[COMO] Configurar Squid - Proxy

Imagen de Gabriel_M
11,424 puntos

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:

 

sudo /sbin/iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080

 

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.

sudo gedit /etc/firestarter/user-post

y se agrega la línea

/sbin/iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080

 

Fin

Fuente principal: Revista GNU Linux 35

Imagen de ryuseiken
+1
0
-1

excelente el artículo más claro no canta un gallo

+1
0
-1
Imagen de jrossano
+1
0
-1

con el squid pude poner filtros con las listas de control poniendo en archivos las listas permitidas, las listas denegadas y que las paginas que no estan en uno u otro archivo pida contrasena. La contraseña la generamos y se la enviamos por mail al usuario, pero por norma de seguridad quisieramos que la primer ver esten obligados a cambiarla, como en los programa corporativos que desarrollamos. ¿con que programa se pueden manejar las contraseñas que despues toma el squid?
Muchas gracias.

+1
0
-1
Imagen de Bluebierdpr
+1
0
-1

Excelente !!! brabo

+1
0
-1
Imagen de mama21mama
+1
0
-1

Hola,

se puede hacer para limitar un usuario ?
tengo un pc con 3 usuarios que siempre están iniciados, pero solo quiero limitar uno de ellos.


  mama libre
+1
0
-1

mi blog
mama libre

Imagen de elchango
+1
0
-1

Cuando tengas que hacer esto:

sudo /sbin/iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080

Cámbialo por esto:

sudo /sbin/iptables -t nat -A PREROUTING -i eth1 -s IP A FILTRAR -p tcp --dport 80 -j REDIRECT --to-port 8080  

Pero considero mejor que instales un filtro o control parental o lo que mejor te venga según tu caso en esa máquina mejor que instalar un servidor squid para 1 máquina.

De todas formás hay una forma desde el mismo squid, te creas una regla con la ip que necesites y las reglas a filtrar y las cubres así:
httpaccess reglaip reglafiltro1 reglafiltro2 deny

No estoy seguro de esto último pero al menos creo que pude orientarte :D

+1
0
-1
Imagen de MARKO86
+1
0
-1

Hola.. mi duda es la siguiente...tengo una pc que le instale ubuntu y la estoy usando como server y la verdad jala impresionante...
instale squid para controlar a mis usuarios el internet...y la duda es la siguiente

Ya pude hacer un archivo plano en donde yo pongo las ip's que van a tener acceso al proxy...pero lo que quiero es como puedo poner otro archivo y decirle al proxy...SOLO las paginas de web_ok se pueden ver..

Gracias

+1
0
-1
Imagen de cfrg55
+1
0
-1

hola, bastante bueno el material consulte algunas cosas y mejore el mi servidorcito, pero ahora tengo proyectado extender un poco mas este proyecto y necesito la ayuda de ustedes.

en mi servidor tengo 3 tarjetas de red:
1 salida wan
1 salida red local
1 libre

quiero en mi t red libre conectar otra red local que trabaje en otro rango y que esa red pase por el proxy con otras normas y restricciones.

lo que realmente me mata la cabeza es en el servidor dhcp como configuro para que en la tarjeta de red libre asigne otro rango dentro de otra red y como configuro en el proxy para que escuche en la direccion ip de la otra t red.

desde ya les agradezco por la ayuda que me puedan brindar.

+1
0
-1
Imagen de Zeeleck
+1
0
-1

No sé si es que yo últimamente estoy tonto o qué pero tengo el siguiente problema:

Tengo un PC con dos tarjetas de Red Eth0 a la cual le tengo conectado el internet y Eth1 a la cual le estoy conectando un cliente para que pueda accesar a través de mi PC, el problema radica en que no sé como hacer el puente (o enrutamiento) para que la tajeta Eth0 le de internet a la Eth1 ¿eso lo debo hacer con el squid o con otra cosa más? ando un poco liado con ese tema, ¿alguien me podría aclarar eso?

+1
0
-1
Imagen de tfajardo
+1
0
-1

Tenemos instalado Squid3 con Dansguardian en un servidor Ubuntu 10. El problema que se nos presentó es que en un sitio que luego de ingresar nos debe generar un PDF el navegador nos dice que no encuentra el HOST. Es un sitio desarrollado con VBScript y aspx. Por lo que entiendo, Squid está intentando obtener el PDF en el localhost, cuando en realidad lo debería buscar en el servidor WEB. Hemos revisado los acl e ingresado el sitio en un archivo no_cache_dom para que squid no lo tome, sin embargo sigue enviando el error. Por otra parte, si entro al sitio saliendo directo (sin pasar por squid) no genera el error.

¿Existe alguna forma de saltarse el Squid con una regla en iptables? ¿Alguien tiene alguna otra idea para solucionar esto?

De antemano muchas gracias por la ayuda

+1
0
-1