Herramientas de red en Linux (Parte I)
En este post y en el siguiente vamos a ver una seríe de herramientas que nos facilitaran la comprobación y monitorización de la red en un servidor Linux.
En esta primera parte se mostraran las herramientas básicas y en la segunda se verán herramientas avanzadas para comprobación y monitorización de la red.
Ficheros de Log
Una de las primeras comprobaciones es ver la información facilitada por los ficheros de log, en concreto del fichero donde el Kernel de Linux vuelca la información de los dispositivos en el arranque.
El ubicación del fichero de log donde se vuelca la información se encuentra en el directorio /var/log y dependiendo de la distribución podrá llamarse dmesg, syslog o messages.
El comando dmesg vuelca la información del log independientemente de nombre del fichero.
El siguiente ejemplo vemos la parte del log donde se muestra la detección de la tarjeta de red:
Cache ARP
La MAC (Media Access control) es un identificador único de la tarjeta de red asignado por el fabricante lo que permite identificar unívocamente una tarjeta de red en concreto.
Cuando el sistema comunica con otros dispositivos de red mapea la MAC con la IP y guarda está relación en la denominada tabla ARP, manteniendo una cache de estas asociaciones.
El comando arp permite modificar o consultar la tabla ARP.
Paquetes de eco ICMP
Una de las herramientas básicas para comprobar la conectividad de red el comando ping, este comando envía un paquete llamado ICMP (Internet Control Mesassage Protocol) a un equipo remoto esperando que este le conteste con la confirmación de llegada del paquete.
Ejemplo de uso:
# ping
Para realizar un ping a toda la red, es decir un ping de broadcast utilaremos el parámetro «-b», por ejemplo
# ping -b 192.168.1.255
Modificando parámetros del Kernel podemos evitar que se responda el «echo» del comando ping. Por defecto esta deshabilitado para los paquetes ICMP de broadcast. Para modificarlo modificaremos los siguientes parámetros en el fichero /etc/sysctl.conf:
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
El valor 1 indica deshabilitado y 0 habilitado.
Comprobación de rutas
Cuando se realiza la comunicación entre dos equipos se realiza a través de varios dispositivos, en el caso de tener problemas en la comunicación es importante saber si el “camino” está cortado en algún segmento de la comunicación. A través del comando traceroute podemos ver todos los “saltos” que se realiza en una comunicación.
Ejemplo de uso:
# traceroute
Otra herramienta para la comprobación de rutas es mtr, combina la funcionalidad de ping con traceroute. Al ejecutarla se mantiene un bucle donde podemos ver las estadísticas de los nodos utilizados por la conexión.
# mtr
www.google.es
Comprobación conectividad cliente/servidor
Con los anteriores comandos hemos comprobado la conectividad, pero si queremos comprobar cómo se comporta el tráfico entre el cliente y el servidor podemos utilizar la herramienta nc (netcat).
Este comando permite generar un cliente y un servidor para poder enviar tráfico a través de la conexión entre ambos.
Por ejemplo iniciaremos con nc un equipo como servidor por el puerto 8080:
# nc –l 8080
Y en otro equipo iniciaremos el cliente indicando la IP y el puerto del servidor.
# nc 10.0.2.4 8080
Esto establecerá un túnel de conexión entre el cliente y el servidor. Todo lo que se escriba en la consola del cliente será recibido en el servidor.
Obteniendo información de equipos
En la comprobación de las comunicaciones también es conveniente comprobar la resolución de nombres en la red.
Podemos interrogar a los equipos de la red con el comando host, este comando consulta el servidor DNS para determinar la ip de un equipo:
# host www.google.es
Otro comando es dig que muestra todos los registros DNS asociados a un host:
# dig
www.google.es
Seguridad de red
Independientemente del firewall que protege frente a conexiones, en Linux, encontramos los TCP Wappers que son bibliotecas que provee un control de acceso simple a las aplicaciones que lo soporten.
Los TPC Wrappers utilizan listas de control de acceso (ACLs) basadas en hosts y utilizadas para filtrar accesos de red a los servicios locales.
Las listas de acceso son definidas en dos ficheros:
- /etc/hosts.allow
- /etc/hosts.deny