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 utilizada para el descubrimiento de redes, auditoría de seguridad y administración. Muchos administradores de sistemas lo usan para determinar cuáles de sus sistemas están en línea y también para la detección del sistema operativo y la detección de 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
Puedes usar -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
- falla de red
- el anfitrión no está vivo
- firewall que bloquea las solicitudes ICMP ECHO
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.
Utilice la herramienta -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:
- Confirma que el host remoto es, quien dice que es.
- 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 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:
me@ubuntu-xenial:~$ 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. me@10.0.0.50'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/
..
me@vagrant-ubuntu-trusty-64:~$
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
me@10.0.0.50'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
me@ubuntu-xenial:~$
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:
me@ubuntu-xenial:~$ scp a.txt 10.0.0.50:/home/me
me@10.0.0.50'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:
me@ubuntu-xenial:~$ sftp 10.0.0.50
me@10.0.0.50'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.
[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 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
[root@lab ~]#
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.
[root@lab ~]# 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
[root@lab ~]#
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.
[root@lab ~]# 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.
[root@lab ~]# 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
[root@lab ~]#
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 at network.