Copyright © 2005-2024 LinuxTotal.com.mx
Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation.
Una tarea básica y habitual en la administración de redes, es la de probrar puertos abiertos contra los servicios en otros servidores en la misma red u otras redes. Existen varios métodos y herramientas que permiten lo anterior en el mundo GNU/Linux. Conoce en este pequeño tutorial distintas maneras de probar si un puerto esta abierto o no.
El cliente telnet
hace varios años que no se usa para establecer conexiones remotas, esto por su inseguridad (transmisión de datos sin encriptación) y porque ssh lo reemplazó como método seguro de conexión remota. Pero si lo tienes instalado es excelente para probar conectividad de puertos:
sintaxis: telnet host puerto
# telnet 192.168.0.19 443 Trying 192.168.0.19... Connected to 192.168.0.19. <-- Puerto abierto Escape character is '^]'. # telnet 192.168.0.19 639 Trying 192.168.0.19... <-- Puerto cerrado, sin respuesta
nc
que es la herramienta netcat, es una utileria de red muy completa para monitoreo, diagnóstico, análisis, etc. Prácticamente cualquier uso de los protocolos TCP y UDP puede ser ejecutado con nc
.
sintaxis: nc opciones host puerto[s]
# nc -zv 192.168.0.19 443 Connection to 192.168.0.19 443 port [tcp/https] succeeded! <-- Puerto abierto # nc -zv 192.168.0.19 639 nc: connect to 192.168.0.19 port 639 (tcp) failed: Connection timed out <-- Puerto cerrado [root@localhost ~]# nc -zu 200.52.196.196 53 Connection to 200.52.196.196 53 port [udp/domain] succeeded! # nc -z -w1 192.168.0.19 130-140 Connection to 192.168.0.19 135 port [tcp/epmap] succeeded! Connection to 192.168.0.19 139 port [tcp/netbios-ssn] succeeded!
nmap
es la herramienta de escaneo de redes por excelencia, con su multitud de opciones y scripts es increiblemente poderosa. Tutoriales muy completos existen sobre nmap
y es un deber conocerla para los profesionales de redes. Además es una de las armas más poderosa para el hackeo de servidores.
Con lo anterior dicho solo mostraré una parte muy pequeña del poder de nmap
enfocada al tema de este artículo, el monitoreo de puertos.
sintaxis: nmap opciones host[s]
# nmap -p 80 192.168.0.19 Starting Nmap 5.51 ( http://nmap.org ) at 2019-02-10 14:38 CST Nmap scan report for 192.168.0.19 Host is up (0.00056s latency). PORT STATE SERVICE 80/tcp open http <-- Puerto abierto Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds # nmap -p 135-140 192.168.0.19 Starting Nmap 5.51 ( http://nmap.org ) at 2019-02-10 14:43 CST Nmap scan report for 192.168.0.19 Host is up (0.00040s latency). PORT STATE SERVICE 135/tcp open msrpc <-- Puerto abierto 136/tcp filtered profile <-- Puerto cerrado 137/tcp filtered netbios-ns <-- Puerto cerrado 138/tcp filtered netbios-dgm <-- Puerto cerrado 139/tcp open netbios-ssn <-- Puerto abierto 140/tcp filtered unknown <-- Puerto cerrado Nmap done: 1 IP address (1 host up) scanned in 1.34 seconds # nmap -F 192.168.0.19 Starting Nmap 5.51 ( http://nmap.org ) at 2019-02-10 14:46 CST Nmap scan report for 192.168.0.19 Host is up (0.00066s latency). Not shown: 93 filtered ports PORT STATE SERVICE 80/tcp open http 135/tcp open msrpc 139/tcp open netbios-ssn 443/tcp open https 445/tcp open microsoft-ds 3306/tcp open mysql 5357/tcp open wsdapi Nmap done: 1 IP address (1 host up) scanned in 1.79 seconds
curl
es una herramienta de transferencia de datos. Soporta una gran variedad de protocolos de transferencia como FTPS, HTTP, HTTPS, IMAP, LDAP, POP3, SCP, TELNET, etc. etc. Al igual que con nc
y nmap
sus opciones son múltiples y los trucos que puede realizar son muy variados y completos. curl
esta diseñado para ejecutarse incluso sin interacción del usuario, pero como en los ejemplos anteriores solo utilizaremos su capacidad de escanear puertos abiertos, utilizando para esto el protocolo de telnet.
sintaxis: curl -v telnet://hots:puerto
# curl -v telnet://192.168.0.19:443 * About to connect() to 192.168.0.19 port 443 (#0) * Trying 192.168.0.19... connected * Connected to 192.168.0.19 (192.168.0.19) port 443 (#0) <-- Puerto abierto # curl -v telnet://192.168.0.19:639 * About to connect() to 192.168.0.19 port 639 (#0) * Trying 192.168.0.19... Expiró el tiempo de conexión * couldn't connect to host * Closing connection #0 curl: (7) couldn't connect to host <-- Puerto cerrado
Desde el shell de BASH es posible establecer conexiones TCP/UDP mediante los pseudo devices especiales /dev/tcp
y /dev/udp
. Este permite establecer sockets de red TCP y UDP a cualquier dispositivo o servicio de red que este accesible.
Al decir que son pseudo dispositivos, es porque lo son, no existen como archivos, de hecho si tratas de listarlos este es el resultado:
# ls /dev/tcp ls: no se puede acceder a /dev/tcp: No existe el fichero o el directorio
Sin embargo, como ya se mencionó, tienen el uso especializado de crear sockets de red.
sintaxis: /dev/tcp/host/puerto
sintaxis: /dev/udp/host/puerto
Ejemplo, consultar la hora al servidor NTP time.nist.gov :
# cat < /dev/tcp/time.nist.gov/13 58529 19-02-15 04:57:17 00 0 0 589.5 UTC(NIST) *
Y como podrás imaginarte, no necesariamente tienes que establecer un socket completo, se puden utilizar para probar o escanear puertos. Veamos ahora ejemplos para determinar puertos abiertos.
$ (echo > /dev/tcp/192.168.0.19/22) > /dev/null 2>&1 && echo "abierto" || echo "cerrado" abierto $ (echo > /dev/tcp/192.168.0.19/443) > /dev/null 2>&1 && echo "abierto" || echo "cerrado" cerrado $ timeout 3 bash -c 'cat < /dev/null > /dev/tcp/192.168.0.19/22' ; echo $? 0 <-- Puerto abierto $ timeout 3 bash -c 'cat < /dev/null > /dev/tcp/192.168.0.19/639' ; echo $? bash: connect: Connection refused bash: /dev/tcp/192.135.82.132/639: Connection refused 1 <-- Puerto cerrado
Para finalizar, recordemos que el archivo /etc/services
es un listado de todos los puertos/servicios registrados. Lista mantenida por la asociación IANA (http://www.iana.org/assignments/port-numbers). De este mismo archivo obtenemos lo siguiente, que es bueno saber:
$ grep -w 53 /etc/services domain 53/tcp # name-domain server domain 53/udp
Si encuentras útil la información que proveé LinuxTotal, considera realizar un donativo que estimule a seguir proporcionando contenido de calidad y utilidad. Gracias.
Dona a través de paypal::
O a través de bitcoins:
Utilizar los recursos informáticos un proveedor externo es lo que ahora se conoce como la nube, Cloud en inglés. Pero por otro l....
La gente considera encriptar algunos o todos sus archivos por múltiples razones. Ya sea que no puedan depender en seguridad físi....
Como formatear disketes o floppies en Linux.....
mysqldump es una utilieria cliente de MySQL que te permite respaldar bases de datos. Aprende por ejemplos como utilizarlo. Puedes....
...quien resuelve los nombres de dominio a su correspondiente IP, sería el DNS del proveedor, pero si implementamos un DNS Cache,....
En el artículo de LinuxTotal.com.mx sobre permisos se explica lo que es un archivo con permisos SUID o SGID, pueden ser potencial....
El comando find de Linux es extremadamente potente. No hay nada mejor para hacer todo tipo de búsquedas de archivos y carpetas qu....
Como montar imágenes ISO en Linux.....
Hay ocasiones que los usuarios insisten en poner contraseñas muy débiles de 5 o 6 caracteres a lo más. Y el argumento que dan e....
GNU/Linux es increiblemente fácil de configurar, no bases de datos raras, no registros, no directorios regados por aquí y por al....