Gestion des adresses Ip dynamiques avec Iptables
par guiguiabloc le 19 déc, 2008, sous linux, réseau, sécurité
Pour être honnête avec vous, j’avais pensé intitulé ce billet « Ouvrez, ouvrez la cage aux oiseaux… ».
Mais après avoir osé « PKI, PKI, oh ! PKI, PKI, ah! » sur l’air de « Rosalie », je me se suis dit que vous alliez sûrement vous poser de sérieuses questions sur ma santé mentale et surtout sur mes goûts musicaux
(bien que je n’ai rien de personnel contre Carlos et Pierre Perret)
Bref, donc le but de ce billet est de résoudre un problème fréquent.
Vous avez un beau serveur dédié Linux (ou un pote vous en prête un) et vous contrôler bien entendu dessus les accès réseau via Iptables.
D’ailleurs, vous utilisez peut-être même un superbe script déjà tout fait dans le genre de KHARON (comment cela je fais de la pub ???)
Vous disposez a votre domicile d’une adresse IP dynamique et bien entendu, pour fixer cela en dur dans Iptables, bah c’est la cata…
Vous jonglez donc avec Fail2ban et/ou des règles du style :
Iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
Voici donc une petite bidouille bien proprette pour insérer votre ip dynamique dans iptables (oublier les résolutions DNS en règles Iptables, cela ne marche pas…) et autoriser l’accès en SSH depuis votre ip dynamique.
Je suppose bien évidemment que vous utilisez déja un service comme DYNDNS ou une entrée de type DYNHOST chez OVH par exemple (ou autre hein, je suis pas sectaire).
Bref, un service permettant d’avoir un nom d’hôte pour votre ip dynamique et qui est mis à jour à intervalle régulier.
Tout d’abord, il faut créer une chaine que nous appelerons « mon_ip_maison » par exemple et l’insérer au début de la chaine INPUT d’iptables.
A rajouter donc dans votre script Iptables ou à la main comme ceci :
iptables -N mon_ip_maison iptables -I INPUT 1 -j mon_ip_maison
Reste à écrire le joli script de mise à jour que j’appellerais ici : Wesh_Gros_C_est_moi.sh
(euh vous pouvez changer le nom hein…)
#!/bin/bash # # variables generales dyndns=guiguiabloc.dyndns.com ipfile=/root/ipfile # Recuperation de l'ip IP=`/usr/bin/dig +short $dyndns | /usr/bin/tail -n 1` if [ "${#IP}" = "0" ]; then echo "Echec de la recuperation de l'ip" exit fi ANCIENNEIP="" if [ -a $ipfile ]; then ANCIENNEIP=`cat $ipfile` fi # on enregistrer la nouvelle ip echo $IP>$ipfile echo "Mise a jour d'iptables" if [ "${#ANCIENNEIP}" != "0" ]; then echo "Suppression de l'ancienne règle ($ANCIENNEIP)" /sbin/iptables -D mon_ip_maison -s $ANCIENNEIP/32 --dport 22 -j ACCEPT fi echo "Insertion de la nouvelle règle ($IP)" /sbin/iptables -A mon_ip_maison -s $IP/32 --dport 22 -j ACCEPT
Ne reste qu’a le lancer toutes les 10 minutes via la crontab :
*/10 * * * * /root/Wesh_Gros_C_est_moi.sh 2>&1
Magique
Vous trouverez le script de Dave Horner ICI
4 Commentaires pour ce billet
1 Trackback or Pingback for this entry
-
GuiguiAbloc, un blog qui merite d'être connu, technique, reseau, linux, système - linux - geek
janvier 20th, 2011 le 10:51[...] des adresses Ip dynamiques avec iptables : http://blog.guiguiabloc.fr/index.php/2008/12/19/gestion-des-adresses-ip-dynamiques-avec-iptables/ Ovh ip failover dans une machine virtuelle : [...]
juin 22nd, 2009 le 15:00
juste une petite erreur apres le /32 il faut ajouter « -p tcp » :
echo « Mise a jour d’iptables »
if [ "${#ANCIENNEIP}" != "0" ]; then
echo « Suppression de l’ancienne règle ($ANCIENNEIP) »
/sbin/iptables -D mon_ip_maison -s $ANCIENNEIP/32 -p tcp –dport 22 -j ACCEPT
fi
echo « Insertion de la nouvelle règle ($IP) »
/sbin/iptables -A mon_ip_maison -s $IP/32 -p tcp –dport 22 -j ACCEPT
sinon merci pour le script
juin 23rd, 2009 le 17:44
yep, bien vu
merci
février 21st, 2011 le 15:47
Bien l’astuce
Par contre c’est peut être une réflexion de parano mais si le serveur effectue une résolution de l’IP (dig) tous les x temps. Un pirate peut voir ça en écoutant le port DNS (je crois) et donc connaître le Dynhost de l’admin du serveur ?
Alors que si il écoute le port 22 je ne crois pas qu’il puisse connaitre l’IP de l’admin du serveur puisque la communication est crypté ?
Il vaut peut être mieux utiliser ta règle :
Iptables -I INPUT -p tcp –dport 22 -i eth0 -m state –state NEW -m recent –update –seconds 60
–hitcount 4 -j DROP
et couplé à du port knocking ?
février 21st, 2011 le 18:55
Que ce soit en sniffant les requètes DNS en provenance du serveur ou en sniffant le port 22, le « pirate » connaitra de toutes facons l’ip de l’admin du serveur. (c’est la communication qui est cryptée, l’échange tcp au début est en clair, regarde un tcpdump).
La technique de ce billet n’est pas fait pour être une solution de protection du port ssh mais uniquement pour mettre a jour une entrée dynamique. Bien évidemment le reste des options iptables doivent être appliquer comme dans toutes protection du service 22.