Quelques outils open-source pour administrer son réseau
Date: 2/06/2008 | Catégories: Open-source,Reseau | Tags:
De nos jours, l'administration d'un réseau nécessite une bonne connaissance des couches Ethernet (OSI n°2), IP (OSI n°3) et TCP/UDP (OSI n°4), mais pas seulement... En effet, l'adage qui dit que "l'on reconnaît un bon ouvrier à ces outils", est aussi vrai dans le domaine informatique. Je vous propose donc dans ce billet une liste non exhaustive de logiciels open-source pour s'acquitter, au mieux, de cette lourde tache.
J'écarterai de ce billet les outils de monitoring réseau tel que Nagios, Cacti, MRTG dont je parle assez souvent dans ce blog et je me focaliserai plutôt sur les logiciels "couteaux Suisse" permettant de "déboguer" une situation donnée:
- ifconfig
- netstat
- dig
- tcpdump
- iftop
- iperf
- nmap
- ... et les autres... (avec 1 backlink à gagner pour les propositions les plus intéressantes, voir en bas du billet)
ifconfig
Commençons par le commencement. ifconfig est une commande universelle pour obtenir les informations suivantes sur une les interfaces réseaux d'une machine:
- Nom de l'interface réseau
Exemple: eth0 - Media (ou caractéristique de la liaison Ethernet)
Exemple: 1000baseT (réseau Gigabit) - Adresse MAC (c'est à dire l'adresse Ethernet, ou l'adresse de niveau 2)
Exemple: 00:17:f2:c5:43:0f - Adresse IP (ou adresse de niveau 3)
Exemple: 172.30.2.131 (pour une adresse IPv4)
Exemple: fe80::217:f2ff:fec6:410f (pour une adresse IPv6) - Masque de réseau
Exemple: 0xffffff00 ou 255.255.255.0 - Adresse de broadcast (adresse IP à utiliser pour parler à toutes les machines du réseau en même temps)
Exemple: 172.30.2.255
On peut (selon les Operating System) trouver d'autres informations comme la taille du MTU (taille maximale des paquets Ethernet), la liste des médias supportés, le statu actuel de l'interface (active ou non).
L'utilisation standard se fait par la commande suivante:
# ifconfig -a
> Pour une liste de toutes les interfaces réseaux présentes sur la machine
# ifconfig interface
> Fournie les informations pour l'interface spécifiée en paramètre
netstat
Une fois l'adressage IP de votre réseau connu, la commande netstat va vous venir en aide pour déterminer comment les paquets IP vont être "routés".
Cette commande comporte un nombre d'options est très important (un petit coups de "man netstat" devrait vous en convaincre...).
Pour obtenir la liste des routes IP (IPv4 et IPv6), vous pouvez utiliser la commande suivante:
# netstat -nr
Le résultat se présente sous la forme d'une table. La première colonne représente la destination (c'est à dire le réseau à atteindre). La seconde est la passerelle IP (ou Gateway en Anglais) à utiliser. Les autres colonnes peuvent afficher le nom de l'interface réseau à utiliser, le nombre de fois que cette route a été emprunté...
Par exemple, la ligne suivante:
default 172.30.3.254 UGSc 52 12 en0
dit que la route par défaut est la passerelle 172.30.3.254 et qu'elle est accéssible via l'interface en0. En clair, si un paquet IP est à destination d'un réseau inconnu de la table de routage, le paquet sera envoyé à la machine d'adresse IPS 172.30.3.254 qui se chargera de le véhiculer à bon port.
Si votre réseau supporte le multicast, l'option -g devrait vous être utile en affichant les tables de routage multicast:
# netstat -g
/etc/resolv.conf & dig
La résolution de nom (c'est à dire le mécanisme permettant de faire la correspondance entre un nom de machine et une adresse IP, et inversement) est, sous les systèmes basés sur Unix, configuré dans le fichier /etc/resolv.conf. Une simple commande cat sur ce fichier va vous donner les informations suivantes:
- Nom du domaine
Exemple: monbodomaine.com - Adresses IP des serveurs DNS a utiliser (une adresse IP par serveur et par ligne)
Exemple: 172.30.3.254
Voici donc le fichier resolv.conf correspondant :
# cat /etc/resolv.conf
domain monbodomaine.com
nameserver 172.30.3.254
Le compagnon idéal de ce fichier de configuration pour la validation DNS de votre réseau est l'utilitaire dig. Ce dernier, assez récent, est là pour prendre la relève de la bonne vieille commande nslookup.
Par exemple, pour connaître la liste des serveurs DNS d'un réseau (pas forcement le votre...) vous pouvez utiliser les options suivantes:
# dig monbodomaine.com ns
...
;; QUESTION SECTION:
;monbodomaine.com. IN NS
;; ANSWER SECTION:
monbodomaine.com. 172800 IN NS ns.monbodomaine.com.
;; ADDITIONAL SECTION:
monbodomaine.com. 172800 IN A 172.30.3.254
...
On pose donc la question au serveur DNS se trouvant dans le fichier /etc/resolv.conf (mais il est possible d'intéroger n'importe quel serveur DNS en utilisant l'option @adresse-ip-serveur-dns): quels sont les serveurs DNS (NS) du domaine monbodomaine.com. Le serveur répond: ns.monbodomaine.com et 172.30.3.254.
On peut aller plus loin en demandant par exemple la liste des serveur de messagerie d'un réseau:
# dig monbodomaine.com mx
tcpdump
Avec ces trois premiers utilitaires (ifconfig, netstat et dig), vous devez maintenant avoir une connaissance plus ou moins précise de la configuration de votre réseau. tcpdump permet de voir et de capturer les paquets qui y transitent. Pour cela, il est indispensable de ce mettre sur un noeud du réseau ou l'on va voir le maximum de chose. En effet avec "les réseaux switchés" actuels, une simple machine cliente ne voit que le trafic qui lui est destiné et celui de broadcast (ce qui n'est pas plus mal niveau sécurité...). Donc une fois ce noeud identifié (c'est souvent une machine faisant office de routeur central), il ne reste plus qu'a y lancer la commande tcpdump.
Cette première commande va lancer tcpdump sur 'linterface eth0 de votre machine et afficher la liste des paquets IP qu'elle voit passer, sans faire de résolution de nom (-n).
# tcpdump -i eth0 -n
Une des lignes résultant de cette commande pourra être:
16:54:49.465168 IP 172.30.2.131.50724 > 172.30.3.254.443
Le paquet d'adresse IP source 172.30.2.131 et de destination 172.30.3.254 sur le 443 (HTTPs) vient de transiter par l'interface eth0.
Pour avoir plus d'informations pour pouvez ajouter l'option -v. Le résultat sera alors le suivant:
16:56:17.033836 IP (tos 0x0, ttl 64, id 19599, offset 0, flags [DF], proto TCP (6), length 1190) 172.30.3.254.443 > 172.30.2.131.50728: P 7379:8517(1138) ack 838 win 1716 <nop,nop,timestamp 370920361 368797944>
Ce billet n'ayant pas pour but de vous former sur tcpdump, je vous conseille la lecture des liens suivants:
iftop
Iftop permet d'afficher à l'écran la liste des connexions IP générant les débits les plus importants. Ce logiciel est particulièrement utile quand il est lancé sur un routeur d'accès à Internet (ou routeur WAN), il est alors possible d'avoir en un coup d'oeil les flux les plus consommateurs de bande passante...
iperf
Iperf est un outil que j'utilise régulièrement pour tester mon réseau. Ce logiciel, de type client/serveur, permet de générer des paquets IP sur un réseau et permet simplement d'effectuer les taches suivantes entre deux points du réseau:
- tester les règles d'un Firewall ou d'un routeur filtrant (bien qu'on puisse lui préférer nmap pour ce besoin)
- calculer le débit moyen, minimum et maximum sur une période donnée
- évaluation de la qualité de la liaison (latence, gigue et paquets perdus)
Par exemple pour faire un test de de charge TCP entre deux machines C et S, il suffit de lancer les commandes suivantes:
Sur la machine S d'adresse IP 192.168.0.1:
# iperf -s
Puis, sur la machine C:
# iperf -c 192.168.0.1
Le résultat sera affiché 10 secondes plus tard (c'est le temps par défaut mais il est configurable) et affichera le débit réel IP à l'instant t entre C et S.
Iperf permet de configurer assez finement les paquets IP utilisés pour ces tests, je vous propose, pour en apprendre d'avantage, de lire les billets suivants:
Il existe également une interface graphique écrite en Java pour facilité le lancement de Iperf (sans avoir à connaître toutes les options). Ce programme s'appelle XJperf.
En ce qui concerne le calcul de la gigue d'un réseau, j'utilise égalment un logiciel open-source maison nommé SJitter. Il fonctionne sur le même principe que Iperf (c'est à dire que c'est un client serveur). Vous pouvez le télécharger ici.
nmap
nmap est un outil fort utile pour tester quel ports sont ouverts et accessibles sur une machine donnée. Contrairement à iperf, nmap n'a besoin que d'une partie "cliente". Il utilise les messages (ICMP et autres) renvoyées par le réseau pour analyser l'état des ports TCP ou UDP.
Vous pouvez trouver ici une introduction à nmap.
et les autres...
Merci à Yann, Pec, Jahman, Borkmadjai, Dup, Nookie et Pischack qui ont posté un commentaire pour nous faire découvrir de nouveaux utilitaires. Comme convenu, voici une liste:
- ping: c'est clairement l'outil de base pour tester un réseau (télément évident que je ne l'avais pas mentionné...;))
- arping: une variante de ping mais qui fonctionne avec des trames ARP et non ICMP
- traceroute: là aussi un grand classique pour savoir comment les paquets IP sont routés.
- tcptraceroute: un bon complément à traceroute si le protocole ICMP est filtré par votre réseau. En effet, cet utilitaire se base sur le protocole TCP.
- ettercap: un outil bien connu des hackers pour sniffer ce qui se passe sur un réseau.
- jnettop: un clone de iftop
- arpwatch: un très bon utilitaire pour découvrir les machines présentes sur un réseau en écoutant les requêtes ARP
J'imagine que vous utilisez d'autres outils open-source du même acabits ? si oui merci de poster un petit commentaire pour en en faire profiter la communauté ;).