Bonjour à tous,

Aujourd’hui on va voir comment autoriser l’accès à certaines ressources uniquement depuis son IP dynamique depuis NGINX et UFW.

Et vu que les IPV4 fixes sont encore un luxe pour les connexions des particuliers, on va voir comment gérer tout ça avec des adresses IP dynamiques 🙂

 

Configuration de NGINX :

Ici on va prendre l’exemple du blog et donc d’un site WordPress.

L’idée va être d’interdire l’accès aux ressources critiques en se laissant tout de même un accès privilégié.

 

Ouvrez votre vhost :

nano /etc/nginx/sites-enabled/abyssproject.vhost

 

Et ajoutez les lignes suivantes :

 

        location /wp-admin {
            allow 1.2.3.4;
            deny all;
        }

        location /xmlrpc.php {
            allow 1.2.3.4;
            deny all;
        }

 

Remplacez 1.2.3.4 par votre adresse IPV4 publique actuelle.

Le vhost complet est disponible ici : https://github.com/stylersnico/my-webserver/blob/master/etc/nginx/sites-enabled/abyssproject.vhost

 

Testez la configuration de NGINX avec la commande suivante :

nginx -t

 

Et si aucune erreur ne ressort, redémarrez :

systemctl restart nginx

 

Un visiteur qui ne se connecte pas depuis une adresse ip autorisée verra ceci :

 

 

Configuration de UFW :

On en a déjà parlé plusieurs fois sur le blog, mais, on va reprendre depuis le début pour que ça soit clair dans le cas d’un serveur web.

Installez UFW avec la commande suivante :

apt-get install ufw -y

 

Si vous utilisez IPV6 sur votre serveur, éditez le fichier suivant :

nano /etc/default/ufw

 

Et vérifiez que la ligne IPV6 est bien sur Yes :

IPV6=yes

 

Ensuite, désactivez le pare-feu :

ufw disable

 

Autorisez toutes les connexions sortantes et refusez toutes les connexions entrantes :

ufw default deny incoming
ufw default allow outgoing

 

 

Ouvrez déjà les ports nécessaires pour votre serveur web, à savoir les ports par défaut pour le HTTP et le HTTPS :

ufw allow 80
ufw allow 443

 

Maintenant, ouvrez le port 22 depuis votre adresse IP uniquement :

ufw allow from 1.2.3.4 to any port 22

 

Et activez enfin UFW :

ufw enable

 

Mise à jour de l’adresse IP automatiquement :

J’ai légèrement modifié un script trouvé sur StackExchange pour l’adapter à ce dont j’avais besoin : https://unix.stackexchange.com/questions/91701/ufw-allow-traffic-only-from-a-domain-with-dynamic-ip-address

 

Dans un premier temps, il vous faudra avoir un dyndns valide, si vous ne savez pas de quoi on parle, je vous renvoie vers l’article de Arowan : https://www.arowan.be/2016/05/07/dyndns-by-ovh/

 

Une fois que vous avez votre domaine fonctionnel, récupérez le script et installez-le :

cd /root/
wget https://raw.githubusercontent.com/stylersnico/acl-updater-for-dyndns/master/dinhost.sh
chmod +x dinhost.sh
echo "1.2.3.4" > /var/log/dinhost.log

 

Maintenant, testez que votre domaine renvoie la bonne adresse IP :

host votredomainedyndns | head -n1 | cut -f4 -d ' '

 

Et si ça vous renvoi quelque chose dans le genre c’est bon :

root@webhost:~# host dyn.dns | head -n1 | cut -f4 -d ' '
176.167.224.77

 

Maintenant, mettez à jour le script avec votre domaine :

sed -i 's/'dyn.host'/'votredomainedyndns'/g' /root/dinhost.sh

 

Et lancez-le :

./dinhost.sh

 

Ouvrez votre crontab :

crontab -e

 

Et ajoutez la ligne suivante :

* * * * * /root/dinhost.sh > /dev/null 2>&1

 

Adresse IP de secours :

Créez-vous un serveur OpenVPN chez un hébergeur de votre choix en suivant ceci : https://www.abyssproject.net/2015/06/creer-un-serveur-openvpn-sous-debian-7-ou-8/

 

Ensuite, vous pourrez ajouter l’adresse IPV4 de ce serveur en tant qu’adresse de secours dans toutes vos configurations et vous en servir comme adresse de secours en cas de soucis sur le DynDNS 🙂