Product SiteDocumentation Site

10.8. Herramientas de diagnóstico de red

Cuando una aplicación de red no funciona como esperamos es importante poder ver «bajo el capó». Aún cuando todo parezca estar funcionando, realizar un diagnóstico de red puede ayudar a asegurar que todo está funcionando como debe. Existen muchas herramientas de diagnóstico para este propósito, cada una de las cuales opera en un nivel diferente.

10.8.1. Diagnóstico local: netstat

Mencionemos primero el programa netstat (en el paquete net-tools); muestra un resumen instantáneo de la actividad de red de una máquina. Cuando lo ejecute sin parámetros, mostrará todas las conexiones abiertas; esta lista puede ser demasiado detallada ya que incluye muchos zócalos de dominio Unix (utilizados ampliamente por demonios) que no incluyen la red en absoluto (por ejemplo, la comunicación de dbus, tráfico X11 y comunicaciones entre sistemas de archivos virtuales y el escritorio).
Por lo tanto, invocaciones usuales utilizan opciones que modifican el comportamiento de netstat. Las opciones utilizadas más frecuentemente incluyen:
  • -t, que filtra los resultados para incluir sólamente conexiones TCP;
  • -u, que realiza algo similar por las conexiones UDP; estas opciones no son mutuamente excluyentes y una de ellas es suficiente para evitar mostrar información sobre conexiones de dominio Unix;
  • -a, para mostrar también los zócalos que están escuchando (que esperan conexiones entrantes);
  • -n, para mostrar los resultados numéricamente: direcciones IP (sin resolución DNS), números de puerto (sin alias definidos en /etc/services) y IDs de usuario (sin nombres de usuario);
  • -p, enumerar los procesos involucrados; esta opción sólo es útil cuando ejecute netstat como root ya que los usuarios normales sólo verán sus propios procesos;
  • -c, para actualizar continuamente la lista de conexiones.
Otras opciones, documentadas en la página de manual netstat(8), proveen un control más granular en los resultados mostrados. En la práctica,las primeras cinco opciones son utilizadas juntas tan seguido que los administradores de sistemas y red tiene el acto reflejo de ejecutar netstat -tupan. Los resultados típicos, en una máquina con poca carga, pueden parecerse a lo siguiente:
# 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:22              0.0.0.0:*               LISTEN      2224/sshd       
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      994/exim4       
tcp        0      0 192.168.1.241:22        192.168.1.128:47372     ESTABLISHED 2944/sshd: roland [
tcp        0      0 192.168.1.241:22        192.168.1.128:32970     ESTABLISHED 2232/sshd: roland [
tcp6       0      0 :::22                   :::*                    LISTEN      2224/sshd       
tcp6       0      0 ::1:25                  :::*                    LISTEN      994/exim4       
udp        0      0 0.0.0.0:68              0.0.0.0:*                           633/dhclient    
udp        0      0 192.168.1.241:123       0.0.0.0:*                           764/ntpd        
udp        0      0 127.0.0.1:123           0.0.0.0:*                           764/ntpd        
udp        0      0 0.0.0.0:123             0.0.0.0:*                           764/ntpd        
udp6       0      0 fe80::a00:27ff:fe6c:123 :::*                                764/ntpd        
udp6       0      0 2002:52e0:87e4:0:a0:123 :::*                                764/ntpd        
udp6       0      0 ::1:123                 :::*                                764/ntpd        
udp6       0      0 :::123                  :::*                                764/ntpd        
Como es esperado, enumera las conexiones establecidas: dos conexiones SSH en este caso y las aplicaciones esperando conexiones entrantes (mostradas como LISTEN), notablemente el servidor de correo Exim4 está escuchando en el puerto 25.

10.8.2. Diagnóstico remoto: nmap

nmap (en el paquete del mismo nombre) es, en cierta forma, el equivalente remoto de netstat. Puede escanear un conjunto de puertos «muy conocidos» de uno o más servidores remotos y enumerar los puertos donde encontró una aplicación que responda conexiones entrantes. Lo que es más, nmap puede identificar alguna de estas aplicaciones, a veces inclusive también su número de versión. La desventaja de esta herramienta es que, debido a que ejecuta de forma remota, no puede proveer información sobre procesos o usuarios; sin embargo, puede trabajar con varios objetivos al mismo tiempo.
Una invocación de nmap típica utilizará la opción -A (para que nmap intente identificar las versiones del software de servidor que encuentre) seguido de una o más direcciones IP o nombres DNS de los equipos a escanear. Nuevamente, existen muchas más opciones que proveen un control detallado del comportamiento de nmap; revise la documentación en la página de manual nmap(1).
# nmap mirwiz

nmap 192.168.1.30

Starting Nmap 6.00 ( http://nmap.org ) at 2013-11-13 11:00 CET
Nmap scan report for mirwiz (192.168.1.30)
Host is up (0.000015s latency).
Not shown: 997 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
111/tcp   open  rpcbind
10000/tcp open  snet-sensor-mgmt

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
# nmap -A localhost

Starting Nmap 6.00 ( http://nmap.org ) at 2013-11-13 10:54 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000084s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 996 closed ports
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 6.0p1 Debian 4 (protocol 2.0)
| ssh-hostkey: 1024 ea:47:e5:04:a0:b8:70:29:c2:94:3d:fe:a8:b8:b4:02 (DSA)
|_2048 81:5c:a4:56:ff:c0:bf:0d:cd:e6:cc:48:2f:15:78:ea (RSA)
25/tcp    open  smtp    Exim smtpd 4.80
| smtp-commands: mirwiz.internal.placard.fr.eu.org Hello localhost [127.0.0.1], SIZE 52428800, 8BITMIME, PIPELINING, HELP, 
|_ Commands supported: AUTH HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP 
111/tcp   open  rpcbind
| rpcinfo: 
|   program version   port/proto  service
|   100000  2,3,4        111/tcp  rpcbind
|   100000  2,3,4        111/udp  rpcbind
|   100024  1          40114/tcp  status
|_  100024  1          55628/udp  status
10000/tcp open  http    MiniServ 1.660 (Webmin httpd)
| ndmp-version: 
|_  ERROR: Failed to get host information from server
|_http-methods: No Allow or Public header in OPTIONS response (status code 200)
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=6.00%E=4%D=11/13%OT=22%CT=1%CU=40107%PV=N%DS=0%DC=L%G=Y%TM=52834C
OS:9E%P=x86_64-unknown-linux-gnu)SEQ(SP=102%GCD=1%ISR=105%TI=Z%CI=Z%II=I%TS
OS:=8)OPS(O1=M400CST11NW5%O2=M400CST11NW5%O3=M400CNNT11NW5%O4=M400CST11NW5%
OS:O5=M400CST11NW5%O6=M400CST11)WIN(W1=8000%W2=8000%W3=8000%W4=8000%W5=8000
OS:%W6=8000)ECN(R=Y%DF=Y%T=41%W=8018%O=M400CNNSNW5%CC=Y%Q=)T1(R=Y%DF=Y%T=41
OS:%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=41%W=0%S=A%A=Z%F=R%O=
OS:%RD=0%Q=)T5(R=Y%DF=Y%T=41%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=41%
OS:W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=41%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=
OS:)U1(R=Y%DF=N%T=41%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%
OS:DFI=N%T=41%CD=S)

Network Distance: 0 hops
Service Info: Host: mirwiz.internal.placard.fr.eu.org; OS: Linux; CPE: cpe:/o:linux:kernel

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 48.20 seconds
Como es esperado, se muestran las aplicaciones SSH y Exim4. Sepa que no todas las aplicaciones escuchan en todas las direcciones IP; debido a que sólo se puede acceder a Exim4 mediante la interfaz de «loopback» lo, sólo aparecerá durante un análisis de localhost pero no cuando se escanea mirwiz (asociado con la interfaz eth0 del mismo equipo).

10.8.3. «Sniffers»: tcpdump y wireshark

A veces uno necesita revisar lo que sucede literalmente en el cable, paquete por paquete. Estos casos requieren un «analizador de tramas», más comúnmente conocidos como «sniffers». Estas herramientas observan todos los paquetes en una interfaz de red dada y los muestran en una forma más amigable.
La herramienta de culto en este ámbito es tcpdump, disponible como una herramienta estándar en un amplio rango de plataformas. Permite muchos tipos de capturas de tráfico de red, pero la representación del mismo es bastante críptica. Por lo tanto no la describiremos en más detalle.
Una herramienta más reciente (y más moderna), wireshark (en el paquete wireshark), se está convirtiendo en la nueva referencia de análisis de tráfico de red debido a sus módulos de decodificación que permiten un análisis simplificado de los paquetes capturados. Muestra los paquetes gráficamente, organizados basándose en las capas de protocolos. Esto permite al usuario visualizar todos los protocolos involucrados en un paquete. Por ejemplo, en un paquete que contenga un pedido HTTP, wireshark mostrará por separado la información sobre la capa física, la capa Ethernet, la información IP del paquete, los parámetros de conexión TCP y finalmente el pedido HTTP mismo.
El analizador de tráfico de red wireshark

Figura 10.1. El analizador de tráfico de red wireshark

En nuestro ejemplo, filtramos los paquetes que viajan sobre SSH (con el filtro !tcp.port == 22). El paquete mostrado tiene expandida la capa HTTP.