Este protocolo trabaja bajo el puerto por defecto 3389 TCP y UDP. Por regla general cuando abrimos una ventana de conexiones de escritorio remoto (mstsc.exe) en el campo en el que indicamos el nombre de equipo o dirección IP (local o externa) y no especificamos nada más, este establece la conexión RDP por defecto por el puerto 3389 TCP.
Si queremos llegar a cambiar este puerto por defecto tendríamos que hacer principalmente dos configuraciones manuales, las cuales serían cambiar un valor del registro de Windows y permitir en el Firewall de Windows las conexiones entrantes por el nuevo puerto establecido.
Pero para verificar todo empecemos por el principio comprobando las configuraciones para permitir conexiones remotas.
En propiedades del sistema > Acceso remoto verificamos que tengamos marcado "Permitir las conexiones remotas a este equipo" y que por seguridad tengamos marcado el checkbox de permitir autenticación a nivel de red (NTLM).
Comprobamos que los usuarios permitidos para establecer este tipo de conexiones está permitido o simplemente seleccionamos aquellos usuarios que queramos permitir conexión remota al equipo y que estos tengas una password con la que poder autenticarse sobre NTLM, estos usuarios no tienen por que ser administradores.
Figura 1: Configuración de escritorio remoto en sysdm.cpl. |
Comprobamos que el servicio RDCS (Remote Desktop Connection Service) está iniciado. Será el encargado de gestionar a nivel de sistema la conexión remota.
Figura 2: Servicio RDCS iniciado. |
Comprobamos que el propio servicio de Terminal Services (TermService) está iniciado. Será el encargado de permitir la conexión.
Figura 3: Servicio TermService iniciado. |
Por último comprobamos el WFAS (Windows Firewall Advanced System) y vemos que una vez que habilitamos opción de permitir conexiones y que el servicio está iniciado, este ya incluye estas tres reglas por defecto en el Firewall, vemos que por defecto usan tanto el protocolo TCP como UDL para el puerto de conexión 3389.
Estas reglas a priori no se pueden modificar ya que vienen definidas por por el sistema.
Figura 4: Reglas por defecto para RDP por conexión del puerto 3389. |
Llegamos a la parte que realmente hace título a este artículo, como cambiar el puerto por defecto 3389 a otro puerto que deseemos.
Abrimos un registro de Windows y nos vamos al siguiente path:
HKEY_LOCAL_MACHINE_\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-TcpBúscamos el valor DWORD "PortNumber", lo abrimos e introducimos el valor en hexadecimal correspondiente al valor decimal que queramos dar al nuevo puerto. Aunque cambiemos a base decicmal, tendremos que guardar el valor DWORD como hexadecimal.
En este caso modifiqué el puerto por defecto 3389 por el 60500 (en hexadecimal: ec54).
Figura 5: Cambiando el puerto de conexión por defecto de escritorio remoto. |
Una vez lo cambiemos tendremos que permitir la entrada del nuevo puerto modificado. Esto lo haremos en modo avanzado del Firewall y agregando nuevas reglas de entrada de conexión tanto para protocolo TCP como para UDP para el mismo puerto. De modo que quede como puerto específico el puerto modificado, en mi caso, continuando el ejemplo el puerto 60500.
Figura 6: Agregamos el nuevo puerto de entrada en el Firewall. |
Para usar esta conexión de forma local en nuestra red interna sería suficiente, pero si queremos hacerlo a través de una conexión de otra red, tendremos usar un DNS dinámico (DDNS).
Con nuestro DDNS ya configurado, tendremos que acceder al router que tengamos y en la sección NAT (NAT Forwarding) para la redirección de puertos, tendremos que abrir tanto para protocolos TCP y UDP el nuevo puerto establecido, continuando el ejemplo anterior, serían el 60500.
La redfirección de puerto se suelen definir por primer y último puerto externo y primer y último puerto interno e indicar la direccón IP local a la que va redireccionada los puertos.
De modo que por ejemplo, si lo preferimos podemos indicar a nuestro router que abra el puerto externo 55555 y que después nos redirija al puerto interno de nuestro equipo 60500.
Figura 7: NAT Forwarding en router. |
La visualización del router que se muestra en las capturas anteriores es solo un ejemplo de mi router SOHO ya que la interfaz gráfica de cada router suele ser distinta de uno a otro.
Para comprobar que el puerto está realmente abierto entre el router y el firewall de nuestro equipo local y queremos saber si es accesible desde otra red externa, lo comprobamos con algún escaneador de puertos online.
Figura 8: Escaneando el puerto 60500 en estado: abierto. |
Para conectarnos usando RDP por un puerto específico establecido, simplemente introducimos la dirección IP interna/externa o DDNS seguido de : (dos puntos) y el número de puerto en cuestión.
Figura 9: Conexión por escritorio remoto con un puerto específico. |
Por último podemos ver el resultado de este ejemplo en la siguiente captura. Observando que el puerto de conexión es el 60500 y el cliente lo estableció con uno aleatorio (65445). Con netstat podemos ver el PID y el servicio establecido para la conexión TermService.
Figura 10: Ejemplo de conexión establecida cliente/servidor con puerto RDP modificado. |
Conclusiones
Para cambiar el puerto de Terminal Service simplemente nos bastaría con cambiar la clave de registro correspondiente (figura 5) y a continuación abrir ese determinado puerto para TCP/UDP en la configuración avanzada del Firewall de Windows (figura 6).
Saludos!
Saludos!
Hola, enhorabuena por el blog, la verdad que lo acabo de descubrir y me parece muy bueno.
ResponderEliminarSolo quería aportar una solución más sencilla a la hora de cambiar el puerto de cara al acceso desde redes públicas
Sería mucho más sencillo y entiendo que igual de efectivo, corrígeme si me equivoco por favor, redireccionar el puerto simplemente en el router. Manteniendo los puertos por defecto en la máquina Windows
Gracias y saludos
Hola Manolo,
EliminarGracias por el comentario y me alegro que sean de utilidad las aportaciones del blog.
Efectivamente lo comentas es más sencillo y suele ser lo normal. El motivo de esta entrada simplemente era mostrar como poder cambiar el puerto por defecto del servicio RDP, principalmente para evitar el descubrimiento del puerto por defecto de este servicio en un escaneo de puertos a esa máquina.
Por ejemplo en un escaneo de puertos con nmap es posible detectarlo, veríamos algo como 60500/RDP en vez de 3389/RDP y aunque se puedan llevar a cabo igualmente ataques de fuerza bruta en un reconocimiento inicial o ataques automatizados a todos los equipos de una red interna que por defecto apuntan al 3389 sería algo que podemos evitar para este máquina en cuestión. En este caso se estableció el mismo puerto tanto en la propia máquina como el que se establece en la perimetral del router pero no tiene ningún razón especial. Podríamos establecer el puerto en un 443 o un 22 confundiendo así un posible vector de entrada al por defecto 3389.
Saludos,
Adrián.