WinRM Poorten: Standaardinstellingen en Aanpassingsgids

WinRM en PowerShell Remoting zijn cruciale functies bij het beheren van externe Windows-computers. Net als bij andere services luistert WinRM onder specifieke omstandigheden op specifieke poorten. In deze tutorial leer je welke WinRM-poorten er zijn en zelfs hoe je ze kunt wijzigen, indien nodig.

Gerelateerd: PowerShell Remoting: De Ultieme Gids

De WinRM Listener

Een van de belangrijkste onderdelen van WinRM (en de poorten waarop het draait) is de WinRM-listener.

De WinRM-listener is in wezen een webserver. Het communiceert via HTTP en HTTPS en in de pre-Windows 7 dagen gebruikte het zelfs standaard dezelfde poorten 80 en 443 als de meeste webservers.

De listener draait als een service op je computer en wacht op verbindingen die tot stand moeten worden gebracht, net als een normale webserver.

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 – Poort 5985
  • HTTPS – Poort 5986

Gerelateerd: PowerShell Remoting: De Ultieme Gids

Fouten bij het verbinden met verkeerde poorten

En als je de firewallregel niet toevoegt wanneer je de poort wijzigt, krijg je dezelfde foutmelding, zelfs als je de poort opgeeft zoals hier.

WinRM-poorten wijzigen

Hoewel Microsoft aanbeveelt om bij de standaard luisterpoorten te blijven vanwege compatibiliteit en gebruiksgemak, kun je ze wijzigen. Dit kan handig zijn in gevallen waarin er een conflict is met de standaardpoorten of een firewall-beperking het gebruik van die poorten blokkeert.

Misschien heb je een systeem opgezet dat geconfigureerd is om verbinding te maken met WinRM via aangepaste poorten. Als je probeert te verbinden zoals normaal, ontvang je het volgende foutbericht:

Failed WinRM connection due to wrong port

Als dat het geval is, is het tijd om de WinRM-poort aan de serverzijde te wijzigen!

Om de WinRM-poorten te wijzigen, moet je eerst uitzoeken of er al een service luistert op die poorten.

Bestaande verbindingen traceren

De eenvoudigste manier om te ontdekken welke poorten in gebruik zijn op een Windows-machine is door de netstat tool te gebruiken. Netstat controleert alle actieve poorten op je systeem en geeft, indien actief, het bron- en doel-IP en de gebruikte poort terug.

Om luisterende poorten op te sporen voordat je WinRM-poorten wijzigt, voer je netstat -aon uit. De -aon-schakels:

  • tonen alle actieve verbindingen (a)
  • tonen het proces-ID voor het proces dat de verbinding heeft geopend (o)
  • pogen geen DNS-namen van bestemmings-IP’s op te lossen (n)
Running netstat to find listening connections

Als bijvoorbeeld een webserver luistert op poort 80, zie je een regel waar het lokale adres eindigde in :80 onder de kolom Lokaal adres. In deze rij zie je het PID of proces-ID dat de verbinding gebruikt.

Eens je de PID kent, kan je de PID gebruiken om de procesnaam te vinden met iets zoals de \href{https://adamtheautomator.com/powershell-get-process/}{Get-Process} PowerShell-cmdlet.

Running Get-Process to find process name

Hoewel je in dit geval hierboven kan zien dat de procesnaam gewoonweg Systeem is. Dit betekent dat het proces zeer geïntegreerd is in het besturingssysteem en waarschijnlijk ingebouwd is in Windows.

WinRM Compatibiliteitspoorten instellen

WinRM heeft een functie genaamd compatibiliteitspoorten. Compatibiliteitspoorten bestaan om achterwaarts compatibel te zijn met sommige legacy systemen die alleen werken op poorten 80 voor HTTP en 443 voor HTTPS. Als je WinRm moet veranderen om te luisteren op deze poorten, schakel dan de compatibiliteitsluisteraars in.

Zodra je weet dat er niets anders draait op poorten 80 en 443, stel dan de WSMan luisteraars in om de compatibiliteitspoorten te gebruiken (80 voor HTTP en 443 voor HTTPS).

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

WinRM instellen om te luisteren op eender welke poort

Als je, om een of andere reden, WinRM moet configureren om te luisteren op een niet-standaard poort, kan je dat ook doen. Om dat te doen:

  1. Vind de luisteraar naam. Je kan dit doen door alle WinRM luisteraars op te sommen met behulp van de \code{Get-Item} cmdlet. Het onderstaande commando lijst alle (*) geïnstalleerde luisteraars momenteel.
Get-Item WSMan:\localhost\Listener*
Getting all existing WinRm listeners

2. Vervolgens, gebruik de bovenstaande luisteraarsnaam om elke luisteraar te configureren met behulp van \code{Set-Item} met de pad van de luisteraar en het poortnummer om het naar te wijzigen.

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

3. Op dit moment luisteren de WinRM-listeners op de juiste poorten, waarschijnlijk weigert de Windows Firewall externe verbindingen naar die poorten. Je moet die poorten openen. Voer hiervoor de volgende opdracht uit. De onderstaande New-NetFirewallRule maakt een Windows Firewall-regel om alle inkomende TCP-verbindingen naar een aangepoorte poort toe te staan.

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

Gerelateerd: Windows Firewall uitschakelen: Ontdek de vele manieren

Als je de juiste Windows Firewall-poort niet hebt geopend, krijg je een bericht als je probeert verbinding te maken:

Failed WinRM connection due to Windows firewall

Verbinding maken met een aangepaste poort met PSRemoting

Nu je WinRM succesvol hebt ingesteld en geconfigureerd op de WinRM-server, moet je de verbinding testen met de WinRM-client. Daarvoor is slechts één extra parameter nodig; Port.

Gebruik een van de PSRemoting-opdrachten zoals Invoke-Command of Enter-PSSession, specificeer de Port-parameter en de ingestelde poort om succesvol verbinding te maken.

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

Gerelateerd: Invoke-Command: De beste manier om externe code uit te voeren

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