Conozca a fondo su red comprobando regularmente si hay puertos abiertos con estos comandos de Linux.
Los puertos de red abiertos son los puntos de entrada más fáciles a su red. A veces, puede haber servicios no deseados que se ejecutan en los puertos que son visibles desde el exterior de Internet. En caso de que estos servicios sean vulnerables, su red estaría en constante amenaza de ataque, ya que cada día todo Internet es escaneado en busca de servicios vulnerables en puertos abiertos.
¿Qué son los puertos de red?
Los puertos de red son puntos de acceso lógicos de su sistema que pueden ser utilizados como un canal para alojar múltiples servicios. Un puerto está representado por un número entero de 16 bits, por lo que el número de puerto más alto es 65535.
Puedes pensar en los puertos como en las ventanas y puertas de una casa, básicamente todos los puntos de entrada a una casa o a un ordenador. Los puertos son de tres tipos: puertos de sistema (1-1023), puertos registrados (1024-49151) y puertos efímeros o dinámicos (49152-65535).
Puede leer también | NetworkManager 1.38 : ha realizado un lanzamiento para mejorar la gestión de red en Linux
Cuando inicias una aplicación que requiere conexión a Internet, ésta utiliza puertos dinámicos para transmitir y recibir datos a través de la red. Sin embargo, cuando inicias un servidor web o un servidor SSH, normalmente se vincula a los puertos del sistema o a los puertos registrados.
Para servidores web que sirven HTTP, el puerto de sistema por defecto es el 80 y para SSH es el 22. Estas regulaciones, como los rangos de puertos, son desarrolladas por la Autoridad de Asignación de Números de Internet (IANA). Puedes consultar el RFC relativo a los puertos para obtener una lista completa de todos los puertos y sus funciones.
Puede leer también | NetworkManager 1.26 ya fue liberado
Es importante que conozcas los puertos más comúnmente vulnerables para que puedas asegurarte de que están cerrados o protegidos.
1. Compruebe si hay puertos abiertos con netstat
netstat es una popular utilidad que puedes utilizar para ver las estadísticas de red de tu sistema Linux. Forma parte del paquete net-tools.
El paquete net-tools está ahora depreciado debido a la falta de mantenimiento adecuado por parte del desarrollador. Esta es también la razón por la que puedes encontrarte con un error "ifconfig: command not found" cuando ejecutas el popular comando ifconfig en Linux.
Puede leer también | 10 herramientas esenciales de Linux para profesionales de redes y seguridad
Por lo tanto, en los sistemas modernos, es posible que primero tengas que instalar el paquete net-tools y, a continuación, podrás ejecutar el comando netstat. He aquí cómo comprobar los puertos abiertos con netstat:
netstat -tuln
Explicación del comando:
- -t muestra los puertos TCP.
- -u muestra los puertos UDP.
- -l muestra los puertos de escucha. Sustitúyalo por a si desea ver todos los puertos, independientemente de su estado.
- -n muestra el valor numérico de los puertos en lugar de resolver a nombres de servicio. Por ejemplo, muestra el puerto 22 en lugar de SSH, es decir, el servicio que se ejecuta en el puerto.
2. Compruebe si hay puertos abiertos con ss
ss es el equivalente moderno de la herramienta netstat. La encontrarás preinstalada en todas las distribuciones modernas de Linux. La sintaxis para comprobar los puertos abiertos con ss es idéntica a la de netstat.
He aquí cómo comprobar los puertos abiertos con ss:
ss -tuln
Explicación del comando:
- -t muestra los puertos TCP.
- -u muestra los puertos UDP.
- -l muestra los puertos de escucha. Sustitúyalo por a si desea ver todos los puertos, independientemente de su estado.
- -n muestra el valor numérico de los puertos en lugar de resolver a nombres de servicio. Por ejemplo, muestra el puerto 21 en lugar de FTP, es decir, el servicio que se ejecuta en el puerto.
3. Buscar puertos abiertos con Nmap
Nmap es una de las herramientas más populares en ciberseguridad y redes. Es un nombre básico cuando se trata de pruebas de penetración de seguridad de red. Su uso principal es el escaneo de puertos, por lo que no sólo obtendrá información sobre los puertos abiertos en su sistema, sino también si son vulnerables y explotables.
Además, si desea comprobar los puertos abiertos en un sistema remoto con IDS/IPS configurados y cortafuegos instalados, no se preocupe porque Nmap también puede saltarse cortafuegos e IDS/IPS con los conmutadores adecuados.
Puede leer también | Nagios Core, la mejor solución de monitorización de equipos, servicios y redes en GNU/Linux
Eche un vistazo a esta completa guía sobre Nmap para principiantes para explorar las diversas características de Nmap y cómo utilizarlas. Aunque puede hacerlo, no se recomienda intentar saltarse los cortafuegos porque no es del todo fiable, así que es mejor que acceda mediante SSH al servidor remoto y ejecute Nmap en él localmente.
Aquí está el comando para comprobar los puertos abiertos con Nmap:
nmap -sTU -sV <dirección IP> -T 5 --min-rate 9000 --min-parallelism 9000 --initial-rtt-timeout 50ms --max-rtt-timeout 3000ms --max-retries 50 -Pn --disable-arp-ping -n --script vuln,exploit,auth -v -oX <nombre de fichero>.
Explicación del comando:
- -sTU establece el tipo de escaneo en TCP Connect y UDP scan.
- -T 5 establece la plantilla de tiempo en agresiva para escaneos rápidos (no recomendado en un sistema desprotegido ya que puede resultar en un ataque DoS).
- -sV activa el escaneo de servicio.
- --min-rate 9000 indica a Nmap que envíe 9000 paquetes por segundo.
- --initial-rtt-timeout 50ms le dice a Nmap que espere inicialmente 50ms por una respuesta a cada paquete SYN que envíe.
- --max-rtt-timeout 3000ms le dice a Nmap que espere un máximo de 3000ms por una respuesta.
- --min-parallelism 9000 establece el número mínimo de ejecuciones de script simultáneas en 9000.
- --max-retries 50 indica a Nmap que reintente 50 veces la conexión a un puerto.
- -Pn deshabilita el sondeo ping.
- --disable-arp-ping desactiva el sondeo ARP.
- -n desactiva la resolución DNS.
- --script vuln,exploit,auth ejecuta tres scripts para comprobar diferentes tipos de vulnerabilidades en los puertos descubiertos.
- -v devuelve una salida detallada.
- -oX guarda los resultados en un archivo XML.
- -6 Parámetro opcional para escanear direcciones IPv6.
4. Compruebe si hay puertos abiertos con lsof
El comando lsof en Linux se utiliza para listar archivos abiertos. Sin embargo, si le añades algunos modificadores, podrás ver las conexiones a Internet y los puertos abiertos en tu máquina local. He aquí cómo comprobar los puertos abiertos con lsof:
lsof -i -n
Explicación del comando:
-i lista todos los archivos de red e internet.
-n no resuelve nombres de host.
5. Comprobación de puertos abiertos con netcat
netcat es una utilidad de línea de comandos que le permite leer y escribir desde y hacia conexiones TCP/UDP. Ten en cuenta que ésta es sólo una de las funciones de netcat. Puedes consultar su página de manual utilizando el comando man netcat para explorar todas sus características y cómo utilizarlas.
Puede leer también | Seguridad en Redes con Linux dos servicios actualmente esenciales
Así es como puedes usar netcat para escanear puertos abiertos:
nc -zv <dirección IP> <puerto_inicial-puerto_fin> | grep -v "refused" (rechazado)
Explicación del comando:
- -z pone netcat en modo escáner.
- -v devuelve una salida detallada.
- grep -v "refused" devuelve líneas de salida sin la palabra "refused". Esto es para evitar que el terminal se llene de mensajes de "conexión denegada" cuando netcat no recibe salida de un puerto.
- 2>&1: Este es un modificador opcional que puede ser necesario activar para que grep funcione cuando se ejecuta netcat en modo detallado. netcat devuelve la salida a stderr (indicada por 2). Así que para grep la salida, usted tendría que redirigir stderr a stdout (denotado por 1) y luego la tubería en grep.
Cuanto más conozca su red, mejor podrá defenderla
Saber qué puertos están abiertos y qué servicios se están ejecutando en tu sistema es un gran paso para defenderlo de posibles ataques externos. Esto te permite buscar y cerrar servicios innecesarios, encontrar servicios obsoletos y también detectar si hay archivos maliciosos como bind o reverse shell backdoors ejecutándose en tu sistema.