SysAdmin Nazareno

Ejercicio 5: Control de acceso, autentificación y autorización

Crea un escenario en Vagrant o reutiliza uno de los que tienes en ejercicios anteriores, que tenga un servidor con una red publica, y una privada y un cliente conectada a la red privada. Crea un host virtual departamentos.iesgn.org.

  • Escenario:

    Vagrant.configure("2") do |config|
    
        config.vm.define :servidor do |servidor|
                servidor.vm.box = "debian/buster64"
                servidor.vm.hostname = "servidor"
                servidor.vm.network :public_network,:bridge=>"wlo1"
                servidor.vm.network :private_network, ip: "192.168.100.25", virtualbox__intnet: "redinterna"
        end
    
        config.vm.define :cliente do |cliente|
                cliente.vm.box = "debian/buster64"
                cliente.vm.hostname = "cliente"
                cliente.vm.network :private_network, ip: "192.168.100.26", virtualbox__intnet: "redinterna"
        end
    end

A la URL departamentos.iesgn.org/intranet sólo se debe tener acceso desde el cliente de la red local, y no se pueda acceder desde la anfitriona por la red pública. A la URL departamentos.iesgn.org/internet, sin embargo, sólo se debe tener acceso desde la anfitriona por la red pública, y no desde la red local.

  • Intalaremos Apache en nuestro servidor
  • Crearemos un fichero llamado departamentos.conf ubicado en sites-avaliable, haremos que solo se pueda acceder al derectorio desde una ip externa a la red privada.

    <Directory /var/www/departamentos/internet/>
                Options Indexes FollowSymLinks MultiViews
                <RequireAll>
                        Require not ip 192.168.100
                        Require all granted
                </RequireAll>
    </Directory>

    Ahora la intranet, permitiremos que solo las ips de la red local puedan entrar al directorio.

    <Directory /var/www/departamentos/intranet/>
                Options Indexes FollowSymLinks MultiViews
                <RequireAll>
                        Require ip 192.168.100
                        Require all granted
                </RequireAll>
    </Directory>

Modificaremos nuetros archivo </etc/hosts> tanto es nuesta maquina(internet) como en nuestro cliente (intranet).

192.168.100.25   www.departamentos.iesgn.org
192.168.2.161    www.departamentos.iesgn.org

PracticaImg

PracticaImg

PracticaImg

PracticaImg

Autentificación básica. Limita el acceso a la URL departamentos.iesgn.org/secreto. Comprueba las cabeceras de los mensajes HTTP que se intercambian entre el servidor y el cliente. ¿Cómo se manda la contraseña entre el cliente y el servidor?. Entrega una breve explicación del ejercicio.

Crearemos un directorio el directorio secreto:

root@servidor:/etc/apache2/sites-available# mkdir /var/www/departamentos/secreto

Crearemos un otro directorio llamado registro donde guardaremos un fichero de contraseñas y añadiré un usuario llamado root:

root@servidor:/var/www/departamentos/registro# htpasswd -c psw.txt root
New password: 
Re-type new password: 
Adding password for user root

En departamentos.conf

<Directory /var/www/departamentos/secreto> 
                Options Indexes FollowSymLinks MultiViews
                AuthType Basic
                AuthName "¿Quien eres?"
                AuthUserFile "/var/www/departamentos/registro/psw.txt"
                Require valid-user
</Directory>

Recargamos Apache

root@servidor:/etc/apache2/sites-available# systemctl reload apache2

Desde mi maquina: PracticaImg PracticaImg

Desde el cliente: PracticaImg PracticaImg

Cómo hemos visto la autentificación básica no es segura, modifica la autentificación para que sea del tipo digest, y sólo sea accesible a los usuarios pertenecientes al grupo directivos. Comprueba las cabeceras de los mensajes HTTP que se intercambian entre el servidor y el cliente. ¿Cómo funciona esta autentificación?

  1. Activar modulo digest.

    sudo a2enmod auth_digest
  2. Modificar el virtualhost para cambiar el tipo de autentificación.

    <Directory /var/www/departamentos/secreto> 
                Options Indexes FollowSymLinks MultiViews
                AuthType Digest
                AuthName "autorizados"
                AuthUserFile "/var/www/departamentos/registro/psw.txt"
                Require valid-user
    </Directory>

    Reiniciamos servicios

  3. Crearemos un usuario autorizado a acceder y otro restringido.

    root@servidor:/etc/apache2/sites-available# htdigest -c /var/www/departamentos/registro/psw.txt autorizados paco
    Adding password for paco in realm autorizados.
    New password: 
    Re-type new password:
    root@servidor:/etc/apache2/sites-available# htdigest -c /var/www/departamentos/registro/psw.txt restringidos pepe
    Adding password for pepe in realm restringidos.
    New password: 
    Re-type new password: 

    Usuario autorizado PracticaImg Usuario no autorizado PracticaImg

En el cliente el usuario autorizado es la misma captura que en el ejercicio 2. Usuario no autorizado. PracticaImg

Vamos a combinar el control de acceso (ejercicio 1) y la autentificación (Ejercicios 2 y 3), y vamos a configurar el virtual host para que se comporte de la siguiente manera: el acceso a la URL departamentos.iesgn.org/secreto se hace forma directa desde la intranet, desde la red pública te pide la autentificación. Muestra el resultado al profesor.

Modificamos la configuracion de /secreto en departamentos.conf. En este caso mezclaremos la autorizacion tipo digest, y que para poder acceder a dicha autentificacion deben acceder mediante el rango de ips 192.168.100 que son las de nuestra red privada.

<Directory /var/www/departamentos/secreto>
                Options Indexes FollowSymLinks MultiViews
                AuthType Digest
                AuthName "autorizados"
                AuthUserFile "/var/www/departamentos/registro/psw.txt"
                <RequireAny>
                        Require ip 192.168.100
			Require valid-user
                </RequireAny>
</Directory>

Como podemos ver si intentamos acceder desde nuestra maquina vemos como nos pide autentificación. PracticaImg

Mientras que desde nuestro cliente que entra dentro del rango de ips no nos la pide. PracticaImg


Fran Madueño

Escrito por Fran Madueño Estudiante de administración de sistemas operativos
(Dos Hermanas, Sevilla).