14 commandes réseau Linux utiles

Publié: 2015-02-15

La configuration, la surveillance et la sécurisation des réseaux constituent une partie essentielle du travail d'un administrateur système. Lorsqu'il s'agit de gérer des réseaux Linux, de nombreuses commandes et utilitaires sont disponibles.

Parfois, les systèmes en réseau échouent. En tant qu'administrateur, vous êtes tenu de diagnostiquer et de résoudre les problèmes. La surveillance aide à détecter les problèmes et à les résoudre avant que les choses ne deviennent incontrôlables. La surveillance de la sécurité et des performances constitue également une partie essentielle des activités d'un administrateur.

Nous discutons ici de certaines commandes couramment utilisées pour gérer les réseaux Linux.

IP

Le package iproute2 inclut la commande IP qui est utilisée pour la configuration du réseau et du routage. Cela remplace les commandes traditionnelles ifconfig et route .

ip prend un deuxième argument qui spécifie l'objet sur lequel vous souhaitez exécuter une commande et une action comme ajouter, supprimer ou afficher.

lien IP

ip link sert à configurer, ajouter et supprimer des interfaces réseau. Utilisez la commande ip link show pour afficher toutes les interfaces réseau du système :

 $ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 02:35:97:08:6b:2a brd ff:ff:ff:ff:ff:ff 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:6f:60:ff brd ff:ff:ff:ff:ff:ff

Vous pouvez voir la page de manuel pour le ip link avec :

 $ man ip-link

adresse IP

Utilisez la commande d'adresse IP pour afficher les adresses, lier une nouvelle adresse ou supprimer les anciennes. La commande d'adresse IP de la page de manuel porte le nom d'adresse IP.

Par exemple, la commande suivante affiche l'adresse IP attribuée à l'interface réseau enp0s8 :

 ip address show dev enp0s8 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:6f:60:ff brd ff:ff:ff:ff:ff:ff inet 10.0.0.51/24 brd 10.0.0.255 scope global enp0s8 ...

itinéraire IP

Utilisez la route IP pour imprimer ou afficher la table de routage. La commande suivante affiche le contenu de la table de routage :

 $ ip route show default via 10.0.2.2 dev enp0s3 10.0.0.0/24 dev enp0s8 proto kernel scope link src 10.0.0.51 10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15

nmap

Alors que Nmap avait été utilisé dans de nombreux films, The Matrix Reloaded ( Wikipedia , IMDB , Amazon ) a fait de Nmap une star de cinéma !.

Nmap ("Network Mapper") est un utilitaire puissant utilisé pour la découverte du réseau, l'audit de sécurité et l'administration. De nombreux administrateurs système l'utilisent pour déterminer lesquels de leurs systèmes sont en ligne, ainsi que pour la détection du système d'exploitation et la détection des services.

L'analyse Nmap par défaut affiche les ports, leur état (ouvert/fermé) et les protocoles. Il envoie un paquet aux 1000 ports les plus courants et vérifie la réponse.

 $ nmap 10.0.0.50 Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 10:32 UTC Nmap scan report for 10.0.0.50 Host is up (0.00077s latency). Not shown: 997 filtered ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 3306/tcp closed mysql

Pour vérifier quels hôtes de votre réseau sont actifs :

 $ nmap -sn 10.0.0.0/24 Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 11:59 UTC Nmap scan report for 10.0.0.1 Host is up (0.00084s latency). Nmap scan report for 10.0.0.50 Host is up (0.0021s latency). Nmap scan report for 10.0.0.51 Host is up (0.00026s latency). Nmap done: 256 IP addresses (3 hosts up) scanned in 2.61 seconds

Utilisez l'indicateur -O pour identifier le système d'exploitation exécuté par un hôte.

 $ sudo nmap 10.0.0.50 -O Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 13:44 UTC Nmap scan report for 10.0.0.50 Host is up (0.00053s latency). ... Running: Linux 3.X OS CPE: cpe:/o:linux:linux_kernel:3 OS details: Linux 3.10 - 3.19 Network Distance: 1 hop OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 21.95 seconds

Un mot d'avertissement : Personne n'apprécie que leurs systèmes soient scannés sur Internet. Alors avant de le faire, demandez la permission.

Vous pouvez également utiliser Nmap sous Windows, consultez ce guide d'installation.

ping

Utilisez ping pour voir si un hôte est actif. Cette commande super simple vous aide à vérifier l'état d'un hôte ou d'un segment de réseau. La commande Ping envoie un paquet ICMP ECHO_REQUEST à l'hôte cible et attend de voir s'il répond.

Cependant, certains hôtes bloquent les demandes d'écho ICMP avec un pare-feu. Certains sites sur Internet peuvent également faire de même.

Par défaut, ping s'exécute dans une boucle infinie. Pour envoyer un nombre défini de paquets, utilisez l'indicateur -c .

 $ ping -c 3 google.com PING google.com (172.217.167.238): 56 data bytes 64 bytes from 172.217.167.238: icmp_seq=0 ttl=118 time=7.898 ms 64 bytes from 172.217.167.238: icmp_seq=1 ttl=118 time=7.960 ms 64 bytes from 172.217.167.238: icmp_seq=2 ttl=118 time=6.247 ms --- google.com ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 6.247/7.368/7.960/0.793 ms

Avec l'indicateur -o, le ping se termine avec succès après avoir reçu un paquet de réponse.

 $ ping -o google.com PING google.com (172.217.167.46): 56 data bytes 64 bytes from 172.217.167.46: icmp_seq=0 ttl=118 time=7.540 ms --- google.com ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 7.540/7.540/7.540/0.000 ms

Vous pouvez utiliser l'indicateur -n pour éviter les recherches DNS inversées. Le numéro de séquence ICMP est particulièrement important. Une rupture dans les numéros de séquence indique des paquets perdus.

Un échec de ping peut être dû à

  • panne de réseau
  • l'hôte n'est pas vivant
  • pare-feu bloquant les requêtes ICMP ECHO

Vous pouvez également effectuer un test ping en ligne pour vérifier la connectivité de différentes parties du monde.

iPerf

Alors que ping vérifie la disponibilité d'un hôte, iPerf permet d'analyser et de mesurer les performances du réseau entre deux hôtes. Avec iPerf, vous ouvrez une connexion entre deux hôtes et envoyez des données. iPerf affiche alors la bande passante disponible entre les deux hôtes.

Vous pouvez installer une iPerf à l'aide de votre gestionnaire de packages de distribution. Par exemple, sur les distributions basées sur Ubuntu, vous pouvez installer comme ceci :

 $ sudo apt install iperf -y

Une fois que vous avez installé iPerf sur les deux machines, démarrez le serveur iPerf sur l'une d'elles. L'exemple suivant démarre le serveur iPerf sur un hôte avec l'adresse IP 10.0.0.51.

 $ iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------

Sur la deuxième machine, démarrez iPerf avec l'indicateur -c. Cela se connecte au serveur et envoie des données.

 $ iperf -c 10.0.0.51 ------------------------------------------------------------ Client connecting to 10.0.0.51, TCP port 5001 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.0.0.50 port 42177 connected with 10.0.0.51 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.13 GBytes 972 Mbits/sec

iPerf revient avec les résultats de la bande passante en quelques secondes.

traceroute

Si ping affiche des paquets manquants, vous devez utiliser traceroute pour voir quel itinéraire les paquets empruntent. Traceroute montre la séquence de passerelles par lesquelles les paquets voyagent pour atteindre leur destination. Par exemple, traceroute de ma machine vers google.com affiche ce qui suit :

 $ traceroute google.com traceroute to google.com (172.217.167.46), 64 hops max, 52 byte packets 1 dlinkrouter.dlink (192.168.0.1) 5.376 ms 2.076 ms 1.932 ms 2 10.194.0.1 (10.194.0.1) 5.190 ms 5.125 ms 4.989 ms 3 broadband.actcorp.in (49.207.47.201) 7.165 ms 5.749 ms 5.755 ms 4 broadband.actcorp.in (49.207.47.225) 5.918 ms * 8.483 ms ... 9 108.170.251.97 (108.170.251.97) 6.359 ms del03s16-in-f14.1e100.net (172.217.167.46) 5.448 ms 108.170.251.97 (108.170.251.97) 6.400 ms

La ligne 4 de cette sortie affiche un * dans les temps d'aller-retour. Cela indique qu'aucune réponse n'a été reçue. Cela peut être dû à de nombreuses raisons - comme les paquets ICMP traceroute sont de faible priorité, ils peuvent être abandonnés par un routeur. Ou il pourrait y avoir simplement de la congestion. Si vous voyez un * dans tous les champs de temps pour une passerelle donnée, il est possible que la passerelle soit en panne.

De nombreux outils de traçage d'itinéraire basés sur le Web vous permettent d'effectuer un traçage inverse, c'est-à-dire d'un site Web à votre hôte. Vous pouvez les vérifier sur traceroute.org ou Geekflare Traceroute.

tcpdump

tcpdump est un outil de reniflage de paquets et peut être d'une grande aide lors de la résolution de problèmes de réseau. Il écoute le trafic réseau et imprime les informations sur les paquets en fonction des critères que vous définissez.

Par exemple, vous pouvez examiner tous les paquets envoyés vers ou depuis un hôte particulier, Ubuntu18 dans cet exemple :

 $ sudo tcpdump host ubuntu18 -n -c 5 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 14:12:11.509092 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 2991049004:2991049112, ack 2956233368, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 108 14:12:11.509146 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 108:252, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 144 14:12:11.509218 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 252:288, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 36 14:12:11.509259 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 288:500, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 212 14:12:11.509331 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 500:768, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 268 5 packets captured 6 packets received by filter 0 packets dropped by kernel

Par défaut, tcpdump résout les adresses IP en noms d'hôtes. Utilisez l'indicateur -n si vous ne souhaitez pas que tcpdump effectue des recherches de noms.

La sortie de tcpdump imprime une ligne pour chaque paquet. Utilisez l'indicateur -c pour limiter la sortie, 5 dans l'exemple ci-dessus.

tcpdump est utile pour résoudre les problèmes de réseau et également identifier les problèmes potentiels. C'est une bonne idée d'exécuter occasionnellement un tcpdump sur votre réseau pour vérifier que tout est en ordre.

netstat

La commande Netstat est utilisée pour examiner les connexions réseau, les tables de routage et divers paramètres et statistiques réseau.

Utilisez l'indicateur -i pour répertorier les interfaces réseau de votre système.

Voici un exemple:

 $ netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 4001 0 0 0 2283 0 0 0 BMRU eth1 1500 0 27154 0 0 0 838962 0 0 0 BMRU lo 65536 0 0 0 0 0 0 0 0 0 LRU

L'utilisation de l'indicateur -r affichera la table de routage. Cela montre le chemin configuré pour envoyer des paquets réseau.

 $ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 10.0.0.0 * 255.255.255.0 U 0 0 0 eth1 10.0.2.0 * 255.255.255.0 U 0 0 0 eth0

Un astérisque dans les deux dernières lignes indique qu'aucune passerelle n'est requise pour envoyer des paquets à n'importe quel hôte sur ces réseaux. Cet hôte est directement connecté aux réseaux 10.0.0.0 et 10.0.2.0.

Dans la première ligne, la destination est la valeur par défaut, ce qui signifie que tout paquet destiné à un réseau non répertorié dans ce tableau est géré par le routeur 10.0.2,2.

La commande netstat sans aucune option affiche une liste des sockets ouverts. Utilisez l'indicateur -l pour afficher uniquement les sockets d'écoute, qui par défaut ne sont pas affichés. Vous pouvez utiliser l'indicateur -a pour afficher les sockets à l'écoute et non à l'écoute. Voici un exemple:

 $ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 36 10.0.2.15:ssh 10.0.2.2:51017 ESTABLISHED tcp6 0 0 [::]:ssh [::]:* LISTEN udp 0 0 *:bootpc *:* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 3 [ ] DGRAM 8186 /run/systemd/notify ...

Plus d'exemple de commande Netstat ici

ss

Les installations Linux ont de nombreux services exécutés par défaut. Ceux-ci doivent être désactivés ou de préférence supprimés, car cela aide à réduire la surface d'attaque. Vous pouvez voir quels services sont en cours d'exécution avec la commande netstat. Bien que netstat soit toujours disponible, la plupart des distributions Linux passent à la commande ss .

utilisez la commande ss avec les drapeaux -t et -a pour lister tous les sockets TCP. Cela affiche les sockets à l'écoute et non à l'écoute.

 $ ss -t -a State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:sunrpc *:* LISTEN 0 128 *:http *:* LISTEN 0 128 *:ssh *:* LISTEN 0 128 *:60031 *:* ESTAB 0 0 10.0.2.15:ssh 10.0.2.2:51699 ESTAB 0 0 10.0.2.15:ssh 10.0.2.2:51049 LISTEN 0 128 :::sunrpc :::* LISTEN 0 128 :::http :::* LISTEN 0 128 :::ssh :::* LISTEN 0 128 :::54715 :::*

Pour afficher uniquement les connexions TCP dont l'état est établi :

 ss -a -t -o state established Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 10.0.2.15:ssh 10.0.2.2:51699 timer:(keepalive,23min,0) 0 0 10.0.2.15:ssh 10.0.2.2:51049 timer:(keepalive,114min,0)

chut

ssh vous permet de vous connecter en toute sécurité avec des hôtes distants via Internet. Auparavant, rlogin et telnet étaient utilisés pour se connecter et administrer des hôtes distants. Cependant, les deux souffrent d'un défaut fondamental, c'est-à-dire qu'ils envoient toutes les informations, y compris les noms de connexion et les mots de passe en texte clair.

ssh permet une communication sécurisée sur Internet avec les deux fonctionnalités suivantes :

  • Il confirme que l'hôte distant est, qui il dit qu'il est.
  • Il crypte toutes les communications entre les hôtes.

Pour vous connecter à un hôte distant, vous devez disposer d'un serveur OpenSSH en cours d'exécution sur l'hôte distant. Vous pouvez l'installer à l'aide de votre gestionnaire de packages de distribution. Par exemple sur Ubuntu vous pouvez l'installer comme ceci :

 $ sudo apt install openssh-server

Voici un exemple montrant comment vous pouvez vous connecter à l'hôte distant 10.0.0.50 à l'aide de la commande ssh :

 me@ubuntu-xenial:~$ ssh 10.0.0.50 The authenticity of host '10.0.0.50 (10.0.0.50)' can't be established. ECDSA key fingerprint is SHA256:s2tNJQa/C1/W0SevGm7Rt3xoBZG1QL5yT3ff/+PMpnY. Are you sure you want to continue connecting (yes/no)? yes

Vous obtenez un message disant que l'authenticité de l'hôte 10.0.0.50 ne peut pas être établie, c'est parce que c'est la première fois qu'une connexion est établie avec 10.0.0.50 (serveur) et que le client ssh n'a jamais vu cet hôte distant auparavant. Entrez oui pour continuer la connexion. Une fois la connexion établie, un mot de passe vous est demandé :

 Warning: Permanently added '10.0.0.50' (ECDSA) to the list of known hosts. [email protected]'s password:

Après avoir entré le mot de passe correct, vous êtes connecté à l'hôte distant.

 Welcome to Ubuntu 14.04.6 LTS (GNU/Linux 3.13.0-170-generic x86_64) * Documentation: https://help.ubuntu.com/ .. me@vagrant-ubuntu-trusty-64:~$

Vous pouvez quitter ce shell distant avec la commande exit.

De plus, vous pouvez facilement exécuter une seule commande sur l'hôte distant à l'aide de ssh. Par exemple, pour exécuter df -h sur l'hôte distant :

 $ ssh 10.0.0.50 df -h [email protected]'s password: Filesystem Size Used Avail Use% Mounted on udev 241M 12K 241M 1% /dev tmpfs 49M 384K 49M 1% /run /dev/sda1 40G 1.6G 37G 5% / ... none 224G 113G 111G 51% /vagrant me@ubuntu-xenial:~$

scp et sftp

scp (copie sécurisée) est très similaire à la commande cp pour copier des fichiers, avec un ajout - vous pouvez inclure des noms d'hôte distants dans les noms de chemin source ou de destination. Le nom d'hôte et le chemin du répertoire sont séparés par deux-points. Cela vous permet de copier des fichiers en toute sécurité sur le réseau sous une forme cryptée. La commande suivante copie a.txt de la machine locale vers 10.0.0.50 :

 me@ubuntu-xenial:~$ scp a.txt 10.0.0.50:/home/me [email protected]'s password: a.txt 100% 0 0.0KB/s 00:00

sftp (ftp sécurisé) est également un programme de copie de fichiers similaire à ftp . Cependant, il utilise un tunnel crypté SSH pour copier les fichiers, au lieu de tout envoyer en texte clair. De plus, vous n'avez pas besoin d'un serveur FTP exécuté sur l'hôte distant. Vous n'avez besoin que d'un serveur ssh. Voici un exemple de séance :

 me@ubuntu-xenial:~$ sftp 10.0.0.50 [email protected]'s password: Connected to 10.0.0.50. sftp> put kali-linux-2020.3-installer-netinst-i386.iso Uploading kali-linux-2020.3-installer-netinst-i386.iso to /home/me/kali-linux-2020.3-installer-netinst-i386.iso kali-linux-2020.3-installer-netinst-i386.iso 100% 435MB 27.2MB/s 00:16 sftp> bye

Siconfig

Nous utilisons principalement la commande ifconfig pour vérifier l'adresse IP attribuée au système.

 [root@lab ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 209.97.137.171 netmask 255.255.240.0 broadcast 209.97.143.255 inet6 fe80::c035:b2ff:fe9d:72d5 prefixlen 64 scopeid 0x20<link> ether c2:35:b2:9d:72:d5 txqueuelen 1000 (Ethernet) RX packets 1333200 bytes 167143230 (159.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 979666 bytes 93582595 (89.2 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 16 bytes 1392 (1.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 16 bytes 1392 (1.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@lab ~]#

creuser

dig (Domain Information Groper) est un outil flexible pour interroger les serveurs de noms DNS.

Il effectue des recherches DNS et affiche les réponses renvoyées par les serveurs de noms.

 [root@lab ~]# dig geekflare.com ; <<>> DiG 9.11.13-RedHat-9.11.13-5.el8_2 <<>> geekflare.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12310 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;geekflare.com. IN A ;; ANSWER SECTION: geekflare.com. 30 IN A 104.27.119.115 geekflare.com. 30 IN A 104.27.118.115 ;; Query time: 12 msec ;; SERVER: 67.207.67.2#53(67.207.67.2) ;; WHEN: Wed Sep 16 17:58:45 UTC 2020 ;; MSG SIZE rcvd: 74 [root@lab ~]#

telnet

telnet connecte l'hôte et le port de la destination via un protocole telnet si une connexion s'établit signifie que la connectivité entre deux hôtes fonctionne correctement.

 [root@lab ~]# telnet gf.dev 443 Trying 104.27.153.44... Connected to gf.dev. Escape character is '^]'.

nslookup

nslookup est un programme pour interroger les serveurs de noms de domaine et résoudre les adresses IP.

 [root@lab ~]# nslookup relicflare.com Server: 67.207.67.2 Address: 67.207.67.2#53 Non-authoritative answer: Name: relicflare.com Address: 192.64.119.178 [root@lab ~]#

Sommaire

La mise en réseau sous Linux est un vaste sujet, avec un grand nombre de commandes et d'utilitaires. Dans cet article, nous avons discuté de certaines commandes couramment utilisées qui, espérons-le, vous aideront à gérer et à sécuriser votre réseau.