WPML not installed and activated.

Firewall dynamique pour linux

By spl on 6 mars 2009 in Côté serveur, Recette, Self
0
0

Ingrédients :

  • IpTables
  • DynDns
  • Firewall Builder

Je souhaite pouvoir me logguer en SSH sur mon serveur dédié via mes machines personnelles or mon adresse ip change au gré de mon fournisseur d’accès. J’ai donc souscrit un dynamic Dns pour identifier de manière unique et en permanence sur la toile ma machine personnelle.

Le problème est que IpTables évalue l’adresse ip des hosts au moment où la règle est créée et donc dés que celle ci change, elle permet à la machine qui a hérité de mon ancienne adresse ip de se connecter en ssh sur mon serveur et moi même, je suis dans l’incapacité d’accéder à mon serveur avec ma nouvelle adresse ip.

Voilà un moment que je cherchais une solution, et voilà comment je l’ai implémentée :

J’utilises Firewall Builder pour générer mon firewall dans /etc/fb/myfirewall.fw

  • Un shell script qui va détecter le changement d’ip et décider quoi faire :
#!/bin/bash
# filename: firewall-dynhosts.sh
#
# A script to reload a firewall each time dynamic dns host ip moves.
# Written by: Sébastien Pérès-Labourdette (http://itworks.blogdns.net)
# Released into public domain.
#

HOST=$1
HOSTFILE="/etc/dyndns/host-$HOST"
FIREWALLSCRIPT="/etc/fb/myfirewall.fw"

# check to make sure we have enough args passed.
if [ "${#@}" -ne "1" ]; then
    echo "$0 hostname"
    echo "You must supply a hostname to update in iptables."
    exit
fi

# lookup host name
IP=`/usr/bin/dig +short $HOST | /usr/bin/tail -n 1`
if [ "${#IP}" = "0" ]; then
    echo "Couldn't lookup hostname for $HOST, failed."
    exit
fi

OLDIP=""
if [ -a $HOSTFILE ]; then
    OLDIP=`cat $HOSTFILE`
else
    echo "Creating entry for $HOST"
    echo $IP>$HOSTFILE
    exit
fi

if [ "$IP" == "$OLDIP" ]; then
    echo "ip of $HOST did not change"
    exit
fi

echo "Ip has changed from #$OLDIP# to #$IP#"
ESC_OLDIP=`sed -e 's/\./\\\\./g' $HOSTFILE`
echo "Back up new ip."
echo $IP>$HOSTFILE
echo "Renewing firewall ..."
sed -i "s/$ESC_OLDIP/$IP/g" $FIREWALLSCRIPT
/bin/bash $FIREWALLSCRIPT
  • Un second script (/etc/dyndns/dynamic-firewall) qui va exécuter le premier pour tout les dynhosts
#!/bin/bash
/etc/dyndns/firewall-dynhosts.sh spl01.dyndns.net
/etc/dyndns/firewall-dynhosts.sh spl02.dyndns.net
/etc/dyndns/firewall-dynhosts.sh spl03.dyndns.net
  • NB : Ne pas oublier de chmoder nos 2 scripts
chmod +x /etc/dyndns/dynamic-firewall
chmod +x /etc/dyndns/firewall-dynhosts.sh
  • Et finalement une entrée cron (/etc/cron.d/dynamic-firewall) qui va assurer l’exécution toutes les 5 minutes du deuxième script
*/5 * * * * root /etc/dyndns/dynamic-firewall > /dev/null 2>&1

Me voilà tranquille.

spl

About the Author

splView all posts by spl
Loading Facebook Comments ...

0 Comments

Add comment

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

CommentLuv badge