vendredi 10 février 2012

Grapher sous Cacti le nombre de Sessions VPN d'un Fortigate

Nous allons tracer sous Cacti le nombre de sessions VPN d'un Fortinet Fortigate 800.
Cacti est un outil permettant d'afficher sur des graphes des valeurs extraites d'éléments réseau ou de serveurs. On supervise ainsi ses équipements et facilite la prévision/résolution d'incidents.

Fortigate est une plateforme de sécurité de l'éditeur Fortinet.
http://www.fortinet.com/products/fortigate/

Configuration de Cacti :
La documentation de Cacti explique très bien la méthode pour tracer des graphes a partir de scripts personalisés ici : http://docs.cacti.net/manual:087:3a_advanced_topics.1_data_input_methods#data_input_methods

et pour un script à plusieurs sorties il faut forger la sortie de cette manière :
http://www.cacti.net/downloads/docs/html/making_scripts_work_with_cacti.html

Edit 05/03/2012 :
Faire Data Input Method : ajouter les argument/sorties du script
Data Template : indique quels sont les paramètres variables
Data Source : Specifier le host et les paramètre
Device : Graph List : Indiquer quel Data Source utiliser.

Script :

La MIB SNMP du Fortinet ne donne pas directement l'information sur le nombre de tunnels VPN (IPSec dans mon cas). En revanche, il donne les tunnels actifs. On va donc compter le nombre d’occurrences d'apparition des tunnels.

En gros, le script se comporte de la manière suivante:
- récupération des paramètres et du motif de MIB recherché (pour nous ce sera le Vpn),
- snmpwalk pour parcourir la MIB,
- grep avec l'option -c pour compter le nombre d'occurences du motif.

Le script retourne un entier qui sera utilisé par cacti.
#!/bin/bash
#nb_occur_motif.sh
#Script retournant le nombre d'occurences de la MIB d'un fortinet
#Ecrit sous license GPLv3
#Plus d'informations : https://www.gnu.org/licenses/gpl.html
scrpt=${0##*/} # script name
#usage
if [[ "$#" -ne 3 ]]; then
    echo "#################################################"
    echo "# "
    echo "# $scrpt <Hostname> <Community> <motif>"
    echo "# "
    echo "# Retourne le nombre d'occurences du motif"
    echo "# dans le cas d'un equipement Fortigate"
    echo "# "
    echo "#################################################"
    exit
fi
HOST=$1
CNAME=$2
MOTIF=$3
VERSION="2c"
FORTINET=".1.3.6.1.4.1.12356.9"
OID=${FORTINET}${MOTIF}
#echo "snmpwalk -v $VERSION -c $CNAME $HOST $OID | wc -l"
snmpwalk -v $VERSION -c $CNAME $HOST $OID | wc -l
Le motif:

Il suffit ensuite de rentrer un motif correspondant au bon OID.
Fortigate 800 3.00-b0568(MR5 Patch 3) : ".4.1.1" (celle qui se trouve dans la doc d'administration du fortinet)
Fortigate 800 3.00,build0247,060413 : ".1.1.1"
EDIT (21/02/2012) : en comptant le nombre d’occurrences avec snmpwalk de l'OID  .1.3.6.1.4.1.12356.9.4.1.1, on compte seulement le nombre de tunnels configurés, et non le nombre de sessions actives.
Il faut faire de la même manière, mais compter le nombre de 1 (pour les tunnels up) et de 2 (pour les tunnels down) de l'OID .1.3.6.1.4.1.12356.9.4.1.20. J'ai mis au point un script palliatif pour le moment, mais je préférerai ne faire qu'un snmpwalk pour économiser les ressources réseau, et donc utiliser un awk. Je le mettrai dès qu'il sera prêt.
J'en profite d'ailleurs pour sortir deux valeurs du script : le nombre de tunnels UP et Total.



Script palliatif (seulement pour les motifs 4.1.20) :


#!/bin/bash
#nb_occur_motif.sh
#Script retournant le nombre d'occurences de la MIB d'un fortinet
#Ecrit sous license GPLv3
#Plus d'informations : https://www.gnu.org/licenses/gpl.html
scrpt=${0##*/} # script name
#usage
if [[ "$#" -ne 3 ]]; then
echo "#################################################"
echo "# "
echo "# $scrpt <Hostname> <Community> <motif>"
echo "# "
echo "# Retourne le nombre d'occurences du motif"
echo "# dans le cas d'un equipement Fortigate"
echo "# "
echo "#################################################"
exit
fi
HOST=$1
CNAME=$2
MOTIF=$3
VERSION="2c"
FORTINET=".1.3.6.1.4.1.12356.9"
OID=${FORTINET}${MOTIF}
#echo "snmpwalk -v $VERSION -c $CNAME $HOST $OID | wc -l"
NBUP=`snmpwalk -v $VERSION -c $CNAME $HOST $OID | grep -i ": 1" | wc -l`
NBTOT=`snmpwalk -v $VERSION -c $CNAME $HOST $OID | grep -i ": " | wc -l`
#echo $NBUP
#echo $NBTOT
echo "<nbup>:<$NBUP> <nbtot>:<$NBTOT>"


Conclusion :

A vos graphes !

samedi 4 février 2012

EAP-SIM sur Freemobile et Android

J'ai voulu configurer mon HTC tourant sur Android avec une configuration en EAP-SIM.
En regardant les paramètres, je n'ai pas trouvé ce mode de configuration dans Cyanogenmod 7. En fouillant un peu, voilà ce que j'ai trouvé.

Qu'est-ce qu'EAP-SIM ?
Une page Wikipedia sera plus précis que moi.
Page en francais (peu d'explications) : https://fr.wikipedia.org/wiki/EAP-SIM#EAP-SIM
Page en anglais : https://en.wikipedia.org/wiki/EAP-SIM

En gros, c'est un mécanisme d'authentification utilisant les données de la carte SIM en place d'un login/password ou certificat.
Tout est décrit plus en détails dans la RFC 4186.


Freemobile et EAP-SIM
Freemobile permet via EAP-SIM de se connecter automatiquement au réseau 3G correspondant (Free ou Orange, pour le moment) mais aussi sur les bornes Wifi.
Cela est pour répondre à un problème de coût, la 3G étant plus chère que le Wifi :)
Cela vous permettra de faire de l'itinérance sur le réseau Free et Orange, mais pas sur les réseaux sur lesquels vous auriez de la sur-facturation (en zone frontalière par exemple).

Exemple : Vous êtes chez vous, et votre téléphone se connectera automatiquement sur le réseau Wifi 'freephonie' pour passer vos data ou vos appels. Vous êtes en zone frontalière, l'activation ou non des datas se réglera correctement.

EAP-SIM et Android
En cherchant sur le net, j'ai trouvé que le noyau d'Android ne permet pas pour le moment d'utiliser EAP-SIM, mais wpa_supplicant est prêt (http://hostap.epitest.fi/wpa_supplicant/).
Pour rappel, wpa_supplicant est un mécanisme de sécurité sans fil (https://fr.wikipedia.org/wiki/Wpa_supplicant).

Cyanogenmod implémente wpa_supplicant (https://github.com/CyanogenMod/android_external_wpa_supplicant) et donc EAP-SIM, mais il semblerait que ce soit dans Android que le mécanisme d'accès à la carte SIM fasse défaut (https://code.google.com/p/android/issues/detail?id=9329#c33).

En revanche, le Samsung Galaxy SII (vendu par Free mobile, sous Android) supporte l'EAP-SIM, mais cela proviendrait de Samsung et non d'Android :( Dommage pour les possesseurs d'HTC (pour le moment).

Conclusion
On attend qu'Android l'implémente nativement :D
On peut utiliser cette application donnée par Freemobile pour palier ce problème :
https://market.android.com/details?id=fr.freemobile.android.mobileconfig

Pour cet article, je me suis parti de ce thread (http://forum.frandroid.com/topic/87892-free-mobile-et-eap-sim-avec-cyanogenmod-7/), je remercie les gens y ayant contribué :)