Skip to main content

Réseau sous Linux

La configuration du réseau peut se faire en ligne de commande et il est possible d'intervenir directement dans les fichiers de configuration.

Interfaces Ethernet

ip : la commande linux pour gérer son interface réseau

Un petit mémo sur l’utilisation de la commande IP pour attribuer une adresse IP static, une passerelle par défaut, activation/désactivation d’une interface réseau, etc…, sous GNU/Linux.

Iproute2 le remplaçant de net-tools

Effectivement, l’utilisation des outils venant du paquet net-tools (ifconfig, arp, mii-tools,etc...) est devenue obsolète et leur utilisation est même dépréciée sur les distributions GNU/Linux récentes. Dorénavant, depuis un certains temps c’est le paquet iproute2 qui est installé par défaut pour la gestion du réseau sous GNU/linux, notamment avec l’aide de la commande IP.

toutes les commandes décrites dans l’article sont exécutées en tant que root et l’interface réseau choisie pour les exemples est eth0

Comment attribuer une adresse IPv4 sur une interface réseau

Deux méthodes : 

  • ifconfig :ifconfig eth0 192.168.1.5 netmask 255.255.255.0

  • ip: ip addr add 192.168.1.5/24 dev eth0

ne pas oublier de redémarrer le service pour rendre la modification effective service networking restart

Comment connaître son adresse IP sur toutes les interfaces réseau

Avant, avec la commande ifconfig

exemple

Maintenant avec la commande ip 

exemple : 

ip -4 -o addr show

1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever

2: eth0    inet 192.168.1.5/24 brd 192.168.1.255 scope global eth0\       valid_lft forever preferred_lft forever

les options utilisées :

-4 : pour n’afficher que les adresses IPv4
-o : le résultat sur une seule ligne

-c pour la couleur

Autres commandes utiles

  • Supprimer une adresse IP sur une interfacé réseau : ip addr del 192.168.1.5/24 dev eth0
  • Comment activer une interface réseau ip link set eth0 up
  • Comment désactiver une interface réseau ip link set eth0 down
  • Comment ajouter une passerelle par défaut (gateway) ip route add default via 192.168.1.1

Fichiers de configuration 

Ces fichiers permettent, entre autres, de conserver sur le poste une configuration réseau. Comme tous les fichiers de configuration, on les trouve dans le répertoire /etc. On peut ajouter des commentaires dans un fichier de configuration : ils doivent être précédés du signe "#'


/etc/hostname : nom de la machine dans le domaine. 

hostname renvoie le nom de la machine.

hostname nom permet d'attribuer un autre nom à la machine.


/etc/hosts    table de correspondance des adresses IP des machines et de leur nom d'hôtes. (utile si il n'y a pas de serveur DNS)
127.0.0.1           localhost 
10.221.203.11        p11.btsinfo.fr      

Dans /etc/host.conf, la ligne order hosts, bind indique que chaque machine recherche les hôtes dans le fichier /etc/hosts, puis dans le serveur de nom (bind sous Linux). 

multi on indique qu'une machine peut avoir plusieurs adresses IP (dans le cas de multiples interfaces réseaux). 



Fichier de configuration des interfaces réseaux :/etc/network/interfaces

#exemple

eth0      Link encap:Ethernet  HWaddr d4:85:64:9f:9e:fe  
          inet addr:192.168.1.5  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::d685:64ff:fe9f:9efe/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1213543 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2762 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:113798318 (113.7 MB)  TX bytes:517089 (517.0 KB)
          Interrupt:19 Memory:f0000000-f0020000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1062 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1062 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:222120 (222.1 KB)  TX bytes:222120 (222.1 KB)

On peut mettre jusqu'à 3 serveurs de noms 

 

Commandes utiles

netstat

La commande netstat est un complément du scannage de port ; elle permet de tester la configuration du réseau, visualiser l'état des connexions, établir des statistiques, notamment pour surveiller les serveurs. Elle existe aussi sur Windows.


Liste des paramètres utilisables avec netstat :

  • -a afficher toutes les informations sur l'état des connexions,

  • -t informations sur les sockets TCP,

  • -u informations sur les sockets UDP,

  • -i affichage des statistiques,

  • -c rafraîchissement périodique de l'état du réseau,

  • -n affichage des informations en mode numérique sur l'état des connexions,

  • -p affichage du pid,

  • -e affichage des utilisateurs

  • -r affichage des tables de routage.


Affichage et état des tables de routage avec netstat -r
# netstat -nr

Table de routage IP du noyau

Destination     Passerelle      Genmask         Indic   MSS Fenêtre irtt Iface
default         192.168.1.1     0.0.0.0         UG        0 0          0 wlan0
192.168.1.0     *               255.255.255.0   U         0 0          0 wlan0

Explications sur la commande netstat -r :

Destination: Adresse vers laquelle sont destinés les paquets

Passerelle : Passerelle utilisée, * ou 0.0.0.0 ou adresse_IP

Indic : G la route utilise une passerelle, U l'interface est active, H on ne peut joindre qu'un simple hôte par cette route)

Iface : Interface sur laquelle est positionnée la route.



Affichage de statistiques avec netstat -i
# netstat -i

Table d'interfaces noyau

Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0   1500 0         0      0      0 0             0      0      0      0 BMU
lo     16436 0       48      0      0 0            48      0      0      0 LRU
wlan0   1500 0    96773      0      0 0        106592      0      0      0 BMRU


Explications sur la commande netstat -i :

MTU détermine l'unité de transfert des paquets,

RX-OK et TX-OK rendent compte du nombre de paquets reçus ou émis,

RX-ERR ou TX-ERR nombre de paquets reçus ou transmis avec erreur,

RX-DRP ou TX-DRP nombre de paquets éliminés,

RX-OVR ou TX-OVR recouvrement, donc perdus à cause d'un débit trop important.

Les Flags (B adresse de diffusion, L interface de loopback, M tous les paquets sont reçus, O arp est hors service, P connexion point à point, R interface en fonctionnement, U interface en service)

netstat -tu

permet de renseigner sur les connexions actives TCP et UDP sans préciser les serveurs à l'écoute.


Exemple : #netstat -tu

Connexions Internet actives (sans serveurs)

Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat       

tcp        80    78 servlcs.llb.fr:www      AMarseille-554-1-2:3418 SYN_RECV   
...
tcp        65     0 servlcs.llb.fr:3128     10.25.95.31:50375       ESTABLISHED
tcp        0      0 servlcs.llb.fr:3128     10.36.12.8:1081         ESTABLISHED
…
tcp        0      0 servlcs.llb.fr:ssh      AMarseille-554-1-:38117 ESTABLISHED

Explications :

Proto : Protocole utilisé

Recv-q : Nbre de bits en réception pour ce socket

Send-q : Nbre de bits envoyés

Adresse locale : Nom d'hôte local et port

Adresse distante : Nom d'hôte distant et port

Etat : Etat de la connexion. Le champ state peut prendre les valeurs suivantes:

  • Established : Connexion établie

  • Syn snet : Le socket essaie de se connecter

  • Syn recv : La connexion s'initialise

  • Fin wait1 : Le socket a été fermé

  • Fin wait2 : La connexion a été fermée

  • Closed : Le socket n'est pas utilisé

  • Close wait : L'hôte distant a fermé la connexion; fermeture locale en attente.

  • Last ack : Attente de confirmation de la fermeture de la connexion distante

  • Listen : Ecoute en attendant une connexion externe.

  • Unknown : Etat du socket inconnu

traceroute

La commande traceroute, permet d'afficher le chemin parcouru par un paquet pour arriver à destination. Cette commande est importante, car elle permet d'équilibrer la charge d'un réseau, en optimisant les routes et/ou permet de voir éventuellement le plan de rupture sauf si c'est un firewall qui bloque la commande). 

Voici le résultat de la commande "traceroute www.materiel.net, tapée depuis ma machine.

traceroute to materiel.net (216.92.27.93), 30 hops max, 38 byte packets

 1  193.253.160.3 (193.253.160.3)  57.952 ms  57.363 ms  63.602 ms
 2  GE0-0-188.ncmar302.Marseille.francetelecom.net (80.10.208.162)  55.520 ms  53.273 ms  53.253 ms
 3  P3-2.nrlyo202.Lyon.francetelecom.net (193.252.101.150)  60.579 ms  62.708 ms  60.264 ms
 4  193.252.103.110 (193.252.103.110)  67.634 ms  66.338 ms  67.403 ms
 5  P9-0.ntsta202.Paris.francetelecom.net (193.252.161.57)  66.541 ms  67.118 ms  66.326 ms
 6  193.251.126.158 (193.251.126.158)  66.323 ms  68.855 ms  66.197 ms
 7  P12-0.NYKCR3.New-york.opentransit.net (193.251.241.134)  143.580 ms  144.374 ms  143.334 ms
 8  P5-0.NYKBB1.New-york.opentransit.net (193.251.241.21)  143.648 ms  142.628 ms  143.639 ms
 9  ATT2.GW.opentransit.net (193.251.242.154)  144.584 ms  142.082 ms  143.046 ms
10  tbr1-p014001.n54ny.ip.att.net (12.123.3.1)  144.794 ms  145.661 ms  145.621 ms
11  tbr1-cl8.phlpa.ip.att.net (12.122.2.18)  149.300 ms  145.853 ms  145.919 ms
12  gbr2-p10.phlpa.ip.att.net (12.122.12.102)  145.101 ms  144.856 ms  145.074 ms
13  gar1-p370.phlpa.ip.att.net (12.123.137.25)  147.090 ms  144.052 ms  145.035 ms
14  12.118.191.18 (12.118.191.18)  157.684 ms  155.942 ms  153.739 ms
15  materiel.net (216.92.27.93)  153.622 ms  153.104 ms  154.812 ms


Explications :
Ligne 0 : le programme signale qu'il n'affichera que les 30 premiers sauts. Cette machine porte l'adresse IP 216.92.27.93.

Pour chaque tronçon, on a également le temps maximum, moyen et minimum de parcours du tronçon.
Ensuite, on a pour chaque ligne, l'adresse du routeur que le paquet a traversé pour passer sur le réseau suivant.

Ligne 7 et 8, le paquet a traversé 2 routeurs sur le même réseau 193.251.241

Ligne 2, 3, 5, 7, 8, 9, 10, 11,12, 13 on voit que les routeurs ont un enregistrement de type A dans les serveurs de noms, puisqu'on voit les noms affichés.

Conclusion : Depuis ma machine, chaque requête HTTP passe par 15 routeurs pour accéder au serveur www.nat.fr.

L'accès sur cet exemple est réalisé sur Internet. Un administrateur, responsable d'un réseau d'entreprise sur lequel il y a de nombreux routeurs, peut, avec cet outil, diagnostiquer les routes et temps de routage. Il peut ainsi optimiser les trajets et temps de réponse.

tcpdump

Ce produit remonte les entêtes des paquets qui circulent sur un réseau. C'est à la fois un outil de diagnostic sécurité mais aussi un outil de détection d'anomalies de la configuration IP ou matérielle. 

Il fonctionne sous Linux et sous Windows. Il permet de filtrer sur des protocoles, des ports, des adresses IP. 

Il est possible de ne saisir que la commande tcpdump sans option.
Par défaut, tcpdump écoute sur eth0. Pour écouter sur une autre interface, il faut le préciser : tcpdump -i eth1


Il est possible de sélectionner les paquets à "écouter" en fonction d'expressions. Ainsi, ne seront affichées/traitées que les informations pour lesquelles le résultat de l'expression est vérifié.
Une expression est composée d'un mot clé suivi d'une valeur numérique ou autre. Ainsi, il est possible de classer les mots clés en catégories : 

  • les mots clés permettant de définir une direction. Entrent dans cette catégorie les mots src (source) et dst (destination). Il est possible de combiner ces deux mots clés avec les opérations logiques and (et) et or (ou). On peut ainsi définir avec précision la source et/ou la destination des paquets qui nous intéressent.
    Exemple : tcpdump src 192.168.0.1 : ici, les seuls paquets affichés sont ceux en provenance de 192.168.0.1. 

  • Les mots clés permettant de définir le type de valeur que nous préciserons. Il peut s'agir d'un hôte (host), d'un réseau (net) ou encore d'un port (port).
    Exemple : tcpdump src 192.168.0.1 and port 80 : là, le seul port qui nous intéresse est 80 (http).

  • Enfin, nous avons les mots clés concernant les protocoles. Ici, les mots sont suffisamment clairs pour se passer d'explications (par exemple, ip, tcp, udp ...).
    Exemple :  tcpdump src host 192.168.0.1 and dst host 193.252.19.3 and port 53 and udp : voici une ligne complète qui ne laisse vraiment passer que les paquets en provenance de 192.168.0.1 vers 193.252.19.3, sur le port 53 en udp. Et ce qui nous intéresse ici, ce sont les requêtes sur le serveur DNS du provider Internet. 


On peut aussi demander l'affichage du contenu des paquets au format hexadécimal et ascii (-x -X) : ce qui est pratique pour "sniffer" les noms d'utilisateur et mot de passe.

nmap

Nmap est un scanner de ports. C'est un outil performant pour la détection des ports inactifs ou ouverts sur une machine. Il peut permettre de détecter des failles de sécurité sur les serveurs, notamment les  backdoors. Nmap permet également de diagnostiquer le type (et parfois le N° de version) du système d'exploitation qui tourne sur le poste. Ce programme est à rapprocher de certaines informations que peut fournir la commande « netstat ». Le logiciel Nessus qui détecte les failles éventuelles d'un système s'appuie sur nmap.


Syntaxe : nmap  [option] adresse_IP (ou nom DNS pleinement qualifié)


Exemple : nmap -O llb.ac-corse.fr

Starting Nmap 5.21 ( http://nmap.org ) at 2012-02-06 09:40 CET
Nmap scan report for llb.ac-corse.fr (217.128.154.152)

Host is up (0.22s latency).
rDNS record for 217.128.154.152: LDijon-156-65-14-152.w217-128.abo.wanadoo.fr
Not shown: 979 closed ports
PORT     STATE    SERVICE
21/tcp   filtered ftp
22/tcp   open     ssh


Le scan réalisé ici permet de vérifier quels sont les ports ouverts et donc potentiellement vulnérables et le système d'exploitation de la machine testée (grâce à l'option -O). 

Par défaut, nmap ne scanne que les ports TCP, si vous voulez un scan complet, vous devez lancer nmap avec les options suivantes : nmap -sS -sU adresse_IP : sS pour les ports TCP et sU pour les ports UDP


Sur un client Linux, il est possible d'utiliser une interface graphique « nmapfe »

lsof

LiSt Open Files est une commande utile et puissante qui permet de lister les fichiers ouverts par les processus tournant sur le système. Sous Unix tout est fichier : les pipes sont des fichiers ainsi que les sockets ip, les repertoires et les devices et les inodes ... 

À utiliser de préférence avec un grep

Exemple lsof | grep mysql :

COMMAND PID USER  FD   TYPE   DEVICE   SIZE     NODE NAME
mysqld_sa  2936  root  cwd    DIR        8,1       4096          2   /
mysqld_sa  2936  root  rtd    DIR        8,1       4096          2   /
mysqld_sa  2936  root  txt    REG        8,1     700492      48877   /bin/bash

Voir man lsof pour plus de précisions.


Quelques idées d'utilisation :

Pour déterminer qui est en train d'utiliser le binaire apache, /etc/passwd, quels fichiers sont ouverts sur le périphérique /dev/hda6 ou qui accéde à /dev/cdrom: 


lsof `which apache2`

lsof /etc/passwd

lsof /dev/hda6

lsof /dev/cdrom


inventaire exaustif

  • avoir les processus ouverts par l'utilisateur apache et eleve : lsof -u apache,eleve
  • Afficher les fichiers utilisés par le processus dont le PID est 30297 : lsof +p 30297
  • Chercher toutes les instances ouvertes du repertoire /tmp et tout les fichiers et repertoires qu'il contient:  lsof +D /tmp
  • Lister toutes les sockets internets ouvertes et celles relatives au port 80: lsof -i et lsof -i :80

Dépannage réseau

Identification du périphérique réseau

Si la commande ip ne donne rien, c'est qu'aucun périphérique réseau n'est reconnu par le système.
La commande lspci donne la liste des périphériques reliés au bus PCI. 


On retrouve aussi les informations sur l'initialisation des interfaces réseau dans les messages relatifs au lancement du système d'exploitation. 

La commande dmesg (dump messages) permet d'afficher tous les messages systèmes à la console.

La commande dmesg | grep eth et/ou dmesg | grep wlan (pour les périphériques sans fil) vous permet donc de voir quel(s) périphérique(s) réseaux sont initialisés par le système.

Le chargement des modules de pilotage des interfaces réseau se fait théoriquement automatiquement. Si tel n'est pas le cas, c'est que le noyau ne prévoit pas pas le module adéquat (matériel très récent). Dans ce cas là, il est nécessaire de le compiler à partir des sources ; le paquet "module-assistant" peut alors vous être très utile

Le chargement manuel d'un module s'effectue avec la commande modprobe et la validation du résultat avec les commandes dmesg et ip. De plus, on peut vérifier la présence du pilote dans la liste des modules chargé avec la commande lsmod.

Même avec une configuration correcte de l'interface, il est possible que les communications soient bloquées si le lien physique entre l'hôte et l'équipement réseau n'est pas actif. Sur les liaisons utilisant des câbles en paires torsadées cuivre, on peut visualiser l'état du lien à l'aide de la commande mii-tool.

portableApo:~#  mii-tool -v

eth0: no link

  product info: vendor 00:0a:f7, model 4 rev 0
  basic mode:   autonegotiation enabled
  basic status: no link
  capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control

Configuration de l'interface

Pour configurer et vérifier l'état d'une interface réseau, il faut utiliser les commandes de base disponibles sur n'importe quel système Unix (voir en annexe « les commandes réseau sous linux »). 


ip sert à connaître et/ou à fixer les paramètres d'une interface ; eth0 dans notre exemple

eth0      Lien encap:Ethernet  HWaddr 00:50:04:4C:28:27 

          inet adr:192.168.1.1  Bcast:192.168.1.255  Masque:255.255.255.0 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
          Paquets Reçus:134 erreurs:0 jetés:0 débordements:0 trames:0 
          Paquets transmis:17 erreurs:0 jetés:0 débordements:0 carrier:0
          collisions:0 lg file transmission:100
          Interruption:10 Adresse de base:0xe000 

==> Informations sur la couche liaison (2) :
encap:Ethernet : format de trame Ethernet II.
HWaddr ... : Adresse MAC de la carte réseau.

==> Informations sur la couche réseau (3) :
inet adr : adresse IP de l'interface.
Bcast : adresse de diffusion du réseau.
Masque : masque de sous-réseau.

==> Informations sur l'état de l'interface :
UP BROADCAST RUNNING MULTICAST : interface de diffusion active.
MTU:1500 : Maximum Transmission Unit. La taille maximum des trames Ethernet transmises sur Internet est fixée par le document RFC1191 Path MTU discovery.
Metric:1 : nombre de sauts autorisés pour obtenir un routage vers n'importe quelle destination.

Statistiques de l'interface. Ces informations sont essentielles pour déterminer la qualité du réseau ⇒ Paramètres d'entrées/sorties de l'interface. Ces informations indiquent si la carte réseau est correctement reconnue par le système.

 

Tests de communication 

Le protocole Internet Control Message Protocol ou ICMP est décrit dans le document RFC792 Internet Control Message Protocol.

La commande ping utilise principalement deux types de messages du protocole ICMP pour informer l'utilisateur sur les conditions de transmission : 

    Le type 8 (echo request) est émis vers l'hôte distant.

    Le type 0 (echo reply) est émis par l'hôte distant en réponse


    Pour valider le bon fonctionnement d'une communication sur un réseau IP, on suit une séquence précise de tests.

    Séquence de tests

      Adresse IP de l'interface de boucle locale (lo 127.0.0.1) : Permet de valider le fonctionnement du protocole réseau IP pour les processus appartenant au même système

      Adresse IP de l'interface réseau (ethxx) : IP de la carte, contrôle que l'interface réseau soit bien configurée et active.

      Adresse IP d'un poste dans notre réseau ou de la passerelle par défaut Contrôle que l'interface réseau d'un poste situé dans notre réseau est actif. S'il y a une passerelle c'est la passerelle qu'il faut tenter de "pinguer". Si ça ne fonctionne pas à ce niveau c'est qu'il y a un problème provenant du câblage ou d'un élément actif (switch) ou du poste que l'on "pingue". Vérifiez aussi si un firewall ne bloque pas les commandes ICMP

      Adresse IP extérieure au réseau local: Contrôle que l'interface réseau d'un poste situé dans en dehors de notre réseau est actif. Permet de valider le bon fonctionnement de notre routeur. S'il y a un problème à ce niveau il faut vérifier que : 

        L'adresse IP de la passerelle est la bonne

        Le fonctionnement de notre routeur (qui doit évidemment avoir l'adresse IP de notre passerelle)

        La commande route, tout comme ip sert à la fois à connaître l'état de la table de routage de l'hôte (commande "route -n") et à configurer de nouvelles routes au besoin

        routes sont statiques ; 2 solutions :

          " travailler" dans le fichier interface notamment pour la passerelle par défaut ; saisir les commandes de routage dans un script qui s'exécute automatiquement au démarrage du poste.

            Adresse DNS : Le ping du poste avec son adresse IP fonctionne mais pas avec son nom DNS, c'est qu'il y a un problème de résolution de noms. Les deux fichiers à consulter sont les suivants : 

              /etc/resolv.conf : search domaine-fai.fr et nameserver addr-dns-fai

              /etc/host.conf order hosts, bind multi on

              Un peu plus sur la résolution des noms

              L'opération de résolution consiste à faire la correspondance entre un nom de domaine et son adresse IP. Pour effectuer ces opérations de résolution on utilise un service Internet particulier appelé Domain Name System ou DNS. Ce service fonctionne sur le même mode qu'un annuaire téléphonique dans lequel les chiffres du numéro de téléphone sont remplacés par les chiffres de l'adresse IP et le nom d'abonné est remplacé par le nom de domaine.

              La commande hosteffectue l'opération de recherche de l'adresse IP correspondant à un nom d'hôte réseau enregistré sur le service DNS et vice versa :

                Résolution d'un nom d'hôte.

                $ host www.nic.fr

                www.nic.fr is an alias for rigolo.nic.fr.

                rigolo.nic.fr has address 192.134.4.20

                  Résolution d'une adresse IP.

                  $ host 192.134.4.20

                  20.4.134.192.in-addr.arpa domain name pointer rigolo.nic.fr.

                  Il existe une autre commande historique qui donne davantage d'informations sur les jeux de questions/réponses DNS : nslookup. Cette commande est disponible sur les systèmes Microsoft ; elle est accessible à partir d'un shell.

                  Dans l'univers Unix/Linux, cette commande est abandonnée au profit de la commande dig qui offre davantage d'options et des messages d'erreurs plus rigoureux.

                  Exemple de requête DNS de type A qui renvoie l'adresse IP correspondant à un nom d'hôte. $ dig www.nic.fr

                  Exemple de requête DNS de type PTR qui renvoie le nom d'hôte correspondant à une adresse IP. $ dig -x 192.134.4.20