Configurar, supervisar y proteger las redes constituye una parte esencial del trabajo de un administrador de sistemas. Cuando se trata de gestionar redes Linux, hay muchos comandos y utilidades disponibles.

A veces, los sistemas en red fallan. Usted, como administrador, debe diagnosticar y resolver los problemas. La monitorización ayuda a detectar problemas y a solucionarlos antes de que las cosas se descontrolen. La supervisión de la seguridad y el rendimiento también forma parte esencial de las actividades de un administrador.

Aquí discutiremos algunos comandos comúnmente utilizados para administrar redes Linux.

ip

El paquete iproute2 incluye el comando ip que se utiliza para la configuración de redes y enrutamiento. Esto sustituye a los comandos tradicionales ifconfig y route.

ip toma un segundo argumento que especifica el objeto sobre el que desea ejecutar una orden y una acción como añadir, eliminar o mostrar.

enlace ip

iplink sirve para configurar, añadir y eliminar interfaces de red. Utilice el comando ip link show para mostrar todas las interfaces de red del sistema :

$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 02:35:97:08:6b:2a brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:6f:60:ff brd ff:ff:ff:ff:ff

Puede ver la página man para ip link con:

$ man ip-link

dirección ip

Utilice el comando ip address para mostrar direcciones, enlazar nuevas direcciones o borrar las antiguas. La página man comando ip dirección se denomina ip-dirección.

Por ejemplo, el siguiente comando muestra la dirección IP asignada a la interfaz de red enp0s8:

ip address show dev enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:6f:60:ff brd ff:ff:ff:ff:ff
    inet 10.0.0.51/24 brd 10.0.0.255 scope global enp0s8
...

ruta ip

Utilice la ruta IP para imprimir o mostrar la tabla de enrutamiento. El siguiente comando muestra el contenido de la tabla de enrutamiento:

$ ip route show
default via 10.0.2.2 dev enp0s3 
10.0.0.0/24 dev enp0s8 proto kernel scope link src 10.0.0.51 
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15

nmap

Aunque Nmap se había utilizado en muchas películas, Matrix Reloaded (Wikipedia, IMDB, Amazon) convirtió a Nmap en una estrella de cine.

Nmap («Network Mapper») es una potente utilidad utilizada para el descubrimiento de redes, la auditoría de seguridad y la administración. Muchos administradores de sistemas lo utilizan para determinar cuáles de sus sistemas están en línea, y también para la detección de sistemas operativos y servicios.

El escaneo por defecto de Nmap muestra los puertos, su estado (abierto/cerrado) y los protocolos. Envía un paquete a los 1000 puertos más comunes y comprueba la respuesta.

$ nmap 10.0.0.50

Iniciando Nmap 7.01 ( https://nmap.org ) en 2020-09-07 10:32 UTC
Informe de escaneo Nmap para 10.0.0.50
El host está activo (latencia de 0,00077s).
No se muestra: 997 puertos filtrados
PUERTO ESTADO SERVICIO
22/tcp abierto ssh
80/tcp abierto http
3306/tcp cerrado mysql

Para comprobar qué hosts de su red están activos

$ nmap -sn 10.0.0.0/24

Iniciando Nmap 7.01 ( https://nmap.org ) en 2020-09-07 11:59 UTC
Informe de escaneo Nmap para 10.0.0.1
El host está activo (latencia de 0,00084s).
Informe de escaneo Nmap para 10.0.0.50
El host está activo (latencia de 0,0021s).
Informe de escaneo Nmap para 10.0.0.51
El host está activo (latencia de 0,00026s).
Nmap realizado: 256 direcciones IP (3 hosts up) escaneadas en 2,61 segundos

Utilice la bandera -O para identificar qué sistema operativo está ejecutando un host.

$ sudo nmap 10.0.0.50 -O
Iniciando Nmap 7.01 ( https://nmap.org ) en 2020-09-07 13:44 UTC
Informe de escaneo Nmap para 10.0.0.50
El host está activo (latencia de 0.00053s).
...
En ejecución: Linux 3.X
CPE del SO: cpe:/o:linux:linux_kernel:3
Detalles del SO: Linux 3.10 - 3.19
Distancia de red: 1 salto
Detección de SO realizada. Por favor, informe de cualquier resultado incorrecto en https://nmap.org/submit/ .
Nmap realizado: 1 dirección IP (1 host up) escaneada en 21,95 segundos

Una advertencia: Nadie aprecia que sus sistemas sean escaneados a través de Internet. Así que antes de hacerlo, pida permiso.

También puede utilizar Nmap en Windows, consulte esta guía de instalación.

ping

Utilice ping para ver si un host está vivo. Este comando super sencillo le ayuda a comprobar el estado de un host o de un segmento de red. El comando ping envía un paquete ICMP ECHO_REQUEST al host de destino y espera a ver si responde.

Sin embargo, algunos hosts bloquean las peticiones eco ICMP con un cortafuegos. Algunos sitios en Internet también pueden hacer lo mismo.

Por defecto, el ping se ejecuta en un bucle infinito. Para enviar un número definido de paquetes, utilice la bandera -c.

$ ping -c 3 google.com 
PING google.com (172.217.167.238): 56 bytes de datos
64 bytes desde 172.217.167.238: icmp_seq=0 ttl=118 time=7.898 ms
64 bytes desde 172.217.167.238: icmp_seq=1 ttl=118 tiempo=7.960 ms
64 bytes desde 172.217.167.238: icmp_seq=2 ttl=118 tiempo=6.247 ms

--- estadísticas de ping de google.com ---
3 paquetes transmitidos, 3 paquetes recibidos, 0,0% de pérdida de paquetes
ida y vuelta min/avg/max/stddev = 6.247/7.368/7.960/0.793 ms

Con la bandera -o ping sale con éxito después de recibir un paquete de respuesta.

$ ping -o google.com
PING google.com (172.217.167.46): 56 bytes de datos
64 bytes desde 172.217.167.46: icmp_seq=0 ttl=118 time=7.540 ms

--- estadísticas de ping de google.com ---
1 paquetes transmitidos, 1 paquetes recibidos, 0,0% de pérdida de paquetes
ida y vuelta min/avg/max/stddev = 7.540/7.540/7.540/0.000 ms

Puede utilizar la bandera -n para evitar búsquedas DNS inversas. El número de secuencia ICMP es especialmente importante. Una interrupción en los números de secuencia indica paquetes perdidos.

Un ping fallido puede deberse a

  • fallo de la red
  • el host no está vivo
  • cortafuegos bloqueando las peticiones ICMP ECHO

También puede realizar una prueba de ping en línea para comprobar la conectividad desde distintas partes del mundo.

iPerf

Mientras que ping verifica la disponibilidad de un host, iPerf ayuda a analizar y medir el rendimiento de la red entre dos hosts. Con iPerf, se abre una conexión entre dos hosts y se envían algunos datos. iPerf muestra entonces el ancho de banda disponible entre los dos hosts.

Puede instalar un iPerf utilizando el gestor de paquetes de su distribución. Por ejemplo, en las distribuciones basadas en Ubuntu se puede instalar de la siguiente manera:

$ sudo apt install iperf -y

Una vez que haya instalado iPerf en ambos equipos, inicie el servidor iPerf en uno de ellos. El siguiente ejemplo inicia el servidor iPerf en un host con dirección IP 10.0.0.51.

$ iperf -s
------------------------------------------------------------
Servidor a la escucha en el puerto TCP 5001
Tamaño de la ventana TCP: 85,3 KByte (por defecto)
------------------------------------------------------------

En la segunda máquina inicie iPerf con la bandera -c. Esto conecta con el servidor y envía algunos datos.

$ iperf -c 10.0.0.51
------------------------------------------------------------
Cliente conectándose a 10.0.0.51, puerto TCP 5001
Tamaño de la ventana TCP: 85,0 KByte (por defecto)
------------------------------------------------------------
[ 3] local 10.0.0.50 puerto 42177 conectado con 10.0.0.51 puerto 5001
[ ID] Ancho de banda de transferencia a intervalos
[ 3] 0,0-10,0 seg 1,13 GBytes 972 Mbits/seg

iPerf vuelve con los resultados del ancho de banda en unos segundos.

traceroute

Si ping muestra paquetes perdidos, debe utilizar traceroute para ver qué ruta están tomando los paquetes. Traceroute muestra la secuencia de pasarelas por las que viajan los paquetes para llegar a su destino. Por ejemplo, traceroute desde mi máquina a google.com muestra lo siguiente:

$ traceroute google.com
traceroute a google.com (172.217.167.46), 64 saltos como máximo, paquetes de 52 bytes
 1 dlinkrouter.dlink (192.168.0.1) 5.376 ms 2.076 ms 1.932 ms
 2 10.194.0.1 (10.194.0.1) 5.190 ms 5.125 ms 4.989 ms
 3 broadband.actcorp.in (49.207.47.201) 7.165 ms 5.749 ms 5.755 ms
 4 broadband.actcorp.in (49.207.47.225) 5.918 ms * 8.483 ms
...
 9 108.170.251.97 (108.170.251.97) 6.359 ms
    del03s16-in-f14.1e100.net (172.217.167.46) 5.448 ms
    108.170.251.97 (108.170.251.97) 6.400 ms

La línea 4 de esta salida muestra un * en los tiempos de ida y vuelta. Esto indica que no se recibió ninguna respuesta. Esto puede deberse a muchas razones – como los paquetes ICMP de traceroute son de baja prioridad, estos pueden ser descartados por un enrutador. O simplemente podría haber congestión. Si ve un * en todos los campos de tiempo para una pasarela determinada, posiblemente la pasarela esté caída.

Muchas herramientas de rastreo de rutas basadas en la web le permiten hacer un traceroute inverso, es decir, desde un sitio web hasta su host. Puede comprobarlas en traceroute.org o Geekflare Traceroute.

tcpdump

tcpdump es una herramienta de rastreo de paquetes y puede ser de gran ayuda a la hora de resolver problemas de red. Escucha el tráfico de la red e imprime la información de los paquetes basándose en los criterios que usted defina.

Por ejemplo, puede examinar todos los paquetes enviados hacia o desde un host en particular, Ubuntu18 en este ejemplo:

$ sudo tcpdump host ubuntu18 -n -c 5
tcpdump: salida verbosa suprimida, utilice -v o -vv para una decodificación completa del protocolo
escuchando en eth0, tipo de enlace EN10MB (Ethernet), tamaño de captura 262144 bytes
14:12:11.509092 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 2991049004:2991049112, ack 2956233368, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 108
14:12:11.509146 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 108:252, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 144
14:12:11.509218 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 252:288, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 36
14:12:11.509259 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 288:500, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 212
14:12:11.509331 IP 10.0.0.4.22 > 183.83.208.234.9633: Flags [P.], seq 500:768, ack 1, win 501, options [nop,nop,TS val 292041322 ecr 405604219], length 268
5 paquetes capturados
6 paquetes recibidos por el filtro
0 paquetes descartados por el núcleo

Por defecto, tcpdump resuelve las direcciones IP a nombres de host. Utilice la bandera -n, si no desea que tcpdump realice búsquedas de nombres.

la salida de tcpdump imprime una línea por cada paquete. Utilice la bandera -c para limitar la salida, 5 en el ejemplo anterior.

tcpdump es útil para resolver problemas de red y también para identificar problemas potenciales. Es una buena idea ejecutar un tcpdump en su red de vez en cuando para verificar que todo está en orden.

netstat

El comando netstat se utiliza para examinar las conexiones de red, las tablas de enrutamiento y diversas configuraciones y estadísticas de red.

Utilice la bandera -i para listar las interfaces de red de su sistema.

He aquí un ejemplo:

$ netstat -i
Tabla de interfaces del núcleo
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 4001 0 0 0 2283 0 0 BMRU
eth1 1500 0 27154 0 0 0 838962 0 0 0 BMRU
lo 65536 0 0 0 0 0 0 0 LRU

Utilizando la bandera -r se mostrará la tabla de enrutamiento. Esto muestra la ruta configurada para el envío de paquetes de red.

$ netstat -r
Tabla de enrutamiento IP del núcleo
Destino Gateway Genmask Flags MSS Window irtt Iface
default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 * 255.255.255.0 U 0 0 0 eth1
10.0.2.0 * 255.255.255.0 U 0 0 0 eth0

El asterisco en las dos últimas líneas indica que no se necesita pasarela para enviar paquetes a ningún host de estas redes. Este host está conectado directamente a las redes 10.0.0.0 y 10.0.2.0.

En la primera línea, el destino es el predeterminado, lo que significa que cualquier paquete destinado a una red que no figure en esta tabla es gestionado por el router 10.0.2,2.

el comando netstat sin ninguna opción muestra una lista de los sockets abiertos. Utilice la bandera -l para mostrar sólo los sockets a la escucha, que por defecto, no se muestran. Puede utilizar la bandera -a para mostrar los sockets que escuchan y los que no escuchan. He aquí un ejemplo:

$ netstat -a
Conexiones a Internet activas (servidores y establecidas)
Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado      
tcp 0 0 *:ssh *:* ESCUCHA     
tcp 0 36 10.0.2.15:ssh 10.0.2.2:51017 ESTABLECIDO
tcp6 0 0 [::]:ssh [::]:* LISTEN     
udp 0 0 *:bootpc *:*   
Sockets de dominio UNIX activos (servidores y establecidos)
Proto RefCnt Flags Tipo Estado I-Node Path
unix 3 [ ] DGRAM 8186 /run/systemd/notify
...

Más ejemplo de comando Netstat aquí

ss

Las instalaciones Linux tienen muchos servicios ejecutándose por defecto. Estos deberían desactivarse o, preferiblemente, eliminarse, ya que esto ayuda a reducir la superficie de ataque. Puede ver qué servicios se están ejecutando con el comando netstat. Aunque netstat todavía está disponible, la mayoría de las distribuciones de Linux están haciendo la transición al comando ss.

utilice el comando ss con las banderas -t y -a para listar todos los sockets TCP. Esto muestra tanto los sockets que escuchan como los que no.

$ ss -t -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port   
LISTEN 0 128 *:sunrpc *:*   
LISTEN 0 128 *:http *:*   
LISTEN 0 128 *:ssh *:*   
ESCUCHAR 0 128 *:60031 *:*   
ESTAB 0 0 10.0.2.15:ssh 10.0.2.2:51699   
ESTAB 0 0 10.0.2.15:ssh 10.0.2.2:51049   
LISTEN 0 128 :::sunrpc :::*    
LISTEN 0 128 :::http :::*    
ESCUCHAR 0 128 :::ssh :::*    
ESCUCHAR 0 128 :::54715 :::*

Para mostrar sólo las conexiones TCP con estado establecido:

ss -a -t -o estado establecido
Recv-Q Send-Q Local Address:Port Peer Address:Port   
0 0 10.0.2.15:ssh 10.0.2.2:51699 timer:(keepalive,23min,0)
0 0 10.0.2.15:ssh 10.0.2.2:51049 timer:(keepalive,114min,0)

ssh

ssh le permite conectarse de forma segura con hosts remotos a través de Internet. Anteriormente se utilizaban rlogin y telnet para conectarse y administrar hosts remotos. Sin embargo, ambos adolecen de un defecto fundamental, y es que envían toda la información, incluidos los nombres de usuario y las contraseñas, en texto claro.

ssh permite una comunicación segura a través de Internet con las dos características siguientes :

  • Confirma que el host remoto es, quien dice ser.
  • Cifra toda la comunicación entre los hosts.

Para conectarse a un host remoto necesita tener un servidor OpenSSH ejecutándose en el host remoto. Puede instalarlo utilizando el gestor de paquetes de su distribución. Por ejemplo en Ubuntu puede instalarlo así:

$ sudo apt install openssh-server

Aquí tiene un ejemplo que muestra cómo puede conectarse al host remoto 10.0.0.50 utilizando el comando ssh:

me@ubuntu-xenial:~$ ssh 10.0.0.50
No se puede establecer la autenticidad del host '10.0.0.50 (10.0.0.50)'.
La huella de la clave ECDSA es SHA256:s2tNJQa/C1/W0SevGm7Rt3xoBZG1QL5yT3ff/ PMpnY.
¿Está seguro de que desea seguir conectándose (sí/no)? sí

Aparece un mensaje que dice que no se puede establecer la autenticidad del host 10.0.0.50, esto se debe a que es la primera vez que se realiza una conexión con 10.0.0.50 (servidor) y el cliente ssh nunca antes ha visto este host remoto. Introduzca sí para continuar la conexión. Una vez establecida la conexión, se le pedirá una contraseña:

Advertencia: Se ha añadido permanentemente '10.0.0.50' (ECDSA) a la lista de hosts conocidos.
contraseña de me@10.0.0.50:
Una vez introducida la contraseña correcta, iniciará la sesión en el host remoto.
Bienvenido a Ubuntu 14.04.6 LTS (GNU/Linux 3.13.0-170-generic x86_64)
 * Documentación: https://help.ubuntu.com/
..
me@vagrant-ubuntu-trusty-64:~$ 

Puede salir de este shell remoto con el comando exit.

Además, puede ejecutar fácilmente un único comando en el host remoto utilizando ssh. Por ejemplo, para ejecutar df -h en el host remoto:

$ ssh 10.0.0.50 df -h
contraseña de me@10.0.0.50: 
Filesystem Size Used Avail Use% Montado en
udev 241M 12K 241M 1% /dev
tmpfs 49M 384K 49M 1% /run
/dev/sda1 40G 1.6G 37G 5% /
...
none 224G 113G 111G 51% /vagrant
me@ubuntu-xenial:~$

scp y sftp

scp (copia segura) es muy similar al comando cp para copiar archivos, con un añadido: puede incluir nombres de host remotos en los nombres de ruta de origen o destino. El nombre de host y la ruta del directorio se separan con dos puntos. Esto le permite copiar archivos de forma encriptada y segura a través de la red. El siguiente comando copia a.txt desde la máquina local a 10.0.0.50 :

me@ubuntu-xenial:~$ scp a.txt 10.0.0.50:/home/me
la contraseña de me@10.0.0.50: 
a.txt 100% 0 0.0KB/s 00:00

sftp (secure ftp) también es un programa de copia de archivos similar a ftp. Sin embargo, utiliza un túnel cifrado SSH para copiar archivos, en lugar de enviar todo en texto claro. Además, no necesita un servidor FTP ejecutándose en el host remoto. Sólo necesita un servidor SSH. He aquí una sesión de ejemplo:

me@ubuntu-xenial:~$ sftp 10.0.0.50
contraseña de me@10.0.0.50: 
Conectado a 10.0.0.50.
sftp> put kali-linux-2020.3-instalador-netinst-i386.iso
Cargando kali-linux-2020.3-installer-netinst-i386.iso a /home/me/kali-linux-2020.3-installer-netinst-i386.iso
kali-linux-2020.3-instalador-netinst-i386.iso 100% 435MB 27.2MB/s 00:16    
sftp> bye

Ifconfig

Normalmente utilizamos el comando ifconfig para comprobar la dirección IP asignada al sistema.

[root@lab ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        inet 209.97.137.171 máscara de red 255.255.240.0 broadcast 209.97.143.255
        inet6 fe80::c035:b2ff:fe9d:72d5 prefixlen 64 scopeid 0x20<link>
        ether c2:35:b2:9d:72:d5 txqueuelen 1000 (Ethernet)
        Paquetes RX 1333200 bytes 167143230 (159.4 MiB)
        Errores RX 0 dropped 0 overruns 0 frame 0
        Paquetes TX 979666 bytes 93582595 (89.2 MiB)
        TX errores 0 descartados 0 desbordamientos 0 portadora 0 colisiones 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
        inet 127.0.0.1 máscara de red 255.0.0.0
        inet6 ::1 prefixlen 128 scopeid 0x10<host>
        loop txqueuelen 1000 (Loopback local)
        RX paquetes 16 bytes 1392 (1.3 KiB)
        RX errores 0 dropped 0 overruns 0 frame 0
        TX paquetes 16 bytes 1392 (1.3 KiB)
        TX errores 0 descartados 0 desbordamientos 0 portadora 0 colisiones 0

[root@lab ~]#

dig

dig (Domain Information Groper) es una herramienta flexible para interrogar a los servidores de nombres DNS.

Realiza búsquedas DNS y muestra las respuestas que devuelven los servidores de nombres.

[root@lab ~]# dig geekflare.com/es

; <<>> DiG 9.11.13-RedHat-9.11.13-5.el8_2 <<>> geekflare.com/es
;; opciones globales: cmd
;; Respuesta obtenida:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12310
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; PSEUDOSECCIÓN OPT:
; EDNS: versión: 0, banderas:; udp: 512
;; SECCIÓN DE PREGUNTAS:
;geekflare.com/es. EN A

;; SECCIÓN DE RESPUESTAS:
geekflare.com/es. 30 EN A 104.27.119.115
geekflare.com/es. 30 EN A 104.27.118.115

;; Tiempo de consulta: 12 mseg
;; SERVIDOR: 67.207.67.2#53(67.207.67.2)
;; CUANDO: Wed Sep 16 17:58:45 UTC 2020
;; MSG SIZE rcvd: 74

[root@lab ~]#

telnet

telnet conecta el host y el puerto del destino a través de un protocolo telnet si se establece una conexión significa que la conectividad entre dos hosts funciona correctamente.

[root@lab ~]# telnet gf.dev 443
Probando 104.27.153.44...
Conectado a gf.dev.
El carácter de escape es '^]'.

nslookup

nslookup es un programa para consultar servidores de nombres de dominio y resolver IP.

[root@lab ~]# nslookup relicflare.com
Servidor: 67.207.67.2
Dirección: 67.207.67.2#53

Respuesta no autoritativa:
Nombre: relicflare.com
Dirección: 192.64.119.178

[root@lab ~]#

Resumen

La creación de redes en Linux es un tema muy amplio, con un gran número de comandos y utilidades. En este artículo, hemos discutido algunos comandos de uso común que esperamos, le ayudarán en la gestión y la seguridad de su red.