Attention, cet article a plus d'une année d'ancienneté. Il est possible que les informations présentées ne soient plus à jour, spécialement dans le cadre d'un article technique.
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 🙂
Salute,
Sympa ! Si je peux me permettre :
– dyn.host et dinhost.log ?
– echo iptables have been updated devrait être changé par ufw has been updated
– service nginx restart par systemctl restart nginx
Tcho !
Salut,
Évidemment que tu peux te permettre, ce n’est pas bête, mais, va falloir que je trouve le temps de faire ça :/