¿Cómo monitorear trafico de red con iptraf?

Hoy hablaremos sobre una pequeña aplicación para monitorear tráfico de red: iptraf.

iptraf es una aplicación de línea de comandos con interfaz curses que captura, vía librerías pcap, paquetes de red en alguna interfaz de red determinada, y nos brinda información sobre los mismos.
Para las tareas cotidianas de un sysadmin es una herramienta importante dado que cuando se cae algún servicio, o hay alguna intrusión externa que compromete la seguridad de un datacenter, analizar el tráfico de red resulta sumamente importante.
Normalmente estas herramientas están dispuestas en puertas de enlace de red hacia Internet, o de segmentos de datacenters, o zonas desmilitarizadas (DMZ), de modo que la herramienta “vea” pasar por la red todo el tráfico a analizar.
iptraf se encuentra en los repositorios de Debian GNU/Linux, por lo que podremos instalarlo utilizando la siguiente instrucción:

apt-get install iptraf

Algunas opciones de línea de comandos-

  • -i iface: Permite especificar el monitoreo directo en una interfaz determinada de red.
  • -g iface: Comienza las estadísticas generales directamente en una interfaz.
  • -d iface: Idem para iniciar directamente las estadísticas detalladas.
  • -s iface: Permite monitorear directamente el trafico tcp y udp
  • -z iface: Permite acceder directamente al conteo de paquetes por tamaño.
  • -l iface: Permite monitorear paquetes y bytes entrantes y salientes por interfaz de red. Si iface es “all” se monitorearán todas las interfaces.
  • -u: Permite el uso de interfaces no soportadas, o nombres en alias de interfaces comunes que no son reconocidos por iptraf.
  • -L logfile: Permite especificar un archivo de log para recolectar toda la información de estado del proceso de monitoreo.
  • -z timeout: Permite especificar además de alguna de las opciones anteriores, un tiempo, en minutos, máximo de ejecución del proceso
  • -B: Corre el proceso iptraf en segundo plano.

Un ejemplo de archivo de log:

root@debian:~# iptraf-ng -d wlan0 -L /tmp/iptr.log
root@debian:~# cat /tmp/iptr.log
Wed Jan  1 19:12:15 2014; ******** LAN traffic monitor started ********

*** LAN traffic log, generated Wed Jan  1 19:12:18 2014

Ethernet address: 48:5d:60:b5:17:2f
Incoming total 13 packets, 1222 bytes; 13 IP packets
Outgoing total 13 packets, 2035 bytes; 13 IP packets
Average rates:      3.26 kbps incoming,      5.42 kbps outgoing

Ethernet address: 00:1e:58:c1:3d:5f
Incoming total 13 packets, 2035 bytes; 13 IP packets
Outgoing total 13 packets, 1222 bytes; 13 IP packets
Average rates:      5.42 kbps incoming,      3.26 kbps outgoing

Running time: 3 seconds
Wed Jan  1 19:12:18 2014; ******** LAN traffic monitor stopped ********
Wed Jan  1 19:19:52 2014; ******** LAN traffic monitor started ********

*** LAN traffic log, generated Wed Jan  1 19:20:30 2014

Ethernet address: 00:1e:58:c1:3d:5f
Incoming total 26 packets, 4582 bytes; 26 IP packets
Outgoing total 27 packets, 7928 bytes; 27 IP packets
Average rates:      0.96 kbps incoming,      1.66 kbps outgoing
Last 5-second rates:      0.73 kbps incoming,      0.65 kbps outgoing

Ethernet address: 48:5d:60:b5:17:2f
Incoming total 27 packets, 7928 bytes; 27 IP packets
Outgoing total 28 packets, 4860 bytes; 28 IP packets
Average rates:      1.66 kbps incoming,      1.02 kbps outgoing
Last 5-second rates:      0.65 kbps incoming,      0.73 kbps outgoing

Ethernet address: ff:ff:ff:ff:ff:ff
Incoming total 2 packets, 278 bytes; 2 IP packets
Outgoing total 0 packets, 0 bytes; 0 IP packets
Average rates:      0.06 kbps incoming,      0.00 kbps outgoing
Last 5-second rates:      0.00 kbps incoming,      0.00 kbps outgoing

Running time: 38 seconds
Wed Jan  1 19:20:30 2014; ******** LAN traffic monitor stopped ********

Administración de señales.

iptraf está configurado para recibir e interpretar dos señales de IPC.
IPC, o Inter Process Communication por sus siglas en inglés, representan una serie de mecanismos de comunicación entre procesos, en entornos POSIX.1, y que permiten a un proceso de alguna manera enviar información a otro. Entre esos mecanismos disponemos de segmentos de memoria compartida, sockets, pipes, fifos, o, entre otros, señales.

En Linux podemos enviar una señal utilizando nuestro intérprete de comandos muy simplemente mediante el comando kill o killall y un número o sigla de identificación de señal.
En el caso particular que nos trae hoy, las señales de usuario 1 y 2, respectivamente, SIGUSR1 y SIGUSR2, son interpretadas particularmente por nuestro procesos iptraf en ejecución.
SIGUSR1 efectua una rotación de logs mientras el proceso está en ejecución, y SIGUSR2 termina el proceso iptraf que esté corriendo. Esta segunda opción es importante conocerla, puesto que a veces, solo para mantener logs, podemos correr el proceso iptraf en segundo plano (modo background) sin obtener salida por pantalla, lo que hace imposible salir directamente de su interfaz mediante el menú de curses.

Claro está que USR2 es la señal que termina normalmente al proceso, aunque también podría terminarse abruptamente mediante señales comunes de terminación, como TERM o KILL.

Veamos un ejemplo. Si en una terminal levantamos el iptraf, por ejemplo, en modo detallado, y en segundo plano, para la interfaz wlan0, volveremos a tener el prompt para introducir comandos, pero el proceso habrá quedado corriendo en segundo plano.

root@debian:~# iptraf-ng -Bd wlan0
root@debian:~# ps fax|grep iptraf
16523 ?        Ss     0:00 iptraf-ng -Bd wlan0

Podremos terminar el proceso de alguna de las siguientes maneras:
root@debian:~# killall -USR2 iptraf-ng
root@debian:~# killall -12 iptraf-ng
root@debian:~# kill -USR2 16523
root@debian:~# killall -12 16523

Espero que les sirva esta potente herramienta de curses para monitorear sus redes! Seguiremos hablando de herramientas de monitoreo de tráfico en siguientes artículos! Por supuesto, para GNU/Linux 🙂

Origen: CLA Carrera Linux Argentina