Cómo instalar Squid en CentOS 7

En este artículo veremos cómo instalar Squid como proxy en CentOS 7 paso a paso, de modo que en unos instantes podrás dar acceso a Internet a redes sin acceso directo, así como bloquear y filtrar el tráfico desde tu servidor CentOS.

Antes de instalar Squid en CentOS 7

Para seguir esta guía de instalación y configuración del proxy Squid en CentOS 7 debes partir del siguiente entorno básico:

  • Una instalación actualizada de CentOS 7.
  • Acceso a terminal con root o un usuario con permisos de sudo.
  • Conexión a Internet.

Cómo instalar Squid como proxy en CentOS 7

Vamos a instalar Squid en CentOS 7 desde los repositorios del sistema, por lo que la primera acción es actualizar las listas de paquetes:

~$ sudo yum update

Ya podemos instalar el paquete squid con el comando yum:

~$ sudo yum install -y squid

Una vez que se descargan e instalan Squid y sus dependencias se crea el servicio squid.service en CentOS 7, al que también nos podemos referir con el nombre corto squid. El servicio Squid no está en ejecución ni habilitado para iniciar automáticamente en el arranque de CentOS 7, por lo que tendremos que solucionar ambas cosas con systemctl:

~$ sudo systemctl start squid

Y para habilitar el inicio automático:

~$ sudo systemctl enable squid

Podremos comprobar el estado del servicio Squid en cualquier momento mediante el comando systemctl status squid:

como instalar squid en centos 7

Cómo configurar el firewall de CentOS 7 para Squid

Como el firewall de CentOS 7 está activado por defecto, bloqueará las conexiones entrantes, así que se hace necesario añadir una regla para Squid:

~$ sudo firewall-cmd --permanent --add-service=squid

Los cambios se aplicarán al recargar la configuración del firewall:

~$ sudo firewall-cmd --reload

Ahora Squid está listo para recibir conexiones.

Cómo configurar Squid como proxy en CentOS 7

Para configurar Squid en CentOS 7 trabajaremos sobre su archivo de configuración principal, squid.conf, que se encuentra en la ruta /etc/squid/.

~$ sudo nano /etc/squid/squid.conf

La configuración por defecto de Squid es muy permisiva, así que vamos a restringirla para ir posteriormente perfilándola.

En primer lugar desactivaremos el bloque de directivas acl (listas de control de acceso):

...
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
...

Añadiremos un carácter # al inicio de cada línea perteneciente a una acl para las redes localnet:

...
#acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
#acl localnet src 192.168.0.0/16        # RFC1918 possible internal network
#acl localnet src fc00::/7       # RFC 4193 local private network range
#acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
...

A continuación buscaremos esta línea:

...
http_access allow localnet
...

Y la desactivaremos:

...
#http_access allow localnet
...

Guardamos los cambios y recargamos la configuración del servicio Squid:

~$ sudo systemctl reload squid

Cómo probar Squid en CentOS 7

Una sencilla forma de comprobar el funcionamiento de Squid es irnos a otra máquina de la red local y abrir un navegador. En las opciones del mismo buscaremos la configuración de conexión y especificaremos el proxy, proporcionando su dirección, que no es otra cosa que la dirección IP o dominio de la máquina CentOS 7 en la que corre el servicio Squid, y el puerto, que es el 3128 por defecto.

instalar squid en centos 7

Una vez configurado el proxy en el navegador, intentamos acceder a algún sitio web vía proxy Squid en CentOS 7:

instalacion de squid en centos 7

Vemos que Squid está funcionando y aplicando su configuración de bloqueo total.

Cómo permitir el tráfico

Para que el servicio Squid de CentOS 7 permita pasar el tráfico debemos crear una lista de control de acceso y permitir dicha lista.

Empezaremos definiendo la nueva lista de control en squid.conf, por ejemplo para nuestra red local, junto a las listas desactivadas anteriormente:

...
#acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
#acl localnet src 192.168.0.0/16        # RFC1918 possible internal network
#acl localnet src fc00::/7       # RFC 4193 local private network range
#acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
acl mi-red-local src 192.168.0.0/24
...

Hemos creado la lista mi-red-local para la red 192.168.0.0/24 (ajusta los valores para tu caso concreto). Ahora permitiremos el acceso a esta lista mediante una directiva http_access:

...
#http_access allow localnet
http_access allow localhost
http_access allow mi-red-local
...

Guardamos los cambios y recargamos la configuración de Squid:

~$ sudo systemctl reload squid

Al intentar acceder de nuevo a Internet desde el navegador de pruebas, esta vez sí podrá:

Si existen más redes que deban acceder a través del proxy, habrá que crear las correspondientes listas de control de acceso e ir permitiéndolas.

Cómo bloquear sitios concretos

Si deseas bloquear los accesos a sitios web concretos como redes sociales, páginas de compras, sitios de adultos, etc. cuyos dominios conozcas, será tan fácil como crear una lista con tales dominios en un archivo independiente:

~$ sudo nano /etc/squid/dominios-restringidos.squid

Y crearemos la lista con los sitios no deseados.

.amazon.com
.amazon.es
.ebay.com
.ebay.es
.facebook.com
.twitter.com
.instagram.com
.youtube.com

Guardamos los cambios y regresamos a squid.conf. Ahora crearemos una nueva acl para esta lista de dominios:

...
acl mi-red-local src 192.168.0.0/24
acl dominios-restringidos dstdomain "/etc/squid/dominios-restringidos.squid"
...

La nueva acl queda definida a partir del fichero que hemos creado. Ahora debemos bloquearla mediante la correspondiente directiva http_access:

...
http_access deny dominios-restringidos
http_access allow mi-red-local
...

Observa que hemos situado esta nueva directiva antes de la que permite el acceso total a la red. El orden es muy importante, debemos situar al final la directiva más amplia (en este caso la que permite el acceso total) y antes de esta aquellas directivas que van perfilando aspectos más concretos (por ejemplo, la que restringe ciertos dominios). Quizás lo lógico fuera ir definiéndolas justo en sentido contrario, pero es así como interpreta Squid su configuración, de hecho, si intercambias el orden no funcionará.

Guardamos los cambios y recargamos la configuración de Squid.

Si probamos desde el navegador alguno de los sitios prohibidos ocurrirá esto:

como configurar squid en centos 7

Justo lo que deseábamos.

Cómo bloquear por palabras

Es difícil mantener una lista con todos los sitios que deseas bloquear, sobre todo existiendo sitios que ni siquiera conocemos. Por ello una lista de control basada en palabras prohibidas podría ayudar. En este caso creamos un nuevo archivo:

~$ sudo nano /etc/squid/palabras-restringidas.squid

Y añadimos las palabras que creamos conveniente:

palabra-1
palabra-2
palabra-3
palabra-4
...

Guardamos los cambios y regresamos a squid.conf, donde definiremos una nueva acl basada en el acrhivo que acabamos de crear:

...
acl mi-red-local src 192.168.0.0/24
acl dominios-restringidos dstdomain "/etc/squid/dominios-restringidos.squid"
acl palabras-restringidas url_regex "/etc/squid/palabras-restringidas.squid"
...

Y añadimos la directiva http_access para bloquear la lista de palabras:

...
http_access deny dominios-restringidos
http_access deny palabras-restringidas
http_access allow mi-red-local
...

Guardamos los cambios y recargamos el servicio.

Este tipo de restricción bloquea aquellas páginas web cuyo dominio o URI contenga alguna de las palabras de la lista, pero no afecta a la lista de parámetros. Por ejemplo, no bloquearía la búsqueda de una palabra prohibida en Google, pero sí bloquearía intentar acceder al sitio desde los resultados de la búsqueda si el dominio o la URI contienen la palabra.

Permitir sólo algunos sitios web

Las políticas anteriores sirven para redes en las que se permite un acceso general salvo a ciertos tipos de sitios. Sin embargo, hay ambientes en los que en realidad sólo interesa permitir el acceso a unos pocos sitios y bloquear la conexión a todos los demás. Para este tipo de configuración preparamos un archivo con la lista de dominios permitidos:

~$ sudo nano /etc/squid/dominios-permitidos.squid

Y añadimos los dominios que vayamos necesitando:

.google.com
.google.es
.wikipedia.org

Guardamos los cambios y editamos squid.conf, donde en primer lugar crearemos la lista de acceso de sitios permitidos:

...
acl mi-red-local src 192.168.0.0/24
acl dominios-permitidos dstdomain "/etc/squid/dominios-permitidos.squid"
...

Y a continuación añadimos una directiva http_access que bloquee cualquier sitio que no pertenezca a los que se permiten:

...
http_access deny !dominios-permitidos
http_access allow mi-red-local
...

Guardamos los cambios y recargamos Squid.

Conclusión

Ya sabes cómo instalar y configurar Squid en CentOS 7 de modo que en unos instantes podrás proporcionar acceso indirecto a Internet a redes sin acceso directo. Pero también podrás filtrar el acceso, bloqueando sitios no deseados, o permitiendo exclusivamente los sitios que te interesen.

En caso de dudas, preguntas, si tienes alguna sugerencia o echas en falta algo en esta guía, puedes dejar un comentario.

¡Apoya este sitio!

¿Ya funciona el proxy en tu red local gracias a esta guía de instalación y configuración de Squid en CentOS 7? Si es así y te apetece agradecérnoslo, puedes dejar una propina de 1 $ desde PayPal para una CocaCola:

¡Gracias!

Valora esta entrada

5/5 - (3 votos)

Deja un comentario