Servidor con Debian: Instalación y configuración de un servidor Proxy-Caché

Buenos días | tardes | noches, en esta entrada aprenderemos a cómo instalar y configurar un proxy-caché (Squid) en un servidor con Debian Stretch además de poder generar informes en HTML con SARG y automatizados con Crontab.

¿Qué es Squid?

Squid, cómo bien habéis podido deducir del titulo de la entrada, es una herramienta que nos ofrece la posibilidad de filtrar y cachear peticiones de los clientes.

¿Qué es SARG?

SARG es una herramienta que nos permite analizar los logs e informes generados en HTML con una visualización práctica y fácil de entender.

¿Qué es DansGuardian?

DansGuardian es una herramienta que nos permite filtrar contenido web. Flexible y con posibilidad de filtrar todo tipo de contenido que necesites.

Escenario montado

sq5.PNG

Instalación y configuración de Squid

Instalamos el paquete de squid3:

apt update && apt install squid3

Necesitaremos del paquete apache2-utils para usar la herramienta htpasswd, lo instalamos:

apt install apache2-utils

Creamos el fichero que contendrá los usuarios que podrán navegar a través del proxy-caché:

#Creamos el fichero con un usuario y su contraseña
htpasswd -c /etc/squid/usuarios privado
#Añadimos a otro usuario
htpasswd /etc/squid/usuarios publico

Cambiamos permisos y grupos del fichero:

chmod 640 /etc/squid/usuarios
chown root:proxy /etc/squid/usuarios

Primero copiamos el fichero de configuración para evitar fallos:

cp /etc/squid/squid.conf /etc/squid/squid.conf.old

Editamos el fichero /etc/squid/squid.conf y buscamos la línea que contiene acl localnet:

acl localnet src 192.168.1.0/24 # RFC1918 possible internal network

En la sección inferior al bloque de acl localnet, agregamos la siguiente línea:

acl usuarios proxy_auth privado publico

Buscamos por auth_param basic y en los bloques que nos aparecen (están con doble almohadilla), descomentamos las siguientes lineas y las modificamos:

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/usuarios
auth_param basic children 5 startup=5 idle=1
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

Ahora buscamos por INSERT y añadimos las siguientes lineas para que estén la primera de cada apartado:

http_access allow usuarios
http_access deny !usuarios

Guardamos y reiniciamos squid:

systemctl reload squid

En el cliente, abrimos el navegador web (Mozilla Firefox en mi caso), nos vamos a Preferencias > Avanzado > Red > Configuración, seleccionamos la opción Configuración manual del proxy, añadiendo la IP del servidor así cómo el puerto correspondiente.

sq1.PNG

Seleccionamos también la opción Usar el mismo proxy para todo. Aceptamos y abrimos una pestaña nueva, instantaneamente nos pedirá credenciales.

sq2.PNG

Deberemos de introducir usuario y contraseña correspondiente a los usuarios Privado/Publico y sus respectivas contraseña, sino no nos dejará continuar.

Procedemos a agregar unas cuantas ACL’s más. Para ello nos vamos a la ACL de los usuarios y agregamos las siguientes lineas:

acl imagenes urlpath_regex png
acl descargas urlpath_regex \.bin$ \.msi$ \.exe$ \.zip$ \.rar$ \.iso$ \.tar.gz$
acl conexion time MTWHF 08:00-14:00
acl findes time SA 00:00-23:00
acl marca dstdomain .marca.com #También podemos agregar dominios mediante ficheros añadiendo -i "ruta del fichero"

Buscamos por INSERT y agregamos (en el mismo orden) los accesos permitidos y denegados:

# Denegar descargas con las extensiones de la acl
http_access deny usuarios descargas
# Denegamos el dominio de marca
http_access deny usuarios marca
# Denegamos la navegación los fin de semanas
http_access deny findes privados
# Denegar cualquier tipo de imagen
http_access deny publicos imagenes
#Permitimos la conexión a todos
https_access allow usuarios
https_access deny !usuarios

Para saber que al acceder o descargar un fichero, el proxy funciona, nos debería de aparecer la siguiente información:

sq4.PNG

Ahora necesitaremos de la instalación de SARG para poder monitorizar el uso de Squid.

Instalación y configuración de SARG

Instalamos el paquete:

apt update && apt install sarg

Editamos el fichero /etc/sarg/sarg.conf y descomentamos la linea output_dir /var/www/html/squid-reports.

# TAG:  access_log file
#       Where is the access.log file
#       sarg -l file
#
access_log /var/log/squid/access.log

Cambiamos el formato de la fecha, buscamos date y reemplazamos por e.

# TAG:  date_format
#       Date format in reports: e (European=dd/mm/yy), u (American=mm/dd/yy), w (Weekly=yy.ww)
#
date_format e

Guardamos y salimos.

Generamos nuestro primer informe:

sudo sarg -x

El informe se genera en un fichero html en la ruta que establecimos anteriormente /var/www/html/squid-reports. Si accedemos a la url http://localhost/squid-reports veremos la interfaz web:

sq3

 

Os dejo a vosotros qué os desplacéis y veáis su contenido.

Por último, crearemos una tarea en cron para crear informes cada dos horas. Para ello ejecutamos:

crontab -e

Y al final del fichero añadimos:

* */2 * * * /usr/local/bin/sarg -x

Ahora cada dos horas tendremos un nuevo informe de SARG.

Instalación y configuración de DansGuardian

Antes de proceder a su instalación, debemos de cambiar el modo de Squid a transparente. Para ello, editamos el fichero /etc/squid/squid.conf y buscamos por el puerto 3128, añadiendo transparent:

http_port 3128 transparent

Por lo que toda la configuración realizada con squid deberá ser eliminada (o en mi caso, borrar el fichero duplicado).

Ahora buscamos por always_direct (nos aparecerán varios, deberemos de introducir la siguiente linea arriba de TAG: never_direct)

always_direct allow all

Guardamos y salimos.

Procedemos a instalar el paquete de DansGuardian:

apt update && apt install dansguardian

Al terminar su instalación, nos dará error al levantar el servicio, no os preocupéis, es por la mala configuración por defecto.

Editamos el fichero /etc/dansguardian/dansguardian.conf comentando la linea UNCONFIGURED y descomentando la referente al log:

#UNCONFIGURED - Please remove this line after configuration
...
loglocation = '/var/log/dansguardian/access.log'

Cambiamos el contenido de filteripproxyip, en mi caso será 10.0.0.1(enp0s8 del servidor):

filterip = 10.0.0.1
...
proxyip = 10.0.0.1

Descomentamos y cambiamos daemonuserdaemongroup a proxy:

daemonuser = 'proxy'
daemongroup = 'proxy'

Modificamos la variable accessdeniedaddress a localhost:

accessdeniedaddress = 'http://localhost/cgi-bin/dansguardian.pl

Cambiamos usuario y grupo propietarios del directorio de log de DansGuardian:

chown -R proxy:proxy /var/log/dansguardian

Creamos las reglas de iptables para realizar el redireccionamiento de puertos:

iptables -t nat -A PREROUTING -i enp0s3 -s 10.0.0.0/24 -d 0.0.0.0/0.0.0.0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i enp0s3 -s 10.0.0.0/24 -d 0.0.0.0/0.0.0.0 -p tcp --dport 433 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 3128 -j REDIRECT --to-port 8080

Por último, agregamos al fichero /etc/dansguardian/lists/bannedsitelist los dominios que queramos, en mi caso son youtube y marca (justo debajo de #List other sites to block):

www.marca.com
www.youtube.com

Iniciamos el servicio:

systemctl start dansguardian

Si accedemos por un cliente (la configuración del navegador no tenemos que cambiarla gracias a las reglas de iptables) a cualquier dominio de los bloqueados, nos indicará el siguiente mensaje:

sq6.PNG

Y si vemos el log:

root@debian:/home/usuario# tailf /var/log/dansguardian/access.log
2018.2.17 10:26:59 - 10.0.0.2 http://detectportal.firefox.com/success.txt GET 3812 0 1 403 text/html -
2018.2.17 10:26:59 - 10.0.0.2 http://detectportal.firefox.com/success.txt GET 3812 0 1 403 text/html -
2018.2.17 10:26:59 - 10.0.0.2 http://detectportal.firefox.com/success.txt GET 3812 0 1 403 text/html -
2018.2.17 10:26:59 - 10.0.0.2 http://detectportal.firefox.com/success.txt GET 3812 0 1 403 text/html -
2018.2.17 10:27:59 - 10.0.0.2 http://detectportal.firefox.com/success.txt GET 3812 0 1 403 text/html -
2018.2.17 10:27:59 - 10.0.0.2 http://detectportal.firefox.com/success.txt GET 3812 0 1 403 text/html -
2018.2.17 10:27:59 - 10.0.0.2 http://detectportal.firefox.com/success.txt GET 3812 0 1 403 text/html -
2018.2.17 10:27:59 - 10.0.0.2 http://detectportal.firefox.com/success.txt GET 3812 0 1 403 text/html -
2018.2.17 10:27:59 - 10.0.0.2 http://detectportal.firefox.com/success.txt GET 3812 0 1 403 text/html -
2018.2.17 10:27:59 - 10.0.0.2 http://detectportal.firefox.com/success.txt GET 3812 0 1 403 text/html -

 

Espero que os haya gustado y sobretodo que hayáis aprendido.

Nos vemos en la siguiente entrada.

Saludos!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.