Tarea 1: Crea un escenario Vagrant o utiliza una máquina del cloud con una red pública. Instala el servidor web nginx en la máquina. Modifica la página index.html que viene por defecto y accede a ella desde un navegador. Entrega una captura de pantalla accediendo a ella.
Instalamos Nginx en el equipo que acabamos de crear mediante vagrant .
1
vagrant@Servidor:~$ sudo apt install nginx
Configuramos el siguiente fichero /var/www/index.html
Tarea 2: Configura la resolución estática en los clientes y muestra el acceso a cada una de las páginas.
Primero vamos a desactivar la web por defecto con:
1
2
3
4
vagrant@Servidor:/etc/nginx/sites-enabled$ ls
default
vagrant@Servidor:/etc/nginx/sites-enabled$ sudo rm default
Y copiamos la web por defecto a los nuevos sitios web:
1
2
vagrant@Servidor:/etc/nginx/sites-available$ sudo cp default iesgn
vagrant@Servidor:/etc/nginx/sites-available$ sudo cp default departamentos
Su directorio base será /srv/www/ y contendrá una página llamada index.html
1
2
vagrant@Servidor:/srv/www$ sudo mkdir iesgn
vagrant@Servidor:/srv/www$ sudo mkdir departamentos
Editamos el fichero que hemos creado previamente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
vagrant@Servidor:/etc/nginx/sites-available$ sudo nano iesgn
#
server {
listen 80;
listen [::]:80;
root /srv/www/iesgn;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name www.iesgn.org;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
vagrant@Servidor:/etc/nginx/sites-available$ sudo nano departamentos
#
server {
listen 80;
listen [::]:80;
root /srv/www/departamentos;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name departamentos.iesgn.org;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}
Ahora vamos a activar los sitios web:
1
2
vagrant@Servidor:/etc/nginx/sites-available$ sudo ln -s /etc/nginx/sites-available/iesgn /etc/nginx/sites-enabled/
vagrant@Servidor:/etc/nginx/sites-available$ sudo ln -s /etc/nginx/sites-available/departamentos /etc/nginx/sites-enabled/
Le damos permisos:
1
root@Servidor:/srv/www# chown -R www-data:www-data .
Reiniciamos los servicios de Nginx:
1
vagrant@Servidor:~$ sudo systemctl restart nginx.service
Tarea 3: Cuando se entre a la dirección www.iesgn.org se redireccionará automáticamente a www.iesgn.org/principal, donde se mostrará el mensaje de bienvenida. En el directorio principal no se permite ver la lista de los ficheros, no se permite que se siga los enlaces simbólicos y no se permite negociación de contenido. Muestra al profesor el funcionamiento.
Creamos el directorio principal dento de /srv/www/iesgn
1
2
3
4
5
6
7
vagrant@Servidor:/srv/www/iesgn$ sudo mkdir principal
vagrant@Servidor:/srv/www/iesgn$ ls
index.html principal
vagrant@Servidor:/srv/www/iesgn$ sudo mv index.html principal/
vagrant@Servidor:/srv/www/iesgn$ ls
principal
Por último editamos el archivo de configuración de Nginx para que no se permita ver la lista de los ficheros, no se permita que se siga los enlaces simbólicos y no se permita la negociación de contenido.
1
2
3
vagrant@Servidor:/etc/nginx/sites-available$ sudo nano iesgn
rewrite ^/$ /principal/ permanent;
Tarea 4: Si accedes a la página www.iesgn.org/principal/documentos se visualizarán los documentos que hay en /srv/doc. Por lo tanto se permitirá el listado de fichero y el seguimiento de enlaces simbólicos siempre que sean a ficheros o directorios cuyo dueño sea el usuario. Muestra al profesor el funcionamiento.
Lo primero que tenemos que hacer es crear un archivo en /srv/doc:
1
2
3
4
5
6
vagrant@Servidor:/srv$ sudo mkdir doc
vagrant@Servidor:/srv$ sudo chown -R www-data:www-data /srv/doc/
vagrant@Servidor:/srv$ cd doc/
vagrant@Servidor:/srv/doc$ sudo touch archivo
vagrant@Servidor:/srv/doc$ ls
archivo
Creamos un directorio documentos :
1
vagrant@Servidor:/srv/www/iesgn/principal$ sudo mkdir Documentos
Añadimos en la configuración de nginx las opciones para permitir el listado de fichero y el seguimiento de enlaces simbólicos siempre que sean a ficheros o directorios cuyo dueño sea el usuario.
1
2
3
4
5
location /principal/documentos/ {
alias srv/doc;
autoindex on;
disable_symlinks if_not_owner;
}
Creamos dos directorios en el /home de vagrant
1
2
3
4
vagrant@Nginx:~$ mkdir pruebaenlace1 pruebaenlace2
vagrant@Nginx:~$ ls
pruebaenlace1 pruebaenlace2
Creamos los enlaces simbólicos.
1
2
3
4
5
vagrant@Nginx:~$ sudo ln -svf /home/vagrant/pruebaenlace1 /srv/doc
'/srv/doc/pruebaenlace1' -> '/home/vagrant/pruebaenlace1'
vagrant@Nginx:~$ sudo ln -svf /home/vagrant/pruebaenlace2 /srv/doc
'/srv/doc/pruebaenlace2' -> '/home/vagrant/pruebaenlace2'
Le damos permisos:
1
2
vagrant@Nginx:~$ sudo chown -h www-data:www-data pruebaenlace1
vagrant@Nginx:/srv/doc$ sudo chown -h www-data:www-data pruebaenlace1
1
2
3
4
vagrant@Nginx:~$ ls -la
drwxr-xr-x 2 www-data www-data 4096 Nov 8 10:04 pruebaenlace1
drwxr-xr-x 2 root root 4096 Nov 8 10:04 pruebaenlace2
1
2
3
4
vagrant@Nginx:/srv/doc$ ls -la
lrwxrwxrwx 1 www-data www-data 27 Nov 8 10:04 pruebaenlace1 -> /home/vagrant/pruebaenlace1
lrwxrwxrwx 1 root root 27 Nov 8 10:04 pruebaenlace2 -> /home/vagrant/pruebaenlace2
Cambiamos los permisos de pruebaenlace2 para que tengan diferentes propietarios:
1
2
3
4
vagrant@Nginx:~$ ls -l
total 8
drwxr-xr-x 2 www-data www-data 4096 Nov 8 10:04 pruebaenlace1
drwxr-xr-x 2 vagrant vagrant 4096 Nov 8 10:04 pruebaenlace2
vagrant@Nginx:~$ sudo chown -R root:root pruebaenlace2
vagrant@Nginx:~$ sudo systemctl restart nginx.service
Tarea 5: En todo el host virtual se debe redefinir los mensajes de error de objeto no encontrado y no permitido. Para el ello se crearan dos ficheros html dentro del directorio error. Entrega las modificaciones necesarias en la configuración y una comprobación del buen funcionamiento.
Añadimos lo siguientes:
1
2
3
4
5
6
7
8
9
10
error_page 404 /404.html;
location = /404.html {
root /srv/error;
internal;
}
error_page 403 /403.html;
location = /403.html {
root /srv/error;
internal;
}
Editamos la salida de error y añadimos un mensaje:
1
2
vagrant@Nginx:/srv/error$ ls
403.html 404.html
Pruebas:
Tarea 6: Añade al escenario Vagrant otra máquina conectada por una red interna al servidor. 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.
Creamos una máquina cliente en la misma red interna:
1
2
3
4
config.vm.box = "debian/buster64"
config.vm.hostname = "nginxcliente"
config.vm.network "private_network", ip: "192.168.100.2",
virtualbox__intnet: "redinterna"
Creamos los directorios que vamos a necesitar
1
2
3
4
vagrant@Nginx:/srv/www/departamentos$ sudo mkdir internet
vagrant@Nginx:/srv/www/departamentos$ sudo mkdir intranet
vagrant@Nginx:/srv/www/departamentos$ ls
index.html internet intranet
Le damos permisos:
1
vagrant@Nginx:/srv/www/departamentos$ sudo chown -R www-data:www-data /srv/www/departamentos/
Editamos el fichero de configuración de departamentos.conf:
1
2
3
4
5
6
7
8
location /intranet {
allow 192.168.100.0/24;
deny all;
}
location /internet {
allow 172.22.0.0/16;
deny all;
}
Cambiamos la tablas de enrutamiento:
1
2
vagrant@nginxcliente:~$ sudo ip r del default
vagrant@nginxcliente:~$ sudo ip r add default via 192.168.100.1
Comprobamos si funciona.
- Servidor:
- Cliente:
Tarea 7: 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.
1
2
vagrant@Nginx:~$ cat /etc/nginx/login/pass.txt
ernesto:$apr1$bUf1LGve$YeAayprz5Wsa6Te893rgu0
Editamos el fichero de configuración departamentos.conf
1
2
3
4
location /secreto {
auth_basic "Contenido Secreto Nginx";
auth_basic_user_file /etc/nginx/login/pass.txt ;
}
La contraseña se manda de forma cifrada pero es basica
Tarea 9: Vamos a combinar el control de acceso (tarea 6) y la autentificación (tareas 7 y 8), 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.
Vamos a modificar el fichero de configuración de departamentos:
1
2
3
4
5
6
7
location /secreto {
satisfy any;
allow 192.168.100.0/24;
deny all;
auth_basic "Contenido Secreto Nginx";
auth_basic_user_file /etc/nginx/login/pass.txt ;
}
Ahora desde el navegador nos pedirá la autenticación y desde el cliente de la red interna entrará directamente:
1
vagrant@nginxcliente:~$ w3m departamentos.iesgn.org/secreto