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 administradordebe diagnosticar y resolver los problemas. La monitorización ayuda a detectar problemas y a solucionarlos antes de que las cosas se descontrolen. La monitorizació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. Sustituye a los comandos tradicionales ifconfig
y route
ip
toma un segundo argumento que especifica el objeto sobre el que desea ejecutar un comando y una acción como añadir, eliminar o mostrar
enlace ip
ip link
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:00 brd 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 man para ip
enlace con
$ man ip-link
dirección ip
Utilice el comando ip address para mostrar direcciones, enlazar nuevas direcciones o borrar las antiguas. El comando ip address de la página man se denomina ip-address
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 decine
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
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
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 activos) 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 de 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 la red: 1 salto
Detección del 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 time=7.960 ms
64 bytes desde 172.217.167.238: icmp_seq=2 ttl=118 time=6.247 ms
--- google.com ping statistics ---
3
paquetes transmitidos, 3 paquetes recibidos, 0.0% de pérdida de paquetes
round-trip 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 a 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 que bloquea 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 se inicia iPerf con la bandera -c. Esto conecta con el servidor y envía algunos datos
$ iperf -c 10.0.0.51
------------------------------------------------------------
Cliente conectado 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] Intervalo Transferencia Ancho de banda
[ 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 ha recibido 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 consultarlas 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, link-type 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 kernel
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
Kernel Tabla de
interfaces
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 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
Destination Gateway Genmask Flags MSS Window irtt Iface
default 10.0.2.2
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 enrutador 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 enchufes a la escucha, que por defecto, no se muestran. Puede utilizar la bandera -a para mostrar los enchufes que escuchan y los que no escuchan. He aquí un ejemplo
$ netstat -a
Conexiones activas a Internet (servidores y establecidas)
Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado
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
*
:*
Sockets de dominio UNIX activos (servidores y establecidos)
Proto RefCnt Flags Type State I-Node Path
unix 3 [ ] DGRAM 8186 /run/systemd/notify
..
Más ejemplo de comando Netstat aquí
ss
Las instalaciones de 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
use 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 *:*
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 :::*
ESCUCHAR 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 anfitriones.
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 digital de la clave ECDSA es SHA256:s2tNJQa/C1/W0SevGm7Rt3xoBZG1QL5yT3ff/ PMpnY.
¿Está seguro de que desea continuar la conexión (sí/no)? sí
Aparece un mensaje diciendo 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
Después de introducir 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
me@10.0.0.50 contraseña:
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-installer-netinst-i386.iso
Cargando kali-linux-2020.
3-instalador-netinst-i386.iso
a /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
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 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 paquetes 1333200 bytes 167143230 (159.4 MiB)
RX errores 0 dropped 0 overruns 0 frame 0
TX paquetes 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
[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
; <<>> DiG 9.11.13-RedHat-9.11.13-5.el8_2 <<>> geekflare.com
;; 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
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; SECCIÓN DE LA PREGUNTA:
;geekflare.com. IN A
;; SECCIÓN DE LA RESPUESTA:
geekflare.com. 30 IN A 104.27.119.115
geekflare.com. 30 IN A 104.27.118.115
;; Tiempo de consulta: 12 mseg
;; SERVIDOR: 67.207.67.2#53(67.207.67.2)
;; CUÁNDO: 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 rojo.