Autorisation d'accès au Lan depuis une ip dynamique

Forum traitant de la distribution sécurisée montante nommée IP cop et basée sur la distribution Smoothwall. C'est à l'heure actuelle le forum le plus actif du site.

Modérateur: modos Ixus

Autorisation d'accès au Lan depuis une ip dynamique

Messagepar bit8tr » 16 Fév 2006 14:28

Bonjour,

J'utilise avec la plus grande satisfaction le script de Juliette (voir ici: http://www.fr.ixus.net/modules.php?name=Content&pa=showpage&pid=107) depuis plusieurs semaines.
Cependant, son utilisation n'autorise l'identification de DNS Dynamiques qu'au niveau des règles de forwarding du pare-feu.
Comme je fais tourner des process adhoc sur mon ipcop qui doivent être accédés par des dns dynamiques, j'ai adapté son script afin de prendre en compte mon besoin. (voir mon post ici :
http://forums.fr.ixus.net/viewtopic.php?t=31633&start=0&postdays=0&postorder=asc&highlight=)

Pour ceux que ça pourrait intéresser, voici les adaptations:



Ce script remplace le contenu du fichier dyndns. Pour la procédure de mise en place, je vous invite à vous référer au tutorial existant.

Code: Tout sélectionner
#!/bin/sh
#
# version 2.0 du script dyndns
# auteur : Bit8tr
# Modification du script de juliette michaux (1.3) pour étendre la résolution des dns dynamiques
# aux accès externes d'IPCOP
#
# Date de création : le 10 février 2005
#
# Ce script sert a remettre a jour la table config du firewall et des accès externes.
# Ces tables sont dans le fichier /var/ipcop/portfw/config et /var/ipcop/xtaccess/config
#
# Dans les regles de firewall, a chaque adresse ip a mettre a jour, un commentaire speciale
# a ete insere avant le nom de domaine : **DDNS**. Par ex : **DDNS**www.google.fr
#
# Nous utiliserons la même méthode que les règles de gestion du port forwarding
# pour les accès externes, en insérant un commentaire speciale avant le nom de domaine : **DDNS**.
# dans le champ remarque Par ex : **DDNS**www.google.fr
#
# Quand le script parcourt la config et voit ces commentaires, il recherche l'ip correspondante
# au nom de domaine et insere cette nouvelle adresse ip  a la place de l'ancienne.
#
# Ainsi, si un domaine change d'ip tous les jours, ce script permet de renseigner le
# firewall de facon transparente pour l'utilisateur
#
# Ce script est une deuxieme version de dyndns, mais au lieu d'utiliser la commande ping
# pour trouver l'adresse ip correspondante au nom de domaine, on utilise la commande
# nslookup.cgi. Ce script est un script perl qui se trouve dans le repertoire
# /home/httpd/cgi-bin. Il prend en argument argv[0] le nom de domaine et retourne
# l'adresse ip correspondante.

# Ceci rend l'execution beaucoup plus rapide et permet de faire tourner l'application
# sur la crontab toutes les minutes au lieu de cinq, avec le ping.

# Creation des variables du chemin du fichier de config du fire-wall et des accès externes
cheminfw="/var/ipcop/portfw/"
cheminae="/var/ipcop/xtaccess/"

# Copie du fichier des config des fichiers temporaires ficIN
cp $cheminfw"config" $cheminfw"ficIN"
cp $cheminae"config" $cheminae"ficIN"

# Changement du mode des fichiers de config pour les interdire en ecriture pendant la procedure
chmod 555 $cheminfw"config"
chmod 555 $cheminae"config"

# Changement du mode des fichiers ficIn pour pouvoir travailler dessus
chmod 744 $cheminfw"ficIN"
chmod 744 $cheminae"ficIN"

# La boucle while va permettre de lire une ligne du fichier de config du firewall,
# de l'analyser, et de la reecrire dans le fichier ficOUT

cat $cheminfw"ficIN" | while read lignefw

do
  remfw=`echo $lignefw |awk -F "," '{print $10}'`

  if test -z "$remfw"
    then
      #on est dans le cas ou il n'y a pas de remarque sur la ligne de firewall
      #on recopie donc la ligne tel quel
      echo $lignefw >> $cheminfw"ficOUT"

    else
      #on a une remarque dans le fichier de config
      domainefw=`echo $remfw | awk -F "*" '{print $5}'`

      if test -z "$domainefw"
        then
          #la remarque ne porte pas le symbole cle **DDNS**
          #on ne fait donc aucun traitement et on la reecrit tel quel
          echo $lignefw >> $cheminfw"ficOUT"
        else
          #on a une remarque dans le fichier de config
          domainefw=`echo $remfw | awk -F "*" '{print $5}'`
       
          if test -z "$domainefw"
            then
              #la remarque ne porte pas le symbole cle **DDNS**
              #on ne fait donc aucun traitement et on la reecrit tel quel
              echo $lignefw >> $cheminfw"ficOUT"
         
            else
              #la remarque porte le symbole **DDNS**, on doit l'analyser
              #on cherche la nouvelle ip a l'aide de la commande nslookup.cgi
              ipnewfw=`/home/httpd/cgi-bin/nslookup.cgi $domainefw`
           
              #echo "ipnewfw "$ipnewfw
              #on reprend le debut de la ligne du fichier config a ne pas modifier
              argfw1=`echo $lignefw | awk -F "," '{print $1}'`
              argfw2=`echo $lignefw | awk -F "," '{print $2}'`
              argfw3=`echo $lignefw | awk -F "," '{print $3}'`
              argfw4=`echo $lignefw | awk -F "," '{print $4}'`
              argfw5=`echo $lignefw | awk -F "," '{print $5}'`
              argfw6=`echo $lignefw | awk -F "," '{print $6}'`
              argfw7=`echo $lignefw | awk -F "," '{print $7}'`
              argfw8=`echo $lignefw | awk -F "," '{print $8}'`
           
              #on ecrit le debut de ligne, l'adresse ip nouvelle et la remarque
              #a la suite du fichier ficOUT
              echo $argfw1,$argfw2,$argfw3,$argfw4,$argfw5,$argfw6,$argfw7,$argfw8,$ipnewfw,$remfw >> $cheminfw"ficOUT"
          fi
      fi
  fi
done

# La boucle while va permettre de lire une ligne du fichier de config des accès externes,
# de l'analyser, et de la reecrire dans le fichier ficOUT

cat $cheminae"ficIN" | while read ligneae

do
  remae=`echo $ligneae |awk -F "," '{print $6}'`

  if test -z "$remae"
    then
      #on est dans le cas ou il n'y a pas de remarque sur la ligne des accès externes
      #on recopie donc la ligne tel quel
      echo $ligneae >> $cheminae"ficOUT"

    else
      #on a une remarque dans le fichier de config
      domaineae=`echo $remae | awk -F "*" '{print $5}'`

      if test -z "$domaineae"
        then
          #la remarque ne porte pas le symbole cle **DDNS**
          #on ne fait donc aucun traitement et on la reecrit tel quel
          echo $ligneae >> $cheminae"ficOUT"
       
        else
          #on a une remarque dans le fichier de config
          domaineae=`echo $remae | awk -F "*" '{print $5}'`

          if test -z "$domaineae"
            then
              #la remarque ne porte pas le symbole cle **DDNS**
              #on ne fait donc aucun traitement et on la reecrit tel quel
              echo $ligneae >> $cheminae"ficOUT"

            else
              #la remarque porte le symbole **DDNS**, on doit l'analyser
              #on cherche la nouvelle ip a l'aide de la commande nslookup.cgi
              ipnewae=`/home/httpd/cgi-bin/nslookup.cgi $domaineae`

              #on reprend le debut de la ligne du fichier config a ne pas modifier
              argae1=`echo $ligneae | awk -F "," '{print $1}'`
              argae3=`echo $ligneae | awk -F "," '{print $3}'`
              argae4=`echo $ligneae | awk -F "," '{print $4}'`
              argae5=`echo $ligneae | awk -F "," '{print $5}'`

              #on ecrit le debut de ligne, l'adresse ip nouvelle et la remarque
              #a la suite du fichier ficOUT
              echo $argae1,$ipnewae,$argae3,$argae4,$argae5,$remae >> $cheminae"ficOUT"
          fi
      fi       
  fi
done

#calcul du nombre de difference entre le fichier ficIN et ficOUT dans les 2 répertoires
difw=`diff $cheminfw"ficIN" $cheminfw"ficOUT" | grep [0-9]c[0-9] | wc -l`
diae=`diff $cheminae"ficIN" $cheminae"ficOUT" | grep [0-9]c[0-9] | wc -l`

#calcul du nombre de remarque contenant **DDNS**
ddfw=`cat $cheminfw"ficIN" | grep \*\*DDNS\*\* | wc -l`
ddae=`cat $cheminae"ficIN" | grep \*\*DDNS\*\* | wc -l`

#Traitement des différences pour les regles du firewall
if test $difw -le $ddfw
  then
    #on est dans le cas ou le nombre de changement est inferieur ou egal au nombre
    #d'adresse ip verifier : ce qui signifie que le script c'est bien passe
    #on detruit le fichier ficIn maintenant inutile
    rm $cheminfw"ficIN"

    #on remplace le fichier config par le fichier ficOUT
    mv $cheminfw"ficOUT" $cheminfw"config"
    chmod 766 $cheminfw"config"

    #on active les changements
    /usr/local/bin/setportfw

    #echo "tout c'est bien passe"" nb diff:"$difw" nb ddns:$ddfw"

  else
    #on a un nombre de changement beaucoup trop grand
    #on prefere ne rien changer
    rm $cheminfw"ficIN"
    rm $cheminfw"ficOUT"
    chmod 766 $cheminfw"config"
   
    #echo "une erreur s'est produite"" nb diff:"$difw" nb ddns:$ddfw"
fi

#Traitement des différences pour les regles des acces externes
if test $diae -le $ddae
  then
    #on est dans le cas ou le nombre de changement est inferieur ou egal au nombre
    #d'adresse ip verifier : ce qui signifie que le script c'est bien passe
    #on detruit le fichier ficIn maintenant inutile
    rm $cheminae"ficIN"

    #on remplace le fichier config par le fichier ficOUT
    mv $cheminae"ficOUT" $cheminae"config"
    chmod 766 $cheminae"config"

    #on active les changements
    /usr/local/bin/setxtaccess

    #echo "tout c'est bien passe"" nb diff:"$diae" nb ddns:$ddae"

else
    #on a un nombre de changement beaucoup trop grand
    #on prefere ne rien changer
    rm $cheminae"ficIN"
    rm $cheminae"ficOUT"
    chmod 766 $cheminae"config"

    #echo "une erreur s'est produite"" nb diff:"$diae" nb ddns:$ddae"
fi

bit8tr
Matelot
Matelot
 
Messages: 10
Inscrit le: 14 Jan 2006 23:51

Retour vers IPCop

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité

cron