pass apache apache2 reverse-proxy basic-authentication mod-proxy

pass - ubuntu 14.04 apache reverse proxy



Apache2 Reverse Proxy a un punto final que requiere BasicAuth pero desea ocultarlo al usuario (2)

Básicamente, mi hipótesis es que tengo un sitio web interno que requiere un nombre de usuario y contraseña codificados para acceder (y esto no se puede desactivar, solo se modifica). Estoy exponiendo este sitio web a través de un proxy inverso por varias razones (ocultar el puerto, simplificar la URL, simplificar NAT, etc.).

Sin embargo, lo que me gustaría hacer es poder utilizar Apache para manejar la autenticación de modo que:

  1. No tengo que dar una sola contraseña a todos
  2. Puedo tener múltiples nombres de usuario y contraseñas usando BasicAuth de Apache
  3. Para usuarios internos, no tengo que solicitar una contraseña

EDITAR: la segunda parte sobre la autenticación más rica se ha movido a una nueva pregunta

Aquí hay más o menos lo que tengo ahora:

<VirtualHost *:80> ServerName sub.domain.com ProxyPass / http://192.168.1.253:8080/endpoint ProxyPassReverse / http://192.168.1.253:8080/endpoint # The endpoint has a mandatory password that I want to avoid requiring users to type # I.e. something like this would be nice (but does not work) # ProxyPass / http://username:[email protected]:8080/endpoint # ProxyPassReverse / http://username:[email protected]:8080/endpoint # Also need to be able to require a password to access proxy for people outside local subnet # However these passwords will be controlled by Apache using BasicAuth, not the ProxyPass endpoint # Ideas? </VirtualHost>


Agregue o sobrescriba el encabezado Authorization antes de pasar cualquier solicitud al endpoint. El encabezado de autorización puede estar codificado, es solo una codificación de base 64 de la cadena "nombre de usuario: contraseña" (sin las comillas).

Habilite el módulo mod_headers si aún no lo ha hecho.

RequestHeader set Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

Para realizar esto condicionalmente, habilite el mod_setenvif, por ejemplo, solicite la contraseña maestra en el caso de solicitudes locales:

SetEnvIf Remote_Addr "127/.0/.0/.1" localrequest RequestHeader set Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" env=!localrequest

EJEMPLO

# ALL remote users ALWAYS authenticate against reverse proxy''s # /www/conf/passwords database # <Directory /var/web/pages/secure> AuthBasicProvider /www/conf/passwords AuthType Basic AuthName "Protected Area" Require valid-user </Directory> # reverse proxy authenticates against master server as: # Aladdin:open sesame (Base64 encoded) # RequestHeader set Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="


Bueno, utilicé su ejemplo para apuntar a dos cámaras IP utilizando apache proxypass. Cuando utilicé el usuario de sintaxis: [email protected] y accedí a través de un iphone, recibí un mensaje de seguridad de safari (navegador de iphone), así que cambié el ejemplo para que funcionara bien con iPhone 4S.

<Location /camarafeliz1/ > # usuario admin password 123456 ProxyPass http://192.168.0.39/ ProxyPassReverse http://192.168.0.39/ RequestHeader set Authorization "Basic YWRtaW46MTIzNDU2==" </Location> <Location /camarafeliz3/ > # usuario admin password 123456 ProxyPass http://192.168.0.99/ ProxyPassReverse http://192.168.0.99/ RequestHeader set Authorization "Basic YWRtaW46MTIzNDU2==" </Location>

y el iPhone 4s dejó de quejarse sobre la seguridad debido al usuario y la contraseña en el enlace.