“error 403 acceso denegado”, cuando usamos haproxy en nuestra infraestructura, y como resolverlo. También explicaré un poco de teoría sobre direcciones IP.
¿Por qué nos da “error 403 acceso denegado”?
Una de las ventajas de usar haproxy, es proteger el acceso a los servidores que tenemos detrás de él.
Tenemos la posibilidad de crear listas de acceso (ACL), que nos permite realizar un filtrado por dirección IP.
Podemos crear listas con IP denegadas (DENY) o permitidas (ALLOW). Cuando una IP no se encuentra permitida en la lista de acceso, el haproxy nos devuelve “error 403 acceso denegado”.
Diferencia entre IP privada e IP pública
Es importante distinguirlas, para poder habilitar la IP correcta en nuestras listas de acceso.
IP privada
Cuando nos conectamos a una red privada, nuestro dispositivo (PC, notebook, tablet, smartphone), recibe un número identificador, es decir una dirección IP privada, que nos permite acceder a los recursos de la red local (por ejemplo, una impresora de red, o un disco externo en red).
En una red pequeña u hogareña, por lo general, estas ip comienzan con 192.168.0.x.
Ejemplo:
DISPOSITIVO | IP |
PC | 192.168.0.24 |
IMPRESORA | 192.168.0.100 |
DISCO EXTERNO | 192.168.0.86 |
En una oficina, las direcciones pueden comenzar con otros números, pero la IP de una pc, se parece a la IP de la pc a continuación.
Ejemplo:
DISPOSITIVO | IP |
PC 1 | 10.20.1.20 |
PC 2 | 10.20.1.36 |
PC 3 | 10.20.1.64 |
💡 Nota: Los administradores de sistemas, pueden elegir segmentar la red por piso de oficinas, por tipo de conexión(PC con cable, Notebook con wifi), por sector (Contabilidad, RRHH, Legales,etc), según sea necesario para asegurar que cada dispositivo tenga una ip disponible y según como se quiera proteger la red.
Cada red creada tiene su propio grupo de direcciones IP.
IP pública
La IP pública es aquella que nos da nuestro proveedor de internet, y nos sirve para acceder a las páginas web, chat, videollamadas, y otros servicios que se encuentran ahí.
Todos los aparatos de nuestra red local comparten esa IP pública, y es el router quien se encarga de dirigir los datos entre internet y nuestros dispositivos.
Al ser internet una red más grande, nuestra ip pública se ve como un número más aleatorio, por ejemplo 186.20.153.180.
Podemos ver este número IP visitando una página como: https://www.whatismyip.com/es/
Configuración de listas de acceso en haproxy
En el archivo haproxy.cfg, vamos a enfocarnos en este momento, en la parte de los frontend.
Vamos a tipear un par de líneas:
acl miclientevip src 186.22.163.128
acl otrosclientes src -f /etc/haproxy/listados/otrosclientes.txt
http-request deny if {hdr(host) -i "miweb.midominio.com.ar" } !miclientevip !otrosclientes !{ src 192.168.0.0/24}
use_backend servidoresweb if {hdr(host) -i "miweb.midominio.com.ar" }
Paso a explicar línea por línea.
1 Lista de acceso, un nombre identificador, una ip pública de origen.
2 Otra lista de acceso, otro identificador, y la ruta a un archivo de texto. Este archivo debe contener una lista de ips que yo necesito habilitar.
3 Regla de denegación de acceso.
La regla dice, si alguien envía una solicitud a miweb.midominio.com.ar y NO es miclientevip, y NO pertenece al listado otrosclientes, y NO viene de mi red local, entonces el haproxy contesta error 403.
El símbolo ! sirve para negar.
4 La solicitud se dirige al backend servidoresweb si pasa por los filtros anteriores y la url es miweb.midominio.com.ar
NOTA: El archivo /etc/haproxy/listados/otrosclientes.txt puede contener direcciones ip o rangos en formato CIDR:
142.250.31.100
151.101.65.164
23.215.0.38/29
A tener en cuenta al trabajar con haproxy
– Hay que prestar atención que si tenemos nuestras direcciones web publicadas en el puerto 80 (HTTP) y el 443 (HTTPS), debemos duplicar nuestra configuración de ACLS y reglas en ambos frontend.
– Es mejor tener registrado en un archivo de texto, las ips permitidas vinculadas con el nombre del cliente. Esto nos permitirá saber quién puede estar causando una sobrecarga de solicitudes.
– En cada servidor de backend (IIS, APACHE, NGINX, o DOCKER), debe haber una regla de firewall que permita el tráfico desde la ip local del haproxy.
Buscando el “error 403 acceso denegado”, en el archivo log
El haproxy genera un archivo de log en la ruta /var/log/haproxy.log
Cuando nos encontremos con un error 403, debemos buscar la ip de origen de la solicitud con este comando. No muestra errores pasados, sino los que ocurran posteriormente a la ejecución del comando:
tail -f /var/log/haproxy.log | grep 403
Conclusión al “error 403 acceso denegado”
Ahora que podemos distinguir entre direcciones IP, cuando tengamos que permitir un acceso a nuestro haproxy desde la red local, habilitaremos una IP privada. En cambio, si debemos habilitar el acceso desde un lugar en internet, habilitaremos la IP pública.
🏷️ #acceso_denegado #error_403 #haproxy #http #ip_privada #ip_pública #teoría_redes