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