Posts Servidor Web Nginx
Post
Cancel

Servidor Web Nginx

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

This post is licensed under CC BY 4.0 by the author.