Puertos WinRM: Guía de Configuración Predeterminada y Personalizada

WinRM y PowerShell Remoting son características cruciales al administrar computadoras con Windows de forma remota. Al igual que otros servicios, WinRM escucha en puertos específicos bajo circunstancias específicas. En este tutorial, aprende acerca de esos puertos de WinRM e incluso cómo cambiarlos, si es necesario.

Relacionado: PowerShell Remoting: La Guía Definitiva

El Oyente de WinRM

Una de las partes más importantes de WinRM (y los puertos en los que se ejecuta) es el oyente de WinRM.

El oyente de WinRM es un servidor web en su núcleo. Se comunica mediante HTTP y HTTPS, y en los días previos a Windows 7, solía usar de manera predeterminada los mismos puertos 80 y 443 que la mayoría de los servidores web.

El oyente se ejecuta como un servicio en tu computadora que está esperando que se establezcan conexiones, al igual que un servidor web normal.

A WinRm listener can listen two different ways; HTTP or HTTPS. The WinRM port for HTTP is 5985 while the WinRm port for HTTPS is 5986, by default.

  • HTTP – Puerto 5985
  • HTTPS – Puerto 5986

Relacionado: PowerShell Remoting: La Guía Definitiva

Errores al Conectar a Puertos Incorrectos

Y si no agregas la regla del firewall al cambiar el puerto, obtendrás el mismo mensaje incluso al proporcionar el puerto de esta manera.

Cambio de Puertos de WinRM

Aunque Microsoft recomienda mantener los puertos de escucha predeterminados por compatibilidad y facilidad de uso, puedes cambiarlos. Esto puede ser útil en casos en los que haya conflictos con los puertos predeterminados o una restricción del firewall que bloquee el uso de esos puertos.

Quizás tengas un sistema configurado para conectarse a WinRM a través de puertos personalizados. Cuando intentas conectarte como de costumbre, recibes el siguiente mensaje de error:

Failed WinRM connection due to wrong port

¡Si es así, es hora de cambiar el puerto de WinRM en el lado del servidor!

Para cambiar los puertos de WinRM, primero deberás averiguar si ya tienes un servicio escuchando en esos puertos.

Localización de Conexiones Existentes

La forma más fácil de descubrir qué puertos están en uso en una máquina Windows es usar la herramienta netstat . Netstat verifica todos los puertos activos en tu sistema y, si están activos, devuelve la IP y puerto de origen y destino utilizados.

Para localizar puertos en escucha antes de cambiar las publicaciones de WinRM, ejecuta netstat -aon. Los conmutadores -aon:

  • muestran todas las conexiones activas (a)
  • muestran el ID de proceso para el proceso que abrió la conexión (o)
  • no intentan resolver ningún nombre DNS de las IPs de destino (n)
Running netstat to find listening connections

Si un servidor web está escuchando en el puerto 80, por ejemplo, verás una línea donde la dirección local terminó en :80 bajo la columna Dirección Local. Esta fila es donde verás el PID o ID de proceso que está utilizando la conexión.

Una vez que conozcas el PID, puedes hacer referencia al PID para encontrar el nombre del proceso utilizando algo como el cmdlet de PowerShell Get-Process.

Running Get-Process to find process name

Aunque en este caso, puedes ver arriba que el nombre del proceso es simplemente System. Esto significa que el proceso está altamente integrado en el sistema operativo y probablemente esté incorporado en Windows.

Configuración de Puertos de Compatibilidad WinRM

WinRM tiene una característica llamada puertos de compatibilidad. Los puertos de compatibilidad existen para ser compatibles con algunos sistemas heredados que solo funcionan en los puertos 80 para HTTP y 443 para HTTPS. Si necesitas cambiar WinRM para que escuche en estos puertos, habilita los listeners de compatibilidad.

Una vez que sepas que no hay nada más ejecutándose en los puertos 80 y 443, configura los listeners de WSMan para utilizar los puertos de compatibilidad (80 para HTTP y 443 para HTTPS).

Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpListener -Value $true
 Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpsListener -Value $true

Configuración de WinRM para Escuchar en Cualquier Puerto

Si, por alguna razón, necesitas configurar WinRM para escuchar en un puerto no estándar, también puedes hacerlo. Para ello:

  1. Encuentra el nombre del listener. Puedes hacer esto enumerando todos los listeners de WinRM con el cmdlet Get-Item. El comando a continuación está listando todos (*) los listeners instalados actualmente.
Get-Item WSMan:\localhost\Listener*
Getting all existing WinRm listeners

2. A continuación, utilizando el nombre del listener mostrado anteriormente, configura cada listener usando Set-Item proporcionando la ruta del listener y el número de puerto al que deseas cambiarlo.

Set-Item WSMan:\localhost\Listener\\Port -Value 

3. En este punto, los oyentes de WinRM están escuchando en los puertos correctos, probablemente el Firewall de Windows esté rechazando cualquier conexión remota a esos puertos. Necesitas abrir esos puertos. Para hacerlo, ejecuta el siguiente comando. El código New-NetFirewallRule a continuación está creando una regla de Firewall de Windows para permitir todas las conexiones TCP entrantes a un puerto personalizado.

$FirewallParam = @{
     DisplayName = 'Custom WinRM Port Rule'
     Direction = 'Inbound'
     LocalPort = 
     Protocol = 'TCP'
     Action = 'Allow'
     Program = 'System'
 }
 New-NetFirewallRule @FirewallParam

Relacionado: Desactivar el Firewall de Windows: Descubre las Muchas Maneras

Si no hubieras abierto el puerto adecuado del Firewall de Windows, recibirías un mensaje como este al intentar conectar:

Failed WinRM connection due to Windows firewall

Conexión a un Puerto Personalizado con PSRemoting

Ahora que has configurado y configurado correctamente WinRM en el servidor de WinRM, necesitas probar la conexión con el cliente de WinRM. Para hacerlo, solo se necesita un parámetro adicional; Puerto.

Usando cualquiera de los comandos de PSRemoting como Invoke-Command o Enter-PSSession, especifica el parámetro Puerto y el puerto configurado para realizar una conexión exitosa.

Enter-PSSession -ComputerName <hostname> -Port 1111
Successful WinRm connection

Relacionado: Invoke-Command: La Mejor Manera de Ejecutar Código Remoto

Source:
https://adamtheautomator.com/winrm-port/