14 comandos útiles de red de Linux

Configurar, monitorear y asegurar las redes es una parte esencial del trabajo de un administrador de sistemas. Cuando se trata de administrar redes Linux, hay muchos comandos y utilidades disponibles.

A veces, los sistemas en red fallan. Tu como un administrador son necesarios para diagnosticar y resolver problemas. El monitoreo ayuda a detectar problemas y solucionarlos antes de que las cosas se salgan de control. La supervisión de la seguridad y el rendimiento también forma una parte esencial de las actividades de un administrador.

Aquí discutimos algunos comandos de uso común para administrar redes Linux.

ip

El paquete iproute2 incluye el comando IP que se utiliza para la configuración de red y enrutamiento. Esto reemplaza el tradicional ifconfig y route comandos.

ip toma un segundo argumento que especifica el objeto en el que desea ejecutar un comando y una acción como agregar, eliminar o mostrar.

enlace ip

ip link sirve para configurar, agregar y eliminar interfaces de red. Utilizar ip link show comando para mostrar todas las interfaces de red en el 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: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:ff

Puede ver la página de manual de ip link con:

$ man  ip-link

dirección IP

Utilice el comando de dirección IP para mostrar direcciones, vincular nuevas direcciones o eliminar las antiguas. El comando de dirección IP de la página de manual se denomina dirección IP.

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: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 ha utilizado en muchas películas,  The Matrix Reloaded (Wikipedia , IMDB, Amazon) convirtió a Nmap en una estrella de cine.

Nmap ("Network Mapper") es una poderosa utilidad que se utiliza para el descubrimiento de redes, auditoría de seguridad y 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 predeterminado 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  Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 10:32 UTC Nmap scan report for 10.0.0.50 Host is up (0.00077s latency). Not shown: 997 filtered ports PORT     STATE  SERVICE 22/tcp   open   ssh 80/tcp   open   http 3306/tcp closed mysql

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

$ nmap -sn 10.0.0.0/24  Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 11:59 UTC Nmap scan report for 10.0.0.1 Host is up (0.00084s latency). Nmap scan report for 10.0.0.50 Host is up (0.0021s latency). Nmap scan report for 10.0.0.51 Host is up (0.00026s latency). Nmap done: 256 IP addresses (3 hosts up) scanned in 2.61 seconds

Utilice el indicador -O para identificar qué sistema operativo está ejecutando un host.

$ sudo  nmap 10.0.0.50 -O Starting Nmap 7.01 ( https://nmap.org ) at 2020-09-07 13:44 UTC Nmap scan report for 10.0.0.50 Host is up (0.00053s latency). ... Running: Linux 3.X OS CPE: cpe:/o:linux:linux_kernel:3 OS details: Linux 3.10 - 3.19 Network Distance: 1 hop OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 21.95 seconds

Una advertencia: nadie aprecia que sus sistemas sean escaneados a través de Internet. Entonces, antes de hacerlo, solicite permiso.

También puedes usar Nmap en Windows, mira esto guía de instalación.

ping

Utilice ping para ver si un host está vivo. Este comando súper simple lo ayuda a verificar el estado de un host o un segmento de red. El comando ping envía un paquete ICMP ECHO_REQUEST al host de destino y espera para ver si responde.

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

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

$ ping -c 3 google.com  PING google.com (172.217.167.238): 56 data bytes 64 bytes from 172.217.167.238: icmp_seq=0 ttl=118 time=7.898 ms 64 bytes from 172.217.167.238: icmp_seq=1 ttl=118 time=7.960 ms 64 bytes from 172.217.167.238: icmp_seq=2 ttl=118 time=6.247 ms  --- google.com ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 6.247/7.368/7.960/0.793 ms

Con el indicador -o, el ping sale con éxito después de recibir un paquete de respuesta.

$ ping -o google.com PING google.com (172.217.167.46): 56 data bytes 64 bytes from 172.217.167.46: icmp_seq=0 ttl=118 time=7.540 ms  --- google.com ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 7.540/7.540/7.540/0.000 ms

Puede usar el -n marca para evitar búsquedas DNS inversas. El número de secuencia de ICMP es particularmente importante. Una interrupción en los números de secuencia indica paquetes perdidos.

Un ping fallido podría deberse a

También puede realizar una prueba de ping en línea para comprobar la conectividad de diferentes 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, abre una conexión entre dos hosts y envía algunos datos. iPerf luego muestra el ancho de banda disponible entre los dos hosts.

Puede instalar un iPerf utilizando su administrador de paquetes de distribución. Por ejemplo, en distribuciones basadas en Ubuntu, puede instalar así:

$ sudo apt install iperf -y

Una vez que haya instalado iPerf en ambas máquinas, inicie el servidor iPerf en una de ellas. El siguiente ejemplo inicia el servidor iPerf en un host con la dirección IP 10.0.0.51.

$ iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------

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

$ iperf -c 10.0.0.51 ------------------------------------------------------------ Client connecting to 10.0.0.51, TCP port 5001 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [  3] local 10.0.0.50 port 42177 connected with 10.0.0.51 port 5001 [ ID] Interval       Transfer     Bandwidth [  3]  0.0-10.0 sec  1.13 GBytes   972 Mbits/sec

iPerf vuelve con el ancho de banda resultados en unos segundos.

traceroute

Si ping muestra paquetes faltantes, debe usar traceroute para ver qué ruta están tomando los paquetes. Traceroute muestra la secuencia de puertas de enlace a través de las cuales viajan los paquetes para llegar a su destino. Por ejemplo, traceroute de mi máquina a google.com muestra lo siguiente:

$ traceroute google.com traceroute to google.com (172.217.167.46), 64 hops max, 52 byte packets  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ó respuesta. Esto puede deberse a muchas razones: como los paquetes ICMP de traceroute son de baja prioridad, un enrutador puede descartarlos. O podría haber simplemente congestión. Si ve un * en todos los campos de tiempo para una puerta de enlace determinada, es posible que la puerta de enlace esté inactiva.

Muchas herramientas de rastreo de rutas basadas en la web le permiten hacer un rastreo de ruta inverso, es decir, desde un sitio web a su host. Puede consultarlos en traceroute.org or Traceroute de Geekflare.

tcpdump

tcpdump es una herramienta de detección de paquetes y puede ser de gran ayuda para resolver problemas de red. Escucha el tráfico de la red e imprime la información del paquete según los criterios que 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: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 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 packets captured 6 packets received by filter 0 packets dropped by kernel

De forma predeterminada, tcpdump resuelve las direcciones IP en nombres de host. Utilizar -n flag, si no desea que tcpdump realice búsquedas de nombres.

La salida tcpdump imprime una línea para cada paquete. Utilizar -c bandera 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 conexiones de red, tablas de enrutamiento y varias configuraciones y estadísticas de red.

Utilizan -i marca para enumerar las interfaces de red en su sistema.

Aquí hay un ejemplo:

$ netstat -i Kernel Interface table 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      0 BMRU eth1       1500 0     27154      0      0 0        838962      0      0      0 BMRU lo        65536 0         0      0      0 0             0      0      0      0 LRU

Usar -r bandera mostrará la tabla de enrutamiento. Esto muestra la ruta configurada para enviar paquetes de red.

$ netstat -r Kernel IP routing table Destination     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

Un asterisco en las dos últimas líneas indica que no se requiere una puerta de enlace para enviar paquetes a ningún host en 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 figura en esta tabla es manejado por el enrutador 10.0.2,2.

El comando netstat sin opciones muestra una lista de sockets abiertos. Utilizar -l marca para mostrar solo los sockets de escucha, que por defecto no se muestran. Puede usar -a bandera para mostrar sockets de escucha y no escucha. Aquí hay un ejemplo:

$ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address           Foreign Address         State       tcp        0      0 *:ssh                   *:*                     LISTEN      tcp        0     36 10.0.2.15:ssh           10.0.2.2:51017          ESTABLISHED tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      udp        0      0 *:bootpc                *:*                                 Active UNIX domain sockets (servers and established) Proto RefCnt Flags       Type       State         I-Node   Path unix  3      [ ]         DGRAM                    8186     /run/systemd/notify ... 

Más ejemplos de comandos de Netstat aquí

ss

Las instalaciones de Linux tienen muchos servicios que se ejecutan de forma predeterminada. Estos deben 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 pasando a ss mando.

usar el comando ss con -t y -a banderas para enumerar todos los sockets TCP. Esto muestra las tomas de escucha y no escucha.

$ 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                            *:*        LISTEN      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                          :::*        LISTEN      0      128                          :::ssh                           :::*        LISTEN      0      128                          :::54715                         :::*

Para mostrar solo las conexiones TCP con el estado establecido:

ss -a -t -o state established 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 usaban rlogin y telnet para conectarse y administrar hosts remotos. Sin embargo, ambos sufren de un defecto fundamental, es decir, envían toda la información, incluidos los nombres de inicio de sesión y las contraseñas, en texto sin cifrar.

ssh habilita comunicación segura a través de Internet con las dos funciones siguientes:

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

$ sudo apt install openssh-server

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

[email protected]:~$ ssh 10.0.0.50 The authenticity of host '10.0.0.50 (10.0.0.50)' can't be established. ECDSA key fingerprint is SHA256:s2tNJQa/C1/W0SevGm7Rt3xoBZG1QL5yT3ff/+PMpnY. Are you sure you want to continue connecting (yes/no)? yes

Recibe 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 establece una conexión con 10.0.0.50 (servidor) y el cliente ssh nunca ha visto este host remoto antes. Ingrese sí para continuar con la conexión. Una vez establecida la conexión, se le solicitará una contraseña:

Warning: Permanently added '10.0.0.50' (ECDSA) to the list of known hosts. [email protected]'s password:

Después de ingresar la contraseña correcta, iniciará sesión en el host remoto.

Welcome to Ubuntu 14.04.6 LTS (GNU/Linux 3.13.0-170-generic x86_64)  * Documentation:  https://help.ubuntu.com/ .. [email protected]:~$ 

Puede salir de este shell remoto con el comando exit.

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

$ ssh 10.0.0.50 df -h [email protected]'s password:  Filesystem      Size  Used Avail Use% Mounted on 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 [email protected]:~$

scp and sftp

scp (copia segura) es muy similar a cp comando para copiar archivos, con una adición: puede incluir nombres de host remotos en los nombres de ruta de origen o destino. El nombre de host y la ruta del directorio están separados por dos puntos. Esto le permite copiar archivos de forma segura a través de la red en forma cifrada. El siguiente comando copia un.txt de la máquina local a 10.0.0.50:

[email protected]:~$ scp a.txt 10.0.0.50:/home/me [email protected]'s password:  a.txt                                           100%    0     0.0KB/s   00:00

sftp (ftp seguro) también es un programa de copia de archivos similar a ftp. Sin embargo, utiliza un túnel encriptado SSH para copiar archivos, en lugar de enviar todo en texto sin cifrar. Además, no necesita un servidor FTP que se ejecute en el host remoto. Solo necesitas un servidor ssh. Aquí hay una sesión de ejemplo:

[email protected]:~$ sftp 10.0.0.50 [email protected]'s password:  Connected to 10.0.0.50. sftp> put kali-linux-2020.3-installer-netinst-i386.iso Uploading kali-linux-2020.3-installer-netinst-i386.iso to /home/me/kali-linux-2020.3-installer-netinst-i386.iso kali-linux-2020.3-installer-netinst-i386.iso    100%  435MB  27.2MB/s   00:16     sftp> bye

Ifconfig

Principalmente usamos ifconfig comando para verificar la dirección IP asignada al sistema.

[[email protected] ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500         inet 209.97.137.171  netmask 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)         RX packets 1333200  bytes 167143230 (159.4 MiB)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 979666  bytes 93582595 (89.2 MiB)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0  lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536         inet 127.0.0.1  netmask 255.0.0.0         inet6 ::1  prefixlen 128  scopeid 0x10<host>         loop  txqueuelen 1000  (Local Loopback)         RX packets 16  bytes 1392 (1.3 KiB)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 16  bytes 1392 (1.3 KiB)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0  [[email protected] ~]#

dig

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

Realiza Búsquedas de DNS y muestra las respuestas que se devuelven desde los servidores de nombres.

[[email protected] ~]# dig geekflare.com  ; <<>> DiG 9.11.13-RedHat-9.11.13-5.el8_2 <<>> geekflare.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12310 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1  ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;geekflare.com.			IN	A  ;; ANSWER SECTION: geekflare.com.		30	IN	A	104.27.119.115 geekflare.com.		30	IN	A	104.27.118.115  ;; Query time: 12 msec ;; SERVER: 67.207.67.2#53(67.207.67.2) ;; WHEN: Wed Sep 16 17:58:45 UTC 2020 ;; MSG SIZE  rcvd: 74  [[email protected] ~]#

telnet

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

[[email protected] ~]# telnet gf.dev 443 Trying 104.27.153.44... Connected to gf.dev. Escape character is '^]'.

nslookup

nslookup es un programa para consultar servidores de nombres de dominio y resolución de IP.

[[email protected] ~]# nslookup relicflare.com Server:		67.207.67.2 Address:	67.207.67.2#53  Non-authoritative answer: Name:	relicflare.com Address: 192.64.119.178  [[email protected] ~]#

Resumen

La creación de redes en Linux es un tema amplio, con una gran cantidad de comandos y utilidades. En este artículo, hemos discutido algunos comandos de uso común que, con suerte, lo ayudarán a administrar y proteger su a las.