Académique Documents
Professionnel Documents
Culture Documents
Vous avez appris à surveiller l'activité du système via l'analyse des fichiers de traces
et des processus. Dans ce dernier chapitre, je vous propose de nous intéresser à
l'activité réseau du serveur.
1. Nous utiliserons les commandes ss et lsof pour relever les ports en écoute
de la machine,
2. Nous explorerons les outils bmon et iptraf qui affichent l'activité en temps réel
des interfaces,
3. Nous lancerons quelques captures de trames avec l'utilitaire tcpdump et nous
les afficherons dans l'analyseur de paquets wireshark
Relevez les services réseau mis à disposition par le système
Pour héberger un service réseau, votre serveur Linux doit disposer d'au moins une
adresse IP accessible sur un réseau. Chaque service réseau pourra alors ouvrir un
port en écoute et l'associer à cette adresse IP.
La commande ss
La commande ss (pour "socket statistics") est fournie par le
package iproute2 installé en standard sur les distributions.
Les plus anciens d'entre nous auront connu netstat, mais le paquet net-tools, qui
reste disponible, n'est plus maintenu et n'est donc plus installé par défaut sur les
distributions.
Cette commande dispose de nombreuses options. Je vais simplement vous indiquer
celles que j'utilise le plus fréquemment.
Par ailleurs, étant donné que tout est fichier sous Linux, vous pourrez remarquer
que chaque "socket" dispose de son "file descriptor" (fd sur les lignes résultat).
La commande lsof
La commande lsof(pour "list open files"), très connue également (fournie par le
package lsof du même nom), s'attache à relever tous les fichiers ouverts. Il est
donc possible de retrouver ces éléments avec cette commande.
Voyons tout de suite comment utiliser ss et lsof pour afficher la liste des ports
ouverts en écoute sur le système. Nous verrons ensemble comment interpréter les
résultats de cette commande. C’est parti !
Observez l’activité réseau sur les interfaces
Maintenant que vous savez relever les processus en écoute sur le serveur, il est
temps de vous pencher sur l'analyse de l'activité réseau sur les cartes du serveur.
Encore une fois, Linux fourmille d'outils permettant de vous aider à ce sujet. Je vais
vous proposer deux outils que j'utilise fréquemment :
Nload,
iftop(très connu aussi celui-là),
slurm,
tcptrack,
speedometer(il a l'avantage de présenter, en mode terminal, une vue assez
colorée du trafic sur une interface)
et j'en oublie sûrement...
Allez, je vous propose d'installer et d'exécuter bmon puis iptraf pour relever l’activité
réseau sur les interfaces. On y va :
Capturez le trafic réseau d’une interface
Enfin, dernier point de ce chapitre : il vous sera sûrement nécessaire de capturer le
trafic d'une interface.
Pour cela, il existe un utilitaire en mode terminal très connu également, qui se
nomme tcpdump. Il s'installe avec le package portant le même nom.
Vous allez constater que cet outil peut être très très verbeux ! Il est important de bien
spécifier les options de capture en fonction de votre besoin.
Avec tcpdump, vous avez aussi la possibilité d’enregistrer votre capture dans un
fichier, qui sera ensuite lisible par wireshark, le très célèbre analyseur de trames
réseau.
Dans la vidéo ci-dessous, je vous propose :
En résumé
La commande ss permet de relever les ports ouverts et les processus
associés sur un serveur Linux
Complétée par la commande lsof, on peut référencer tous les fichiers qui
étaient ouverts par des processus en écoute
Grâce à bmon et iptraf, on peut lire le trafic entrant et sortant en temps réel
sur les cartes réseau de la machine
tcpdump et wireshark permettent de capturer et d’analyser ce trafic
Ce chapitre vient clôturer ce cours d’initiation à l'administration d'un serveur Linux.
J'espère qu'il vous a plu et je vous dis à bientôt sur OpenClassrooms !
Étape 1
Connecté sur votre serveur Linux (console physique ou terminal) vérifiez que vous
pouvez lancer une commande ping sur une autre machine joignable sur votre réseau
local. (Dans l'exemple ici, je lance la commande ping sur la machine qui héberge la
VM Linux).
seb@debServer:~$ ping 172.20.10.2
PING 172.20.10.2 (172.20.10.2) 56(84) bytes of data.
64 bytes from 172.20.10.2: icmp_seq=1 ttl=64 time=0.401 ms
64 bytes from 172.20.10.2: icmp_seq=2 ttl=64 time=0.574 ms
64 bytes from 172.20.10.2: icmp_seq=3 ttl=64 time=0.479 ms
64 bytes from 172.20.10.2: icmp_seq=4 ttl=64 time=0.528 ms
^C
--- 172.20.10.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3728ms
rtt min/avg/max/mdev = 0.401/0.495/0.574/0.064 ms
seb@debServer:~$
Vous allez constater que sous Linux, la commande ping ne s'arrête pas toute
seule… Pour la stopper, utilisez le signal SIGINT vu pendant le cours et la
combinaison de touche CTRL+c (heureusement pour nous que cette commande
écoute ce signal !).
Étape 2
À l'aide d'une connexion secondaire (seconde console physique ou nouvelle session
via un terminal), sous le compte root, lancez la commande tcpdump en indiquant en
paramètre le protocole utilisé par la commande ping: icmp. Et vérifiez depuis la
première connexion en relançant la commande ping que vous parvenez à relever le
trafic icmp. Vous devriez obtenir quelque chose ressemblant à ça :
root@debServer:~# tcpdump icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), snapshot length 262144
bytes
17:17:00.011565 IP 172.20.10.13 > 172.20.10.2: ICMP echo request, id 4673,
seq 1, length 64
17:17:00.012004 IP 172.20.10.2 > 172.20.10.13: ICMP echo reply, id 4673,
seq 1, length 64
17:17:01.270579 IP 172.20.10.13 > 172.20.10.2: ICMP echo request, id 4673,
seq 2, length 64
17:17:01.271290 IP 172.20.10.2 > 172.20.10.13: ICMP echo reply, id 4673,
seq 2, length 64
17:17:02.294303 IP 172.20.10.13 > 172.20.10.2: ICMP echo request, id 4673,
seq 3, length 64
17:17:02.294849 IP 172.20.10.2 > 172.20.10.13: ICMP echo reply, id 4673,
seq 3, length 64
17:17:03.321463 IP 172.20.10.13 > 172.20.10.2: ICMP echo request, id 4673,
seq 4, length 64
17:17:03.322027 IP 172.20.10.2 > 172.20.10.13: ICMP echo reply, id 4673,
seq 4, length 64
^C
8 packets captured
8 packets received by filter
0 packets dropped by kernel
Idem ici, tcpdump écoute SIGINT, donc un petit CTRL+c pour l'arrêter.
Étape 3
Réitérez cette opération en indiquant un fichier d'enregistrement pour tcpdump, par
exemple/tmp/traficICMP.dump. Capturez ainsi quelques paquets ICMP (entre 4 et 8
par exemple) tels que :
root@debServer:~# tcpdump icmp -w /tmp/traficICMP.dump
tcpdump: listening on enp0s3, link-type EN10MB (Ethernet), snapshot length
262144 bytes
^C6 packets captured
6 packets received by filter
0 packets dropped by kernel
Étape 4
Transférez cette trace réseau sur un poste de travail disposant de wireshark. Dans
l'exemple ci dessous, je transfère ce fichier sur un poste Ubuntu via scp, tel que :
root@debServer:~# scp /tmp/traficICMP.dump seb@172.20.10.2:/home/seb/
The authenticity of host '172.20.10.2 (172.20.10.2)' can't be established.
ECDSA key fingerprint is
SHA256:XD+IBQsATgzNTJ0PVKyOkCYKHekM9b408PvSA7cGF1o.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.20.10.2' (ECDSA) to the list of known
hosts.
seb@172.20.10.2's password:
traficICMP.dump 100%
708 1.2MB/s 00:00
root@debServer:~#
Étape 5
Ouvrez la trace avec Wireshark telle que :
La visualisation d’une trace réseau sur Wireshark
Étape 6
Dépliez les différentes couches OSI de la trace et notamment la couche ICMP,
pouvez-vous relever les données envoyées par la commande ping? Quelle taille fait
le paquet ICMP ?
Détail des paquets ICMP dans une trace réseau
Étape 7
Sélectionnez le paquet de données ICMP et faites un clic droit / show packet bytes
(ou CTRL+SHIFT+O ) afin de visualiser ces données :
Contenu du paquet ICMP
En gros la commande ping envoie quelques caractères tels
que!"#$%&'()*+,-./01234567au format hexadécimal, voilà une balle originale pour
faire un ping/pong 😁
Étape 8
Cherchez dans les options de la commande ping comment passer la taille du paquet
ICMP à 128 bits et effectuez une nouvelle capture. Que devient notre balle de ping
pong ?
Réponse : Elle est complétée entre autres avec les caractères de l’alphabet en
minuscule et majuscule !
Contenu du paquet ICMP
Vous n'avez pas atteint le seuil de validation de cet exercice, c'est-à-dire 70%. Ce n'est pas
très grave car vous pourrez refaire le quiz dans 24h.
Compétences évaluées
Question 1
/var/log/syslog
/var/log/user.log
/var/log/auth.log
/var/log/kern.log
Dans ce fichier de configuration Rsyslog, Les traces de processus d'authentification
sont écrites sur/var/log/auth.log.
Le fichier /var/log/syslog contient toutes les traces exceptées celles concernant
justement les processus d'authentification.
Question 2
Question 3
Dans quel fichier de traces allez-vous trouver les informations concernant les
redémarrages du serveur ?
/var/log/user.log
/var/log/wtmp
Le fichier de trace wtmp contient toutes les informations de connexions et
déconnexions au système ainsi que les traces des redémarrages système.
Question 4
Vrai.
Faux.
La première ligne de cette trace vous indique que le compte root est actuellement
connecté depuis la première console physique du serveur et qu'il exécute un
shell Bash.
Question 5
Question 7
Question 8
Parmi les outils suivants, lesquels permettent d'observer le trafic des cartes
réseau du serveur ?
iptraf
iftop
lsof
bmon
ps
La commande lsof pour "List Open File" permet de consulter tous les fichiers
ouverts par tous les processus Linux. La commande ps permet d'analyser l'activité
des processus sur le processeur.
Question 10
Votre serveur est équipé des cartes réseau enp0s3 pour le LAN et enp0s8 pour
le WAN et Internet. Quelle commande allez-vous lancer pour enregistrer dans
un fichier de trace le trafic Internet du serveur ?
tcpdump http
o
tcpdump -i enp0s3 icmp -w capture.log
tcpdump icmp
La commande tcpdump avec l'option -i permet d'indiquer en paramètre la carte
réseau sujette à la capture. Il est possible d'appliquer un filtre sur le protocole en le
passant en paramètre. Enfin l'option -w permet d'indiquer un fichier pour conserver
le trafic.