Cómo añadir Autenticación Básica de tipo HTTP a los nodos de HAProxy
Este artículo cubre como añadir una capa de seguridad básica Autenticación Básica HTTP sobre un proxy HAProxy a una directiva backend de la configuración…
Este artículo cubre comom añadir una capa de seguridad básica Autenticación Básica HTTP sobre un proxy HAProxy a una directiva backend de la configuración.
Autenticación Básica HTTP
Esta autenticación es la forma más básica de seguridad en una web. Esta dentro de la especificación HTTP y no requiere ninguna acción por parte de nuestra aplicación, ni sesiones, pantalla de conexión, etc… simplemente funciona con cualquier cliente web.
Caso de Uso
Suponemos que tenemos un servicio de HAProxy en un servidor donde tenemos alojadas varias instancias de una aplicación Web: qa, preproducción y producción.
Visible públicamente sólo debe estarlo la aplicación de producción. Los otros dos entornos son de pruebas antes de desplegar la aplicación en producción.
Queremos que los entornos de qa y preproducción tengan una protección básica HTTP para poder acceder a ellas.
Los diferentes dominios que tenemos en el ejemplo son:
- qa: qa.rqsample.com
- preproducción: preprod.rqsample.com
- producción: www.rqsample.com
Configuración sin Autenticación
Suponiendo que qa.rqsample.com esta escuchando en la ip:puerto 172.17.0.1:16700, preprod.rqsample.com lo hace en 172.17.0.1:16800 y www.rqsample.com lo hace en 172.17.0.1:16900 la configuración de HAProxy, que está en /etc/haproxy/haproxy.cfg, quedaría como sigue:
global maxconn 4096 defaults mode http timeout connect 5000ms frontend http-in bind *:80 timeout client 30000ms timeout server 30000ms option httpclose # ACL acl is_qa hdr(host) -i qa.rqsample.com acl is_preprod hdr(host) -i preprod.rqsample.com acl is_prod hdr(host) -i www.rqsample.com # Backends use_backend application_qa if is_qa use_backend application_preprod if is_preprod use_backend application_prod if is_prod backend application_qa balance roundrobin option forwardfor server node1 172.17.0.1:16700 check backend application_preprod balance roundrobin option forwardfor server node1 172.17.0.1:16800 check backend application_prod balance roundrobin option forwardfor server node1 172.17.0.1:16900 check
Comprobamos en la configuración que HAProxy detecta el host de la petición HTTP en la sección ACL de la configuración y crea las variables is_qa, is_preprod e is_prod para poder redirigir la petición a la IP y puerto correspondiente definidos en cada una de las directivas backend
Definiendo el usuario y la contraseña
Creamos nuestro listado de usuarios y contraseñas en la cabecera de la configuración:
userlist UsersFor_Sample user sample insecure-password sample0102 user admin insecure-password admin0304
Y añadimos la comprobación del usuario y contraseña en las directivas de qa y preprod:
acl AuthOkay_Sample http_auth(UsersFor_Sample) http-request auth realm SampleApplication if !AuthOkay_Sample
El archivo de configuración de HAProxy final quedaría como sigue:
global maxconn 4096 defaults mode http timeout connect 5000ms userlist UsersFor_Sample user sample insecure-password sample0102 user admin insecure-password admin0304 frontend http-in bind *:80 timeout client 30000ms timeout server 30000ms option httpclose # ACL acl is_qa hdr(host) -i qa.rqsample.com acl is_preprod hdr(host) -i preprod.rqsample.com acl is_prod hdr(host) -i www.rqsample.com # Backends use_backend application_qa if is_qa use_backend application_preprod if is_preprod use_backend application_prod if is_prod backend application_qa balance roundrobin option forwardfor acl AuthOkay_Sample http_auth(UsersFor_Sample) http-request auth realm SampleApplication if !AuthOkay_Sample server node1 172.17.0.1:16700 check backend application_preprod balance roundrobin option forwardfor acl AuthOkay_Sample http_auth(UsersFor_Sample) http-request auth realm SampleApplication if !AuthOkay_Sample server node1 172.17.0.1:16800 check backend application_prod balance roundrobin option forwardfor server node1 172.17.0.1:16900 check
Ya hemos configurado una capa de seguridad HTTP Básica en los Backend que no son producción!
HAProxy: http://www.haproxy.org/