De golpe y porrazo me llega un requerimiento de restringir una web de acceso publico desde la LAN que no tenia desarrollado un portal de usuario y clave
Rápidamente pienso como responder el requerimiento:
- Que se desarrolle el portal de usuario y clave : llevara mucho tiempo con los recursos que se disponen y en el mientras ¿que hacemos?
- Restringir por IP: problemático para gente que se le asigna IP en forma dinámica y/o si existen múltiples usuarios que se loguean en la misma computador.
Otra alternativa, volviendo en el tiempo siendo un poco rustica pero cumple con limitar quien ingresa al sitio es implementar autenticación desde el webserver, en nuestro caso Apache
Pero como se dispone de un repositorio de usuario de Active Directory, nos vamos a aprovechar para evitar estar creando usuarios manualmente en un server (algo muy desprolijo).
Procedemos a meter mano entonces
Primera Opción
Esta configuración permite que Apache autentique usuarios utilizando Active Directory mediante LDAP. Si está en el AD activo te deja ingresar, no distingue grupo
- Módulo mod_authnz_ldap
- Para Debian/Ubuntu
- sudo apt-get install apache2-utils ldap-utils
- sudo a2enmod authnz_ldap
- sudo systemctl restart apache2
- Para Red Hat/CentOS:
- sudo yum install httpd-tools openldap-clients
- sudo systemctl restart httpd
- Configurar Apache para Usar LDAP
- Edita el archivo de configuración del sitio web de Apache
- normalmente en:
- /etc/apache2/sites-available/ (Debian/Ubuntu)
- /etc/httpd/conf.d/ (Red Hat/CentOS)
- Añadir la configuración LDAP dentro del bloque <Directory> (para ubicación en el filesystem) , <Location> (para ubicación virtual de la URL) o <Proxy *> (para un proxy reverso):
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
AuthType Basic
AuthName "Restricted Area"
AuthBasicProvider ldap
AuthLDAPURL "ldap://your-ad-server:389/DC=yourdomain,DC=com?sAMAccountName?sub?(objectClass=user)"
AuthLDAPBindDN "CN=binduser,CN=Users,DC=yourdomain,DC=com"
AuthLDAPBindPassword "binduserpassword"
Require valid-user
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Explicación de los Parámetros
- AuthType Basic: Configura la autenticación básica HTTP.
- AuthName "Restricted Area": Mensaje que se muestra en el cuadro de diálogo de autenticación.
- AuthBasicProvider ldap: Indica que LDAP será el proveedor de autenticación.
- AuthLDAPURL: URL del servidor LDAP. Sustituye 'your-ad-server' por el nombre del servidor AD y 'yourdomain' por el dominio. 'sAMAccountName' se usa para buscar el nombre de usuario.
- AuthLDAPBindDN: La cuenta de usuario de servicio que Apache usará para enlazarse al servidor LDAP. Con este usuario consulta al AD
- AuthLDAPBindPassword: La contraseña de la cuenta de enlace.
- Require valid-user: Permite que cualquier usuario autenticado pueda acceder.
4. Compruebo sintaxis de la config de Apache
sudo apachectl configtest
5. Recargo la configuración para aplicar cambios
sudo /etc/init.d/apache2 reload (Debian/Ubuntu)
sudo /etc/init.d/httpd reload (Red Hat/CentOS)
6. Resultado al ingresar por el navegador
Ingreso con usuario y clave de Windows
Segunda Opción (mas adecuada y restrictiva)
Esta configuración permite que Apache autentique y restrinja el
acceso a usuarios que son miembros de un grupo específico en Active
Directory.
La única diferencia respecto a la primera opción, se encuentra en la edición del archivo de configuración del sitio web de Apache
Añadir la configuración LDAP dentro del bloque <Directory> (para ubicación en el filesystem) , <Location> (para ubicación virtual de la URL) o <Proxy *> (para un proxy reverso):
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory "/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Proxy *>
AuthType Basic
AuthName "Restricted Area"
AuthBasicProvider ldap
AuthLDAPURL "ldap://your-ad-server:389/DC=yourdomain,DC=com?sAMAccountName?sub?(objectClass=user)"
AuthLDAPBindDN "CN=binduser,OU=ou_user,DC=yourdomain,DC=com"
AuthLDAPBindPassword "binduserpassword"
AuthLDAPGroupAttributeIsDN on
Require ldap-group CN=your-group,OU=ou_group,DC=yourdomain,DC=com
</Proxy>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Explicación de los Parámetros
- Require ldap-group: Restringe el acceso a los usuarios que son miembros del grupo especificado. Sustituir 'CN=your-group,OU=ou_user,DC=yourdomain,DC=com' con el DN del grupo en tu AD que contiene los usuarios autorizados a ingresar.
- Demas parámetros explicados en la Primera Opción
4. Compruebo sintaxis de la config de Apache
sudo apachectl configtest
5. Recargo la configuración para aplicar cambios
sudo /etc/init.d/apache2 reload (Debian/Ubuntu)
sudo /etc/init.d/httpd reload (Red Hat/CentOS)
Consideraciones Adicionales
- Este método no permite control de la sesión, hasta que no cierre el navegador no se van a solicitar las credenciales. Ademas no se puede agregar control por tiempo y/o segregar funciones dentro del sitio (una vez dentro tiene acceso a todo el sitio).
- El usuario de enlace ('binduser') tenga permisos adecuados para buscar en el Active Directory.
- Si utilizas SSL/TLS para LDAP (LDAPS) (recomendado), el 'AuthLDAPURL' debe empezar con 'ldaps://' y el puerto debe ser '636'. Esto permite cifrar la comunicación entre el webserver y el servidor de AD
- Considera usar HTTPS en el sitio web para cifrar la autenticación.
- Restringir Permisos del Archivo de Configuración: Asegúrate de que solo el usuario bajo el cual se ejecuta Apache tenga acceso al archivo de configuración.
- sudo chown root:www-data /path/to/config/file
- sudo chmod 640 /path/to/config/file
0 comments:
Publicar un comentario