Linux Networking: “three-way handshake”

Para establecer una conexión, TCP utiliza lo que se conoce como negociación en tres pasos (three-way handshake). Antes de que un cliente intente conectar con un servidor, se necesita que el servidor este escuchando por conexiones en un puerto que se encuentre abierto para ello, esto se llama una apertura pasiva (passive open), se debe verificar que el servidor-destino ofrezca el servicio activo y esté aceptando peticiones en el número de puerto que el cliente intenta usar para la sesión. Una vez que se establece la apertura pasiva, un cliente puede iniciar una apertura activa (active open).

Al establecer una negociación en tres pasos ocurre lo siguiente:

  • SYN: La apertura activa es iniciada por el cliente que envía un SYN al servidor. El cliente establece el número de secuencia del segmento a un valor al azar A.
  • SYN-ACK: En respuesta, el servidor responde con un SYN-ACK. El número de acuse de recibo se fija a uno más que el número de secuencia recibido, por ejemplo, A+1 y el número de secuencia que el servidor elige para el paquete es otro número aleatorio, por ejemplo, puede ser B.
    En caso de que el servidor no se encuentre escuchando en ese puerto, se puede regresar al cliente un paquete de respuesta con el bit RST activado, lo que significa el rechazo del intento de conexión.
  • ACK: Por último, el cliente envía un ACK de regreso al servidor. El número de secuencia se fija al número de acuse de recibo A+1 y el número de acuse de recibo se fija a uno más que el número de secuencia recibido es decir, B+1.

Establecimiento de conexión

Alcanzada esta fase, tanto el cliente como el servidor reconocen la conexión.  Se puede decir que:

  • Las fases 1, 2 establecen el parámetro de conexión (número de secuencia) para una dirección y se reconoce el acuse de recibo.
  • Las fases 2, 3 establecen el parámetro de conexión (número de secuencia) para la otra dirección y se reconoce el acuse de recibo. Con esto es que se establece una comunicación conocida como “full-duplex”.
sudo wireshark&

De la misma manera se puede usar (es mejor crear un grupo y darle sus permisos necesarios):

gksu wireshark

Seguidamente seleccionar la interface, empezar a capturar y luego ingresar el siguiente filtro:

(ip.dst == IP_EXTERNA && ip.src == IP_LOCAL) || (ip.dst == IP_LOCAL && ip.src == IP_EXTERNA) && tcp.port == 80

Usar tcpdump es un poco más divertido:

tcpdump -i eth1 -nN -c 15 ‘(tcp) and (((src host IP_LOCAL) and (dst host IP_EXTERNA)) or ((src host IP_EXTERNA) and (dst host IP_LOCAL))) and (port 80)’

Linux Networking: Rendimiento en tiempo real

Transmitiendo en “bits per second: kilobits (kb)”:

Los paquetes pueden variar en tamaño dependiendo de la tecnología y de la Red que se utiliza.

Recibe RX:

RxRate es la tasa a la cual los paquetes son recibidos por el equipo.

RxPkts es el número de paquetes que su equipo ha recibido.

Envía TX:

TxRate es la tasa a la cual los paquetes son enviados por el equipo.

TxPkts es el número de paquetes que su equipo ha enviado.

Ver la tasa RX/TX de una interface en “bits per second”

while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth1 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done

Por favor consultar: commandlinefu

Esenciales

apt-get install vnstat nethogs iftop iptraf

VNstat

Es un monitor de tráfico de red basado en consola. Mantiene un registro del tráfico de red por hora, diario, semanal y mensual para la interfaz seleccionada. Sin embargo, no es un rastreador de paquetes (packet sniffer).

Entonces le decimos a VNstat que empiece a monitorear las interfaces eth0 y eth1:

# WAN - Public Interface
vnstat -u -i eth0

# LAN - Private Interface
vnstat -u -i eth1

NetHogs

Herramienta “net top” para agrupar el tope de ancho de banda por proceso.

NetHogs es una pequeña herramienta ‘top net’. En lugar de presentar el tráfico por protocolo o por “subnet”, más bien agrupa el ancho de banda por proceso. Además no necesita que algún módulo especial del Kernel sea requerido de cargar.

Entonces si de repente hay una gran cantidad de tráfico de red, se puede encender NetHogs para ver inmediatamente que PID lo está causando, también si se trata de algún proceso hilado, hay que traerlo abajo (“kill it”).

apt-get install nethogs

Para agrupar el ancho de banda por procesos en nuestra LAN:

nethogs eth1

iftop

Para visualizar el uso del ancho de banda sobre una interfaz. Con iftop se puede escuchar el tráfico de red en una interfaz dada.

De forma predeterminada, iftop buscará los “hostnames” asociados con las direcciones que encuentre en los paquetes. Esto puede causar mucho tráfico sustancial de sí mismo y resultar en una pantalla confusa, dif’icil de entender. Es posible cambiar este comportamiento usando la opción -n, también pulsando r cuando el programa se está ejecutando.

Por defecto, iftop cuenta todos los paquetes IP que pasan a través del filtro, y la dirección del paquete se determina de acuerdo a la dirección en la que el paquete se mueve a través de la interfaz.

Las posibilidades de uso son muchas:

iftop -i eth0 -P -N

iftop -i eth1 -P -N

iftop -i eth1 -f 'src 192.168.0.20' -P -N'

iftop -i eth1 -f 'dst port 22'

iftop -i eth1 -f 'src 192.168.0.20 and dst port 22'

iftop -i eth1 -f 'src 192.168.0.20 and dst port 22'

iftop -i eth1 -f 'not host 192.168.0.20' -P -N'

iftop -i eth1 -f 'dst port 22 and not host 192.168.0.21'

iftop -i eth1 -f 'dst 192.168.0.1' -P -N'

iftop -i eth1 -f 'src 192.168.0.20 and dst 192.168.0.1' -P -N'

IPtraf

iptraf -i all

iptraf es un monitor de LAN IP basado en ncurses que genera diversas estadísticas de red, incluyendo información TCP, cuentas UDP, información ICMP y OSPF, información de carga Ethernet, estadísticas de nodo, “IP checksum errors”, entre otros.

Desde la terminal se puede correr iptraf sin ninguna opción, funciona en modo interactivo.

Comenzar las estadísticas generales por cada interfaz:

iptraf -g

Permite monitorear el tráfico TCP y UDP en la interfaz especificada:

iptraf -s eth0
iptraf -s eth1

Permite conocer el detalle de la interfaz indicada:

iptraf -d eth0
iptraf -d eth1

Volviendo a VNstat

vnstat

De una interfaz muestra la velocidad de transferencia actual en tiempo real hasta que se interrumpa. Las estadísticas se muestran tras la interrupción:

vnstat -i eth1 -l
vnstat -h

vnstat -d

vnstat -w

vnstat -m

Listar todos los puertos abiertos

netstat -tulpn

Sólo conexiones TCP:

netstat -nat

Sólo conexiones UDP:

netstat -nau