🖧 Puertos y Conexiones de Red en Linux
1. ¿Qué es un puerto?
Un puerto es una "puerta virtual" en una máquina que permite a los servicios de red comunicarse.
Cada puerto está asociado a un número del 0 al 65535.
- 🔒 Puertos conocidos (well-known):
0 - 1023→ Reservados para servicios estándar (ej: SSH:22, HTTP:80). - 🧰 Puertos registrados:
1024 - 49151→ Para aplicaciones de usuario. - 🌀 Puertos dinámicos/privados:
49152 - 65535→ Usados temporalmente por clientes.
2. Ver puertos abiertos 🔍
sudo netstat -tuln
Explicación rápida:
-
-tTCP -
-uUDP -
-lEscucha (Listening) -
-nMuestra números (no resuelve nombres)
ss -ntlp
o
cat /proc/net/tcp
3. Conectarse a un puerto
Usando nc (netcat):
nc <IP> <puerto>
Usando telnet (más viejo, pero a veces requerido en CTFs):
telnet <IP> <puerto>
4. Ver procesos que usan puertos
sudo lsof -i -P -n
O para un puerto específico:
lsof -i :<número de puerto>
ncat (Netcat Seguro)
ncat es una versión mejorada y más segura de nc. Es parte del paquete de herramientas de Nmap y ofrece todas las funciones de nc con características adicionales, como soporte para conexiones seguras mediante SSL/TLS.
Funciones adicionales de ncat:
-
Soporta cifrado SSL/TLS para conexiones seguras.
-
Puede ser utilizado como un servidor de escucha (listener) con soporte para cifrado.
-
Permite realizar reenvío de puertos y proxy de conexión.
-
Mejora la seguridad al proporcionar una conexión más robusta con autenticación cifrada.
Ejemplo de uso de ncat con SSL:
bash
CopiarEditar
ncat --ssl <IP> <puerto>
ncat se recomienda cuando necesitas una conexión segura, ya que cifra los datos entre el cliente y el servidor.
5. Escuchar conexiones entrantes con nc -nlvp 🔊
nc también puede actuar como servidor, escuchando conexiones entrantes en un puerto local. Esto es útil cuando necesitas aceptar conexiones desde otro programa o sistema de red.
nc -nlvp <puerto>
Cuando usas estos parámetros, nc se pone en "modo escucha", lo que significa que esperará y aceptará conexiones entrantes en el puerto que especifiques. Este comando es ideal para situaciones como pruebas locales, ejercicios de redes en CTFs, o cuando otros procesos necesitan conectarse a tu máquina.
-
-n→ No resuelve nombres DNS. Esto hace quencsea más rápido y evite errores de resolución de nombres. Solo trabaja con direcciones IP y puertos numéricos. -
-l→ "Listen": Colocancen modo escucha. Esto significa quencse quedará esperando por conexiones entrantes, en lugar de intentar realizar una conexión saliente a otro servidor. -
-v→ "Verbose": Activa el modo detallado, mostrando más información sobre la conexión que se establece, como la IP de quien se conecta. Muy útil para depurar o ver qué está pasando. -
-p→ Especifica el puerto en el quencescuchará. Si no usas-p,ncseleccionará uno al azar.
🔍 Parámetros explicados:
-
-n→ No resuelve nombres DNS (más rápido y evita errores de resolución) -
-l→ "Listen": ponencen modo escucha (espera conexiones entrantes) -
-v→ "Verbose": muestra detalles de la conexión (útil para debug) -
-p→ Especifica el puerto donde escuchar
🧪 Ejemplo:
nc -nlvp 4444
Esto hace que nc se quede esperando conexiones en el puerto 4444. Cuando alguien se conecte a este puerto, se mostrará información de la conexión entrante y podrás interactuar con los datos enviados.
Esto es útil en escenarios donde tienes un programa o un binario que necesita conectar a tu máquina (por ejemplo, en el caso de Bandit 20 → 21, donde usas un puerto específico para recibir la siguiente contraseña).
📝 Ejemplo práctico: Ejercicio prático de Bandit#🏴☠️ Bandit Level 20 → Level 21