Mon réseau d’entreprise
12.1 Le paquet iproute2
Au siècle dernier, les commandes pour obtenir des informations sont apparues lorsque le besoin s’en faisait sentir. Chaque développeur commençait son programme, puis d’autres ajoutaient des possibilités. À l’aube du XXI siècle, les défauts des vieilles commandes a poussé l’appartion du paquet iproute2. Ce paquet regroupe les utilitaires pour contrôler le trafic réseau.
12.1.1 Configurer une interface
Configurer une interface revient à lui affecter un couple (adresse ip, masque) et à l’activer. Il s’agit de deux actions séparées.
Pour lister les interfaces, il faut utiliser l’utilitaire ip en lui donnant la commande address (voir man ip-address).
# ip address 1: lo:mtu 65536 qdisc noqueue \ state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s31f6: mtu 1500 \ qdisc pfifo_fast state UP group default qlen 1000 link/ether 18:66:da:46:f9:9f brd ff:ff:ff:ff:ff:ff inet 10.33.105.2/24 brd 10.33.105.255 scope global enp0s31f6 valid_lft forever preferred_lft forever inet6 fe80::1a66:daff:fe46:f99f/64 scope link valid_lft forever preferred_lft forever
Les lignes trop longues sont affichées sur plusieurs lignes. Le symbole en fin de ligne indique que la ligne continue.
Cette commande liste deux interfaces :
- lo
-
il s’agit de l’interface loopback ;
- enp0s31f6
-
c’est la carte réseau Ethernet.
L’interface loopback est présente sur tous les ordinateurs utilisant ip. Elle permet d’utiliser les services réseaux en local. La destination est la machine de départ. Tous les ordinateurs ont donc la même adresse 127.0.0.1 qui signifie moi-même. Elle est souvent omise dans les descriptions.
L’autre interface est plus utile. Elle est souvent connectée sur le bus pci. La commande lspci permet de vérifier qu’elle existe.
$ lspci | grep Ethernet 00:1f.6 Ethernet controller: Intel Corporation Ethernet ...
Si le noyau Linux supporte ce modèle, alors elle apparaît aussi dans la commande ip address. Les premiers paramètres utiles sont :
- link/ether
-
l’adresse Ethernet de la carte, ici 18:66:da:46:f9:9f.
- inet
-
l’adresse et le masque réseau : ici 10.33.105.2/24.
- state UP
-
la carte est active.
Il convient donc d’arrêter la gestion automatique du réseau si ce n’est pas déjà fait.
Pour affecter une adresse et un masque à la carte, il faut utiliser la commande suivant :
# ip address add 10.12.32.45/16 dev enp0s31f6 #
Si cela s’est bien passé, la commande ne répond rien. Il est possible de vérifier en affichant les paramètres. L’interface n’est pas active il faut l’activer par la commande :
# ip link set up dev ens3
Il est possible de voir l’évolution en affichant les paramètres entre deux actions :
# ip address show ens3 2: ens3:mtu 1500 qdisc pfifo_fast \ state DOWN group default qlen 1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff # ip addr add 10.32.12.234/16 dev ens3 # ip address show ens3 2: ens3: mtu 1500 qdisc pfifo_fast \state DOWN group default qlen 1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff inet 10.32.12.234/16 scope global ens3 valid_lft forever preferred_lft forever # ip link set up dev ens3 2: ens3: mtu 1500 \ qdisc pfifo_fast state DOWN group default qlen 1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff inet 10.32.12.234/16 scope global ens3 valid_lft forever preferred_lft forever
Au début, l’interface est dans un état down. Elle dispose de sopn adresse Ethernet. Après avoir ajouté une adresse, celle-ci s’affiche, mais l’état reste down. Après l’activation du link elle passe à l’état up.
Nous pouvons aussi défaire ce que nous venons de faire, pour cela nous pouvons utiliser les deux commandes inverses pour retirer l’adresse et passer l’interface à l’état down :
# ip addr del 10.32.12.234/16 dev enp0s31f6 # ip link set down dev enp0s31f6
Si il y a un autre ordinateur sur le réseau local disposant d’une adresse IP compatible, alors les deux peuvent communiquer. Sinon, la carte est active, fonctionnelle, mais elle est seule au monde ! Pour aller plus loin que le réseau local, il faut gérer les routes.
12.1.2 Prenez la route
Sur une station classique, la commande ip route affiche deux routes :
default via 10.33.105.250 dev enp0s31f6 10.33.105.0/24 dev enp0s31f6 proto kernel scope link src 10.33.105.2
Une route directe pour le réseau local. L’adresse source utilisée est mentionnée. Si ce n’est pas sur le réseau local, alors il faut passer par le routeur. Dans ce contexte, il n’y en a qu’un, il fournit la route par défaut. Dans cet exemple, le routeur dispose de l’adresse 10.33.105.250 sur ce réseau local. Dans d’autres, cas les tables de routages peuvent être plus complexes, comme :
10.34.101.0/24 via 10.33.101.3 dev eth0.101
Ce qui signifie que pour atteindre le réseau 10.34.101.0/24, il faut passer par le routeur à l’adresse 10.33.101.3 en utilisant l’interface eth0.101.
Dans le cas précédent, après avoir affecté une adresse à une interface réseau non configurée, il n’y a que la route pour le réseau local :
$ ip route 10.32.0.0/16 dev enp0s31f6 proto kernel scope link src 10.32.12.234
Pour ajouter la route par défaut, il faut entrer :
# ip route add default via 10.32.12.23
Pour ajouter une route statique, il faut utiliser la commande ip route en indiquant le réseau (couple adresse, maque) et le routeur.
ip route add 10.12.3.0/24 via 192.168.0.132
La route apparait alors dans la commande ip route.
ip route | grep 10.12 10.12.3.0/24 via 192.168.0.132 dev enp0s31f6
Et elle peut être retirée. C’est la même commande que pour l’ajout en remplaçant add par del.
ip route del 10.12.3.0/24 via 192.168.0.132
Nous savons maintenant gérer trois paramètres, il reste le serveur de noms.
12.1.3 Le serveur de noms
Le serveur de noms n’utilise pas les services d’iproute, mais c’est mieux de mettre cette partie pour compléter les quatre paramètres ip.
Le serveur de nom permet aux humains d’utiliser un nom compréhensible, comme www.univ-amu.fr plutôt que son adresse ip. Il est défini dans le fichier /etc/resolv.conf :
# Generated by NetworkManager search univ-amu.fr nameserver 10.30.3.1 nameserver 10.30.3.3
Ce fichier a été généré par la configuration réseau automatique. Il contient le nom de domaine utilisé par cet ordinateur univ-amu.fr et les adresses ip des deux serveurs de noms.
Les commandes pour convertir un nom en adresse IP sont nslookup, host et dig du paquet dnsutils.
$ nslookup www.univ-amu.fr Server: 10.30.3.1 Address: 10.30.3.1#53 Non-authoritative answer: Name: www.univ-amu.fr Address: 139.124.244.38 $ host www.univ-amu.fr www.univ-amu.fr has address 139.124.244.38 $ dig www.univ-amu.fr ; <<>> DiG 9.10.3-P4-Debian <<>> www.univ-amu.fr ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23318 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.univ-amu.fr. IN A ;; ANSWER SECTION: www.univ-amu.fr. 179 IN A 139.124.244.38 ;; Query time: 0 msec ;; SERVER: 10.30.3.1#53(10.30.3.1) ;; WHEN: Thu Aug 30 18:45:57 CEST 2018 ;; MSG SIZE rcvd: 60
12.1.4 Surveillez les ports avec ss
Il est parfois utile de connaître les ports ouverts sur un ordinateur. La commande netstat était utilisé pour obtenir les informations, Comme cette commande est vouée à disparaître, il vaut mieux utiliser directement la nouvelle commande ss.
La première invocation consiste à savoir quel port un serveur a ouvert. Pour apache, par exemple, il faut entrer la commande suivante :
# ss -pan | grep apa
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* \
users:( ("apache2",pid=24732,fd=3),\
("apache2",pid=24731,fd=3),
("apache2",pid=24730,fd=3),\
("apache2",pid=798,fd=3))
Le résultat s’affiche sur une seule ligne, un peu longue (200 caractères). Nous obtenons le port ouvert 80, l’information qu’il écoute sur toutes les interfaces réseaux (0.0.0.0:80) et que quatre processus écoutent, ce que nous pouvons confirmer par la commande pgrep :
# pgrep -la apa 798 /usr/sbin/apache2 -k start 24730 /usr/sbin/apache2 -k start 24731 /usr/sbin/apache2 -k start 24732 /usr/sbin/apache2 -k start
Les numéros des pid sont bien les mêmes. Le serveur apache écoute sur le port bien connu 80, pour le web. Il n’écoute pas sur le port 443, https.
L’utilitaire ss est beaucoup plus complet et peut afficher les connexions dans des états variés.
12.1.5 Surveillez vos voisins
Le protocole arp est utilisé pour obtenir l’adresse Ethernet d’un hôte du réseau local dont l’adresse ip est connue. Après une première requête, l’information reste en cache pendant un certain temps. La commande ip neighbour permet de lister ce cache.
$ ip neighbour 192.168.0.168 dev enp0s31f6 FAILED 192.168.0.10 dev enp0s31f6 lladdr f4:f2:6d:49:d3:db STALE 192.168.0.163 dev enp0s31f6 lladdr 14:ab:c5:ad:b4:de STALE 192.168.0.254 dev enp0s31f6 lladdr 00:24:d4:b8:63:1c REACHABLE
Pour chaque adresse ip tentée récemment, la table contient son adresse Ethernet, si elle a été trouvée. Si une communication a eu lieu très récement, la ligne est dans l’état reachable (atteignable). Au bout d’un certain temps, l’information n’est plus considérée valable, l’état passe à stale (rassis). Il faudra redemander.
Le spoofing ARP est utilisé pour usurper l’adresse d’un ordinateur. Potentiellement un routeur ou un serveur. Le logiciel arpwatch permet
de détecter facilement cette attaque. Il permet aussi, plus souvent même, de détecter des erreurs dans la configuration du réseau.
12.1.6 Plus loin avec les interfaces réseaux
Nous présentons ici quelques commandes qui permettent de montrer les possibilités offertes pas Linux.
un site avec des idées sur Iproute2.
| Affichage | ip link |
| Activation | ip link set up dev eth0 |
| Dé-Activation | ip link set down dev eth0 |
| Alias | ip link set dev eth0 alias ”lan0” |
| Renommer | ip link set dev eth0 name lan0 |
| changer la MAC | ip link set dev eth0 address 00:01:02:03:04:05 |
| désactiver ARP | ip link set eth0 arp off |
Tab. 12.3 : Configuration de lien.
| Affichage | ip route show |
| Route vers un réseau | ip route show to root 192.168.1.0/24 |
| routes vers un sous-réseaux | ip route show to exact 192.168.1.0/24 |
| route utilisée | ip route get 192.168.1.0/24 |
| ajout/ suppression de route | ip route [ add | del ] 192.168.1.0/24 via 192.168.1.254 |
| Ajout / Suppression d’une route statique flottante | ip r [ a | d ] 192.168.1.0/24 via 192.168.1.254 metric 5 |
| route par défaut | ip route [ add | del ] default via 192.168.1.254 |
Tab. 12.6 : Tables de routage.