Es sabido que durante el proceso de autenticación en un servidor proxy HTTP las credenciales se envian en texto plano. Lo anterior pudiera convertirse en un problema de seguridad. Esta vulnerabilidad permite a un usuario malicioso capturar fácilmente el par usuario contraseña utilizando un ataque de tipo MitM.
Una solución viable consiste en configurar el servidor proxy con soporte para SSL, de modo que el tráfico enviado desde el navegador hacia este viaje por un canal seguro. Para esto, el navegador debe ser capaz de comunicarse con el servidor proxy a través del protocolo HTTP sobre SSL/TLS.
En este tipo de comunicación el navegador debe 'confiar' en el certificado enviado por el servidor proxy el cual debe estar firmado por una Autoridad Certificadora (CA) reconocida y autorizada.
Una solución muy conveniente sería utilizar Let's Encrypt. Let’s Encrypt es una autoridad certificadora completamente gratuita, automatizada y abierta, mediante la cual se pueden obtener certificados SSL.
Una vez configurado correctamente el servidor proxy con soporte para SSL, es necesario preparar el navegador para que se pueda comunicar de forma segura con este. Actualmente, ningún navegador permite la configuración manual del proxy a través de HTTPS. Afortunadamente, la mayoría de los navegadores más populares son capaces de recibir la configuración a través del protocolo WPAD.
- Debian 11 (Bullseye) 64 bits
- Certificados SSL (a través de Let's Encrypt)
- Squid (con soporte para SSL)
- Servidor Web (para el archivo proxy PAC)
- Firefox
apt install squid-openssl squidclient
Añadir la siguiente línea al archivo /etc/squid/squid.conf
justo al inicio.
https_port 3129 tls-cert=/ruta/al/certificado/fullchain.pem tls-key=/ruta/a/la/llave/privkey.pem options=TLS1_3
En el parámetro tls-cert
se especifica la ruta del certificado público y en tls-key
la de la llave privada.
En options
se especifica qué versiones de SSL/TLS se soportarán, en este caso solamente TLSv1.3 desechando versiones de SSL vulnerables.
Para que toda la comunicación entre los navegadores y el servidor proxy sea exclusivamente sobre SSL por el puerto 3129, es necesario configurar el parámetro http_port
de modo que solamente el localhost pueda comunicarse con este puerto.
http_port 127.0.0.1:3128
No sería recomendable deshabilitar completamente el puerto porque certbot
o acme.sh
no podrían comunicarse a través de un proxy SSL/TLS.
WPAD (Web Proxy AutoDiscovery Protocol) consiste en servir un fichero a través del protocolo HTTP que contiene los parámetros de configuración del proxy. Dadas las diferentes formas en las que los navegadores intentan obtenerlo, la misma configuración debe existir en 3 archivos diferentes: wpad.pad
, wpad.pa
y proxy.pac
Para esto debe prepararse un servidor web que sirva los tres archivos y puedan obtenerse a través de una dirección con esta forma: http://wpad.dominio.tld/wpad.pad. Pudiera utilizarse cualquier servidor web existente para estos propósitos.
Generalmente se crea el archivo wpad.pad
y posteriormente se generan enlaces simbólicos de este para evitar mantener 3 archivos distintos con el mismo contenido.
Es necesario crear un nuevo registro en el servidor DNS que apunte a wpad.dominio.tld
El contenido de estos archivos puede quedar como sigue.
function FindProxyForURL(url, host)
{
if (isPlainHostName(host)) return "DIRECT";
if (isInNet(host, "127.0.0.0", "255.0.0.0") ||
isInNet(host, "10.0.0.0", "255.0.0.0") ||
isInNet(host, "172.16.0.0", "255.240.0.0") ||
isInNet(host, "192.168.0.0", "255.255.0.0"))
return "DIRECT";
if (dnsDomainIs(host, ".foo.tld") ||
dnsDomainIs(host, ".bar.tld") ||
dnsDomainIs(host, ".baz.tld"))
return "DIRECT";
return "HTTPS proxy.dominio.tld:3129";
}
Configurar Firefox (versiones +56) para que autodetecte la configuración del proxy a través de WPAD.
- Clic en Opciones (o en el ícono de tres barras)
- Clic en General
- Desplazarse hasta el apartado Proxy de red
- Clic en Configuración
- En URL de configuración automática de proxy especificar
http://wpad.dominio.tld/wpad.dat
- Clic en Aceptar
Herramientas como wget
, curl
, npm
, pip
, entre otras, no son compatibles con proxies HTTPS.