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
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.
Seleccionamos también la opción Usar el mismo proxy para todo. Aceptamos y abrimos una pestaña nueva, instantaneamente nos pedirá credenciales.
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:
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 u 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:
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 filterip y proxyip, en mi caso será 10.0.0.1(enp0s8 del servidor):
filterip = 10.0.0.1 ... proxyip = 10.0.0.1
Descomentamos y cambiamos daemonuser y daemongroup 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:
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!