¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Cerrar puertos y aplicar parches

Después de esta lección: Puedo encontrar lo que escucha un servidor, cerrar lo que sobra y comprobar las actualizaciones.

Lección de 55 min12 comandosLaboratorio de administración Linux: usuarios, permisos, cron y systemd en el navegador

El servidor de pruebas que siguió encendido

Cerrar puertos es parar lo que un servidor no necesita que escuche. Aplicar parches es instalar los arreglos de fallos conocidos.

Un desarrollador abrió un puerto para probar una página y se fue de vacaciones. El puerto quedó abierto tres meses, y el programa de detrás nunca se actualizó.

Un puerto que nadie necesita es una puerta que nadie vigila. Cerrarlo no cuesta nada.

Al final de esta lección

Nota

Puedo encontrar lo que escucha un servidor, cerrar lo que sobra y comprobar las actualizaciones.

Palabras clave

PalabraQué significaEjemplo
Puertouna puerta numerada de una máquina donde escucha un programa22
Escucharesperar en un puerto a que alguien se conecte
Bucle localla dirección 127.0.0.1, a la que solo llega la misma máquina
Denegar por defectorechazar todo lo que ninguna regla permite
Parcheuna actualización que arregla un fallo conocido
Superficie de ataquetodo lo que un atacante puede alcanzar y probar

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Lo que escucha se puede atacar

Cada programa que escucha en un puerto es una entrada posible. Cuantos menos haya, menos puede probar un atacante.

El primer trabajo es mirar. Vas a lanzar dos servidores web pequeños tuyos desde una carpeta vacía, uno abierto a la red y otro solo a esta máquina.

Lista lo que escucha ahora

Comando
ss -ltn

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Crea una carpeta vacía para servir

Comando
mkdir -p sitio-vacio

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Servidor abierto a la red en el 8088

Comando
(timeout 120 python3 -m http.server 8088 --bind 0.0.0.0 --directory sitio-vacio >/dev/null 2>&1 &)

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Servidor de bucle local en el 8089

Comando
(timeout 120 python3 -m http.server 8089 --bind 127.0.0.1 --directory sitio-vacio >/dev/null 2>&1 &)

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Compara los dos

Comando
ss -ltn | grep -E ':808[89]'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cómo leer la columna Local Address

El último Run escribió dos líneas. Una tiene 0.0.0.0:8088 y la otra 127.0.0.1:8089.

La dirección 0.0.0.0 significa todas las redes en las que está la máquina. La dirección 127.0.0.1 significa solo esta máquina. El segundo servidor no se puede atacar desde fuera, y no necesita ninguna regla de cortafuegos.

Los dos servidores se paran solos a los dos minutos.

Una regla puede rechazar un puerto

A veces un programa debe escuchar en todas partes pero no debe ser alcanzado. Una regla de cortafuegos en la máquina puede rechazarlo.

Ahora añades una regla solo para el puerto 8088, en una tabla tuya llamada practica. Tu terminal no se toca, y no se guarda nada. Si un Run dice nft: command not found, instálalo con sudo apt-get install -y nftables.

Rechaza el puerto 8088 con una regla

Comando
sudo nft 'add table inet practica; add chain inet practica guardia { type filter hook input priority 0 ; policy accept ; }; add rule inet practica guardia tcp dport 8088 reject with tcp reset'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pregunta ahora al puerto 8088

Comando
curl -sS -m 3 http://127.0.0.1:8088/ 2>&1 | head -n 1

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pregunta al puerto 8089, que ninguna regla toca

Comando
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8089/

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Qué dicen las dos respuestas

El primer curl escribió curl: (7) Failed to connect to 127.0.0.1 port 8088, seguido de una nota sobre el tiempo. La regla rechazó la conexión al instante. El segundo escribió 200: el puerto 8089 sigue respondiendo.

Un cortafuegos de verdad empieza al revés. Su política es denegar por defecto, y una regla permite cada puerto que hace falta.

Ejemplo: denegar por defecto en un servidor web

PuertoPara qué sirveRegla
22SSH para el administradorPermitir, solo desde la dirección de la oficina
443El sitio webPermitir, desde todas partes
8088Una página de prueba olvidadaSin regla, así que se rechaza

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Borra la tabla de práctica

Comando
sudo nft delete table inet practica

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para los dos servidores desechables

Comando
pkill -f 'http.server 808'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Los parches cierran fallos que otros ya encontraron

La mayoría de los ataques usan un fallo que ya tiene arreglo. Un servidor con las actualizaciones atrasadas es fácil de atacar.

Puedes mirar sin cambiar nada. La palabra -s significa simular: escribe lo que haría y no hace nada. Los números dependen del día, así que aquí no se da ninguno.

¿Hay una versión más nueva de openssl?

Comando
apt-cache policy openssl | head -n 3

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

¿Cuántas actualizaciones instalaría?

Comando
sudo apt-get -s upgrade | grep -c '^Inst'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que un puerto es seguro porque nadie sabe que está ahí. Los escáneres prueban todos los puertos en minutos. Un puerto es seguro cuando ningún programa escucha en él, o cuando una regla lo rechaza. Ser desconocido no es un control.

Para ir más lejos: parches con calendario

Ejecuta ls /etc/apt/apt.conf.d y busca un archivo con auto-upgrades en el nombre. Si existe, léelo con cat. Dice si la máquina instala sola las actualizaciones de seguridad.

Escribe dos frases. Una razón para dejar que un servidor se actualice solo. Una razón por la que un colegio querría probar antes las actualizaciones.

Sobre este laboratorio y su código: Laboratorio de administración Linux: usuarios, permisos, cron y systemd en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.