Gestionar los puertos abiertos en un sistema Linux es fundamental para garantizar la seguridad y el correcto funcionamiento de las aplicaciones. Los puertos abiertos permiten la comunicación entre servicios, pero también pueden representar un riesgo si no se gestionan adecuadamente. En esta guía, explicaremos cómo verificar los puertos abiertos y asegurar el sistema mediante reglas de firewall y mejores prácticas.
Cómo Comprobar Puertos Abiertos en Linux
Existen varias herramientas para identificar los puertos abiertos y en escucha en un sistema Linux:
1. Usando netstat
netstat permite visualizar los puertos activos y sus servicios asociados:
sudo netstat -tulnp
Parámetros clave:
-t: Muestra puertos TCP.-u: Muestra puertos UDP.-l: Muestra puertos en escucha.-n: Muestra direcciones numéricas en lugar de resolver nombres de host.-p: Muestra los ID y nombres de los procesos.
Ejemplo de salida:
tcp6 0 0 :::8006 :::* LISTEN 1826/pveproxy
tcp6 0 0 :::8080 :::* LISTEN 4744/syncthing
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1022/cupsd
Para verificar puertos inesperados:
sudo netstat -tulnp | grep LISTEN
2. Usando ss (Recomendado)
ss es una alternativa más rápida y eficiente a netstat:
sudo ss -tulnp
Muestra información similar pero con mejor rendimiento.
3. Usando lsof
lsof lista archivos abiertos, incluyendo sockets de red:
lsof -i -P -n
Parámetros:
-i: Muestra conexiones de red.-P: No resuelve números de puerto a nombres.-n: No resuelve direcciones IP a nombres de host.
4. Usando nmap (Para Escaneo Remoto)
Para comprobar puertos abiertos en un sistema remoto:
nmap -p- <IP-DEL-SERVIDOR>
-p-: Escanea todos los 65535 puertos.
Cómo Asegurar Puertos Abiertos en Linux
1. Cerrar Puertos No Necesarios
Si un servicio no es necesario, se debe detener y deshabilitar:
sudo systemctl stop <servicio>
sudo systemctl disable <servicio>
2. Usar un Firewall
Los firewalls controlan el tráfico permitiendo o bloqueando puertos.
Usando ufw (Ubuntu/Debian)
Permitir un puerto:
sudo ufw allow 22/tcp
Bloquear un puerto:
sudo ufw deny 23/tcp
Habilitar el firewall:
sudo ufw enable
Usando firewalld (Sistemas Basados en RHEL)
Permitir un puerto:
sudo firewall-cmd --add-port=22/tcp --permanent
sudo firewall-cmd --reload
Bloquear un puerto:
sudo firewall-cmd --remove-port=23/tcp --permanent
sudo firewall-cmd --reload
Usando iptables
Permitir acceso SSH solo desde una IP específica:
sudo iptables -A INPUT -p tcp --dport 22 -s <IP-PERMITIDA> -j ACCEPT
Bloquear todo el tráfico entrante excepto SSH:
sudo iptables -P INPUT DROP
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Guardar reglas del firewall:
sudo iptables-save > /etc/iptables.rules
3. Implementar Port Knocking
¿Qué es Port Knocking?
Port Knocking es una técnica de seguridad que permite abrir puertos de red solo cuando se recibe una secuencia específica de intentos de conexión. Funciona como una «cerradura oculta» para los servicios en red, lo que ayuda a proteger el acceso contra ataques de escaneo de puertos y accesos no autorizados.
En lugar de mantener un puerto abierto permanentemente (como el 22 para SSH), el servidor solo abrirá el puerto después de que el usuario envíe una serie de intentos de conexión a puertos predefinidos en un orden específico.
¿Cómo Funciona Port Knocking?
- El servidor está configurado para bloquear los puertos sensibles (como SSH).
- El cliente envía una secuencia de «golpes» a diferentes puertos en un orden específico (por ejemplo, primero al puerto 3000, luego al 4000 y finalmente al 5000).
- El servidor detecta la secuencia correcta y abre el puerto deseado temporalmente, permitiendo el acceso al cliente.
- Después de un tiempo o cuando el usuario se desconecta, el puerto se cierra nuevamente.
Conclusión
Comprobar y asegurar los puertos abiertos es una práctica fundamental en la administración de sistemas Linux. La supervisión regular y la configuración adecuada del firewall ayudarán a proteger el sistema contra amenazas y accesos no autorizados.






