Nginx: permitir acceso a una ip dinámica

A veces queremos restringir el acceso a una web o una carpeta sólo a ciertas ips, pero nos encontramos con el problema de que esas ips son de conexiones a internet con ips dinámicas como la típica que podemos tener en casa o en el móvil.

Lo primero que hay que hacer es asociar esas ips a un servicio de dns dinámico como el que da dyndns, noip, duckdns o freedns

Una vez que ya tenemos el servicio de dns dinámico instalado en el ordenador o conexión a internet que vamos a usar tenemos que crear un script en el servidor para sacar esa ip. algo así:

vim /scripts/ips_dinamicas_nginx.sh
#!/bin/bash
echo "Allow "$(dig +short minemonico.noip.com)";" > /etc/nginx/sites-available/ips_dynamicas.conf

De esta forma cada vez que se ejecute este scrip nos guardará en /etc/nginx/sites-available/ips_dynamicas.conf «Allow nuestra_ip;»

La asignamos permisos de ejecución:

chmod 755 /scripts/ips_dinamicas_nginx.sh

Añadimos este script al cron para que se ejecute cada 5 minutos

*/5 * * * * /scripts/ips_dinamicas_nginx.sh

Y sólo nos queda añadir el fichero donde damos acceso a nuestra ip al location correspondiente

location / {
        include /etc/nginx/sites-available/ips_dynamicas.conf; 
        deny all; #denegamos el acceso al resto de ips
}