Product SiteDocumentation Site

10.9. Eines de diagnòstic de xarxa

When a network application does not run as expected, it is important to be able to look under the hood. Even when everything seems to run smoothly, running a network diagnosis can help ensure everything is working as it should. Several diagnosis tools exists for this purpose; each one operates on a different level. It would go beyond the scope of this book to discuss all tools, so we will focus on the more well-known and commonly used tools in the following sections.

10.9.1. Diagnòstic local: netstat

Esmentem primer el comandament netstat (al paquet net-tools); mostra un resum instantani de l'activitat de xarxa d'una màquina. Quan s'invoca sense cap argument, aquesta ordre llista totes les connexions obertes; aquesta llista pot ser molt detallada, ja que inclou molts sòcols de domini Unix (àmpliament utilitzats per dimonis) que no impliquen la xarxa en absolut (per exemple, la comunicació dbus, el trànsit X11, i comunicacions entre sistemes de fitxers virtuals i l'escriptori).
Per tant, les invocacions comunes utilitzen opcions que alteren el comportament de netstat. Les opcions més utilitzades inclouen:
  • -t, que filtra els resultats incloent només connexions TCP;
  • -u, que funciona de manera similar per a les connexions UDP; aquestes opcions no són mútuament excloents, i una d'elles és suficient per deixar de mostrar les connexions de domini Unix;
  • -a, també llista els sòcols en estat d'escolta (esperant connexions entrants);
  • -n, per mostrar els resultats numèricament: adreces IP (sense resolució DNS), números de port (sense els àlies definits a /etc/services) i identificadors d'usuari (sense noms d'usuari);
  • -p, per llistar els processos implicats; aquesta opció només és útil quan netstat s'executa com a usuari arrel, ja que els usuaris normals només veuran els seus propis processos;
  • -c, per actualitzar contínuament la llista de connexions.
Altres opcions, documentades a la pàgina del manual netstat(8), proporcionen un control encara més refinat sobre els resultats mostrats. A la pràctica, les primeres cinc opcions s'utilitzen tan sovint juntes que els administradors de xarxes i sistemes pràcticament van adquirir netstat -tupan com a acte reflex. Els resultats típics, en una màquina no massa carregada, poden ser com els següents:
# netstat -tupan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      397/rpcbind     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      431/sshd        
tcp        0      0 0.0.0.0:36568           0.0.0.0:*               LISTEN      407/rpc.statd   
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      762/exim4       
tcp        0    272 192.168.1.242:22        192.168.1.129:44452     ESTABLISHED 1172/sshd: roland [
tcp6       0      0 :::111                  :::*                    LISTEN      397/rpcbind     
tcp6       0      0 :::22                   :::*                    LISTEN      431/sshd        
tcp6       0      0 ::1:25                  :::*                    LISTEN      762/exim4       
tcp6       0      0 :::35210                :::*                    LISTEN      407/rpc.statd   
udp        0      0 0.0.0.0:39376           0.0.0.0:*                           916/dhclient    
udp        0      0 0.0.0.0:996             0.0.0.0:*                           397/rpcbind     
udp        0      0 127.0.0.1:1007          0.0.0.0:*                           407/rpc.statd   
udp        0      0 0.0.0.0:68              0.0.0.0:*                           916/dhclient    
udp        0      0 0.0.0.0:48720           0.0.0.0:*                           451/avahi-daemon: r
udp        0      0 0.0.0.0:111             0.0.0.0:*                           397/rpcbind     
udp        0      0 192.168.1.242:123       0.0.0.0:*                           539/ntpd        
udp        0      0 127.0.0.1:123           0.0.0.0:*                           539/ntpd        
udp        0      0 0.0.0.0:123             0.0.0.0:*                           539/ntpd        
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           451/avahi-daemon: r
udp        0      0 0.0.0.0:39172           0.0.0.0:*                           407/rpc.statd   
udp6       0      0 :::996                  :::*                                397/rpcbind     
udp6       0      0 :::34277                :::*                                407/rpc.statd   
udp6       0      0 :::54852                :::*                                916/dhclient    
udp6       0      0 :::111                  :::*                                397/rpcbind     
udp6       0      0 :::38007                :::*                                451/avahi-daemon: r
udp6       0      0 fe80::5054:ff:fe99::123 :::*                                539/ntpd        
udp6       0      0 2001:bc8:3a7e:210:a:123 :::*                                539/ntpd        
udp6       0      0 2001:bc8:3a7e:210:5:123 :::*                                539/ntpd        
udp6       0      0 ::1:123                 :::*                                539/ntpd        
udp6       0      0 :::123                  :::*                                539/ntpd        
udp6       0      0 :::5353                 :::*                                451/avahi-daemon: r
Com era d'esperar, es mostren les connexions establertes, dues connexions SSH en aquest cas, i les aplicacions que esperen connexions entrants (mostrades amb LISTEN), en particular el servidor de correu electrònic Exim4 que escolta pel port 25.

10.9.2. Diagnòstic remot: nmap

nmap (al paquet del mateix nom) és, d'alguna manera, l'equivalent remot per netstat. Pot escanejar un conjunt de ports "ben coneguts" per a un o diversos servidors remots, i llista els ports on es troba una aplicació per respondre a les connexions entrants. A més, nmap és capaç d'identificar algunes d'aquestes aplicacions, de vegades fins i tot el seu número de versió. La contrapartida d'aquesta eina és que, ja que funciona remotament, no pot proporcionar informació sobre processos o usuaris; no obstant això, pot operar en diversos objectius alhora.
Una invocació típica nmap només utilitza l'opció -A (de manera que nmap intenta identificar les versions del programari del servidor que troba) seguida d'una o més adreces IP o noms DNS de màquines per escanejar. De nou, hi ha moltes més opcions per controlar el comportament d'nmap; si us plau consulteu la documentació de la plana del manual nmap(1).
# nmap debian
Starting Nmap 7.80 ( https://nmap.org ) at 2022-02-22 20:58 CET
Nmap scan report for debian (192.168.122.57)
Host is up (0.000087s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
79/tcp  open  finger
80/tcp  open  http
113/tcp open  ident

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
# nmap -A localhost
nmap -A localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2022-02-22 20:56 CET
Stats: 0:01:16 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 83.33% done; ETC: 20:57 (0:00:15 remaining)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000086s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 994 closed ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 8.4p1 Debian 5 (protocol 2.0)
|_auth-owners: foobar
25/tcp  open  smtp    Postfix smtpd
|_auth-owners: foobar
|_smtp-commands: debian, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING, 
| ssl-cert: Subject: commonName=debian
| Subject Alternative Name: DNS:debian
| Not valid before: 2022-02-22T14:48:42
|_Not valid after:  2032-02-20T14:48:42
|_ssl-date: TLS randomness does not represent time
79/tcp  open  finger?
|_auth-owners: foobar
|_finger: ERROR: Script execution failed (use -d to debug)
80/tcp  open  http    Apache httpd 2.4.52 ((Debian))
|_auth-owners: foobar
|_http-server-header: Apache/2.4.52 (Debian)
|_http-title: Apache2 Debian Default Page: It works
113/tcp open  ident   Liedentd (Claimed user: foobar)
|_auth-owners: foobar
631/tcp open  ipp     CUPS 2.3
|_auth-owners: foobar
| http-robots.txt: 1 disallowed entry 
|_/
|_http-server-header: CUPS/2.3 IPP/2.1
|_http-title: Home - CUPS 2.3.3op2
Service Info: Host:  debian; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 87.91 seconds
As expected, e.g. the SSH, Apache and Postfix applications are listed. Note that not all applications listen on all IP addresses; since Postfix is only accessible on the lo loopback interface, it only appears during an analysis of localhost and not when scanning debian (which maps to the enp1s0 interface on the same machine).

10.9.3. «Sniffers»: tcpdump i wireshark

A vegades cal mirar el que realment passa pel cable, paquet per paquet. Aquests casos requereixen un “analitzador de trames”, més conegut com a «sniffer». Aquesta eina observa tots els paquets que arriben a una interfície de xarxa donada i els mostra de manera fàcil d'interpretar.
L'eina venerable en aquest domini és tcpdump, disponible com a eina estàndard en una àmplia gamma de plataformes. Permet molts tipus de captura de trànsit de xarxa, però la representació d'aquest trànsit roman bastant obscura. Per tant, no la descriurem amb més detall.
Una eina més recent (i més moderna), wireshark (al paquet wireshark), s'ha convertit en la nova referència en l'anàlisi de trànsit de xarxa a causa dels seus molts mòduls de descodificació que permeten una anàlisi simplificada dels paquets capturats. Els paquets es mostren gràficament amb una organització basada en les capes de protocol. Això permet a l'usuari visualitzar tots els protocols implicats en un paquet. Per exemple, donat un paquet que conté una sol·licitud HTTP, wireshark mostra, per separat, la informació relativa a la capa física, la capa Ethernet, la informació del paquet IP, els paràmetres de la connexió TCP, i finalment la sol·licitud HTTP.
L'analitzador de trànsit de xarxa wireshark

Figura 10.1. L'analitzador de trànsit de xarxa wireshark

En el nostre exemple, els paquets que viatgen sobre SSH es filtren (amb el filtre !tcp.port == 22). El paquet que es mostra actualment es va generar a la capa de transport del protocol SSHv2.