Blog: Systemy serwerowe | Ms windows server 2 | Systemy microsoft | Ms windows server

Jak zaprzyjaźnić się z WIndows Server Core – część 6

Jak zaprzyjaźnić się z WIndows Server Core – część 6
  • 1 004 views

W piątym artykule zapoznaliśmy się z funkcjonalnością PowerShell Remoting. W podstawowej konfiguracji wykorzystuje ona protokół HTTP, który nie zapewnia prywatności (szyfrowania) treści komunikacji, chociaż PowerShell domyślnie stosuje szyfrowanie na poziomie aplikacji. Dzięki temu do uwierzytelniania można wykorzystać protokół Kerberos, uzyskując na przykład informacje WMI z hosta bez potrzeby otwierania portów RPC lub samodzielnego zajmowania się DCOM. W niektórych przypadkach niestety następuje obniżenie poziomu bezpieczeństwa. W systemie Windows można wyłączyć szyfrowanie podczas łączenia, a także określić uwierzytelnianie na poziomie Basic, co ujawnia poświadczenia użytkownika. W niektórych organizacjach działy bezpieczeństwa blokują z tego powodu funkcjonalność PowerShell Remoting, co niekoniecznie jest dobrym rozwiązaniem. W wielu wypadkach wynika to z zachowawczego postępowania bądź braku odpowiedniej wiedzy. W tym artykule postaram się ją dostarczyć.

Udostępnij!

Jak zaprzyjaźnić się z Windows Server Core – część 6

W poprzednim artykule skupiliśmy się na nieco bardziej teoretycznym wprowadzeniu do tematu, dzisiaj natomiast weźmiemy pod lupę zagadnienia praktyczne, przedstawiając tutorial przeznaczony do praktycznego wdrożenia PowerShell Remoting z wykorzystaniem szyfrowania SSL.

Konfigurację rozpoczniemy od Urzędu Certyfikacji (CA) i przygotowania szablonu certyfikatu, który zostanie wdrożony z wykorzystaniem zasad grupy (GPO)  oraz opcji Autoenrollment. Za pomocą polecenia certsrv.msc uruchamiamy konsolę do zarządzania Urzędem Certyfikacji (CA):

 

Przechodzimy do zarządzania szablonami certyfikatów, wybierając opcję „Manage”.

 

Wybieramy szablon „ Web Server”, a następnie „ Duplicate Template”.

Konfigurujemy właściwości szablonu z uwzględnieniem wersji systemu operacyjnego dla Urzędu Certyfikacji i dla najniższej wersji, na której będzie instalowany dany certyfikat.

Przechodzimy do zakładki „General” i wpisujemy nową nazwę szablonu, po czym określamy czas ważności oraz czas odświeżania.

Wybieramy zakładkę Subject Name I zaznaczamy “Build from this Active Directory information”: dla listy rozwijanej “Subject name format” wybieramy „ Common name”, dla opcji “ Include this information in alternate subject name” zaznaczamy “DNS Name”.

Przechodzimy do zakładki Security, wybieramy przycisk Add i dodajemy „Domain Computers”, dla których zaznaczamy opcje: Read, Enroll i AutoEnroll.

Wybieramy przycisk OK, by zatwierdzić modyfikacje. Zamykamy konsolę do zarządzania certyfikatami i wracamy do konsoli zarządzania Urzędem Certyfikacji. Z menu kontekstowego „Certificate Templates” wybieramy opcję New -> Certificate Template to Issue i zaznaczamy szablon certyfikatu, czyli w naszym przypadku szablon PSRemoting_SSL. Zamykamy konsolę do zarządzania Urzędem Certyfikacji.

Na potrzeby tego artykułu została stworzona jednostka organizacyjna „Servers”, w której znajduje się konto komputera AL-DC2. W konsoli PowerShell tworzymy nowy obiekt „PowerShell Remoting SSL”.

New-GPO -Name „PowerShell Remoting SSL” | New-GPLink -Target ‚ou=servers,dc=altkom,dc=com’ -LinkEnabled Yes

W konsoli PowerShell wpisujemy “gpme.msc” i dla jednostki organizacyjnej „Servers” wybieramy obiekt zasad grupy „PowerShell Remoting SSL”.

Przechodzimy do edycji obiektu zasad grupy.

Konfigurujemy opcję Certificate Services Client – Auto Enrollment.

Zatwierdzamy skonfigurowane ustawienia. Następnie przechodzimy do konfiguracji skryptu startowego.

Przechodzimy do konsoli PowerShell ISE i w panelu skryptowym wpisujemy następujące polecenia:

Set-WSManQuickConfig -UseSSL -Force

Get-ChildItem -Path WSMan:\localhost\Listener | Where-Object {$PSItem.Keys -contains „Transport=HTTP”} | Remove-Item -Recurse -Confirm:$false

Plik zapisujemy pod nazwą “ SetHttps.ps1”.

Wracamy do edycji obiektu zasad grupy „ PowerShell Remoting SSL” i konfigurujemy skrypt startowy.

Okno Startup Properties domyślnie uruchamia zakładkę Scripts, ale naszym celem jest zakładka PowerShell Scripts. Klikamy przycisk Show Files i do tej lokalizacji kopiujemy przygotowany wcześniej skrypt. Klikamy przycisk „ Add…”, następnie przycisk „ Browse”, zaznaczamy skrypt „ SetHttps.ps1” i zatwierdzamy go przyciskiem OK.

Kolejny istotny krok to jeszcze konfiguracja uprawnień na poziomie systemu plików. Ponownie klikamy przycisk Show Files i dla naszego skryptu wybieramy opcję Properties. Klikamy przycisk „Add…”,  dodajemy „ Domain Computers” i zatwierdzamy zmiany przyciskiem OK.

Jeśli chcemy, żeby nasz skrypt miał prawie natychmiastowy efekt, musimy skonfigurować jeszcze jedną opcję w zasadach grupy dla węzła komputera. Przechodzimy do szablonów administracyjnych i w węźle  System zaznaczamy Group Policy, a następnie wybieramy opcję „Configure Logon Script Delay”. Domyślny czas opóźnienia dla skryptu PowerShell to >5 minut. Zaznaczamy opcję Enabled i w polu minute wpisujemy ” 1”. Przyciskiem OK zatwierdzamy zmiany.

W kolejnym kroku musimy skonfigurować wyjątki na firewall-u, ponieważ PowerShell Remoting dla usługi WinRM korzysta z portu 5986. W węźle konfiguracji komputera dla Windows Defender Firewall with Advanced Security konfigurujemy nową regułę dla ruchu przychodzącego.

Konfigurujemy regułę dla portu.

Wpisujemy Specific local ports >5986.

Oczywiście, aby uzyskać szybki efekt na testowym systemie, wymuszamy odświeżenie zasad grupy.

 

Na testowym systemie wpisujemy polecenie:

Get-ChildItem -Path WSMan:\localhost\Listener

I dowiadujemy się, że połączenie do zdalnego komputera jest możliwe wyłącznie z wykorzystaniem HTTPS.

Ze stacji, która służy nam do zarządzania zdalnego wpisujemy polecenie:

Enter-PSSession -ComputerName al-dc2.altkom.com -Credential altkom\lara

Polecenie zakończyło się niepowodzeniem, ponieważ za pomocą skryptu uniemożliwiliśmy nawiązanie połączenia z wykorzystaniem HTTP.

Wpisujemy kolejne polecenie z wykorzystaniem parametru „UseSSL

Enter-PSSession -ComputerName al-dc2.altkom.com -Credential altkom\lara -UseSSL.

Zakończyło się ono sukcesem.

Podobnie możemy wykorzystać polecenie, które odpyta wiele komputerów i zapewni szyfrowane połączenie:

Invoke-Command -ComputerName al-dc1.altkom.com,al-dc2.altkom.com -ScriptBlock {hostname} -UseSSL

Podsumowanie

W niniejszym artykule-tutorialu starałem się skupić na zagadnieniu bezpiecznego i zawsze szyfrowanego połączenia z wykorzystaniem PowerShell Remoting, które ma bardzo istotne znaczenie zwłaszcza w obecnej niebezpiecznej sytuacji geopolitycznej. Jak mówi ludowe porzekadło, lepiej dmuchać na zimne i mieć stałą możliwość bezpiecznego zarządzania zdalnego. Mam nadzieję, że lektura tego artykułu przekona wielu administratorów do szerokiego wykorzystania PowerShell w swojej codziennej pracy.