W ramach naszej witryny stosujemy pliki cookies. Kontynuując przeglądanie strony, wyrażasz zgodę na używanie przez nas plików cookies. Dowiedz się więcej tutaj
X

Księgarnia PWN

   

   

   

   

   

   

.

.

.

.

Bezpłatny newsletter


Rozwiązywanie problemów z poziomu PowerShell cz.4

Rozwiązywanie problemów z poziomu PowerShell  cz.4

Artykuł zamyka mini serię dotyczącą PowerShell i obejmuje następujące zagadnienia:

  • Wyszukiwanie w Event Viewer poszczególnych zdarzeń
  • Przekazywanie dzienników zdarzeń do centralnego serwera dziennika

Przeszukiwanie plików logów dla określonych zdarzeń

W przypadku wystąpienia jakiegoś problemu w systemie operacyjnym, może pojawić się potrzeba określenia kiedy wystąpił problem. Jeśli problem został zarejestrowany w dzienniku zdarzeń systemu Windows, odpowiedź na to pytanie można łatwo odnaleźć, przeglądając te zdarzenia.

Jednak, może to być kłopotliwe, jeżeli zdarzenia są rejestrowane na wielu systemach lub dziennik zdarzeń jest zajęty.

Poniżej zostały opisane metody przeglądania Windows Event Log.

Należy wykonać następujące kroki, by przeprowadzić kwerendę na dzienniku zdarzeń:

1. Aby wyświetlić 20 ostatnich wydarzeń, które zostały zapisane w określonym dzienniku, należy wykonać następujące polecenie:

Get-WinEvent -LogName System -MaxEvents 20

Po wykonaniu polecenia uzyskamy wynik zbliżony do poniższego (Rys. 14):

powershell14

Rysunek 14. Wyświetlenie 20 ostatnich zdarzeń z wykorzystaniem polecenia Get-WinEvent.

2. Do wyświetlenia ostatnich 5 zdarzeń z Service Control Manager, należy wykonać poniższe polecenie:

Get-WinEvent -ProviderName "Service Control Manager" -MaxEvents 5

3. Do wyszukiwania konkretnych zdarzeń można wykorzystać poniższe polecenie:
Get-WinEvent -FilterHashtable @{LogName='System';ID=17} -MaxEvents 5

4. Lista konkretnych zdarzeń z ostatnich dziesięciu minut.

Get-WinEvent –FilterHashtable @{LogName='System';ID=17;StartTime=$(Get-Date).AddMinutes((-10)}

5. Wyszukiwanie wielu komputerów.

"Server1", "Server2" | ForEach-Object{ Get-WinEvent -ComputerName $_ -FilterHashtable @{LogName='System';ID=17;StartTime=$(Get-Date).AddMinutes((-10)} }

Wyjaśnienie

Za pomocą polecenia Get-WinEvent wysłane zostało zapytanie do lokalnego dziennika zdarzeń. Pierwszy przykład po prostu zwraca 10 ostatnich logów odnalezionych w dzienniku zdarzeń. Taki sposób prezentacji może być pomocny w ograniczaniu liczby wyświetlanych wyników lub do wyświetlania jedynie informacji o najnowszych logach.

W drugim przykładzie wykorzystane zostało polecenie Get-WinEvent z przełącznikiem- providerName, dzięki któremu zostały przeszukane wszystkie dzienniki zdarzeń w systemie dla konkretnego dostawcy. Większość aplikacji lub usług, które zapisują swoje logi w dzienniku zdarzeń oznaczają je swoją unikalną nazwą. W ten sposób można sprawdzić wszystkie dzienniki zdarzeń dla logów od określonego dostawcy. W tym przypadku wywołane zostały wydarzenia z Service Control Manager lub wydarzeń dotyczących uruchamiania i zatrzymywania usług.

W trzecim przypadku wykorzystany został przełącznik – FilterHastable do tworzenia złożonego filtra. W tym przypadku kwerenda wysłana do dziennika zdarzeń dotyczy konkretnego identyfikatora zdarzenia. W tym przypadku zwracanych jest 10 ostatnich zdarzeń z ID 17, dotyczących WindowsUpdateClient lub instalacji wydarzeń.

Następny przykład dotyczy kwerendy zdarzeń, które wystąpiły w ciągu ostatnich 10 minut. To pytanie jest szczególnie przydatne, gdy trzeba znaleźć konkretne wydarzenia, które miały miejsce w ciągu ostatniej godziny, dnia, tygodnia lub miesiąca.

Ostatnia przedstawiona kwerenda dotyczy sprawdzania zdarzeń występujących na wielu komputerach. Wykorzystany został tutaj przełącznik –ComputerName, który określa o jakie zdalne maszyny chodzi.

Wykorzystując w ten sposób PowerShell można skonfigurować podstawowy monitoring i system alarmowy. Zamiast przeglądania wyników na ekranie, można stworzyć skrypt umożliwiający generowanie wiadomości e-mail lub inicjowania zadań mających generowanie alertu i automatycznego rozwiązywania problemów.

Przekazywanie dzienników zdarzeń do centralnego serwera dziennika

W systemie Windows Server istnieje możliwość przekazywania dzienników zdarzeń na zdalne serwery. Poprzez przesłanie zdarzenia do innego systemu, serwer centralny może być skonfigurowany do raportowania i wykonywania działań na podstawie przekazanych wydarzeń.

Do przesyłania zdarzeń wykorzystywana jest komunikacja używająca SOAP przez HTTP.
Istnieją dwa rodzaje subskrypcji dziennika zdarzeń: zainicjowane przez klienta i zainicjowane przez kolektor. Dla subskrypcji zainicjowanej przez klienta, można użyć zasad grupy i skonfigurować klientów, tak aby wysyłali wydarzenia do kolektora. W przypadku zainicjonowanych przez kolektor, zdarzenia ściągane są z klientów.

W poniższym przykładzie utworzona zostanie subskrypcja zainicjonowana przez klienta. Wykorzystane zostaną Group Policy do dystrybucji konfiguracji do naszych źródeł zdarzeń. Będziemy konfigurowania tylko jednego klienta, ale proces ten może zostać rozszerzony na dziesiątki lub nawet setki klientów.

W poniższym przykładzie będą potrzebne przynajmniej dwa serwery Windows Server 2012 w środowisku Active Directory. Serwer1 wykorzystany zostanie jako kolektor zdarzeń. Serwer2 przekazuje wydarzenia do kolektora, tak jak pokazano to na poniższym rysunku (Rys. 15):

powershell15

Rysunek 15. Schemat działania przekazywania zdarzeń do centralnego dziennika zdarzeń.

Aby skonfigurować przekazywanie zdarzeń należy wykonać:

1. Utworzenie zabezpieczeń dla kolektora grupy.

New-ADGroup -Name "Event Collector" -GroupScope Global
Add-ADGroupMember -Identity "Event Collector" -Members Serwer1$

2. Tworzenie obiektu GPO dla systemu kolektora.

New-GPO -Name "Event Collector"
New-GPLink -Name "Event Collector" -Target "DC=Corp,DC=Contoso,DC=Com"
Set-GPPermission -Name "Event Collector" -TargetName "Event Collector" -TargetType Group -PermissionLevel GpoApply
Set-GPPermission -Name "Event Collector" -TargetName "Authenticated Users" -TargetType Group -PermissionLevel None

3. Zastosowanie ustawień dla GPO kolektora.

$WinRMKey="HKLM\Software\Policies\Microsoft\Windows\WinRM\Service"
Set-GPRegistryValue -Name "Event Collector" -Key $WinRMKey -ValueName "AllowAutoConfig" -Type DWORD -Value 1
Set-GPRegistryValue -Name "Event Collector" -Key $WinRMKey -ValueName "IPv4Filter" -Type STRING -Value "*"
Set-GPRegistryValue -Name "Event Collector" -Key $WinRMKey -ValueName "IPv6Filter" -Type STRING -Value "*"

4.Włączenie i konfiguracja kolektora.

echo y | wecutil qc

5. Tworzenie pliku XML dla subskrypcji.

Poniżej przykład pliku subscription.xml zastosowanego w tym przykładzie:

<?xml version="1.0" encoding="UTF-8"?>
<Subscription xmlns="http://schemas.microsoft.com/2006/03/windows/events/subscription">
<SubscriptionId>Collect security</SubscriptionId>
<SubscriptionType>SourceInitiated</SubscriptionType>

<Description></Description>
<Enabled>true</Enabled>
<Uri>http://schemas.microsoft.com/wbem/wsman/1/windows/EventLog</Uri>
<ConfigurationMode>Normal</ConfigurationMode>
<Query>
<![CDATA[
<QueryList><Query Id="0"><Select Path="Security">*[System[(Level=1 or Level=2 or Level=3)]]</Select></Query></QueryList>
]]>
</Query>
<ReadExistingEvents>false</ReadExistingEvents>
<TransportName>HTTP</TransportName>
<ContentFormat>RenderedText</ContentFormat>
<Locale Language="en-US"/>
<LogFile>ForwardedEvents</LogFile>
<PublisherName>Microsoft-Windows-EventCollector</PublisherName>
<AllowedSourceNonDomainComputers>
<AllowedIssuerCAList>
</AllowedIssuerCAList>
</AllowedSourceNonDomainComputers>
<AllowedSourceDomainComputers>O:NSG:BAD:P(A;;GA;;;DC)S:</AllowedSourceDomainComputers>
</Subscription>

Przykładowy plik XML może być przeglądany przez wykonanie polecenia wecutil cs /?.

Można wyeksportować do pliku XML istniejącą subskrypcję wykonując wecutil gs <name> /f:XML.

6. Utworzenie subskrypcji.

wecutil cs subscription.xml

7. Utworzenie grupy zabezpieczeń dla źródłowego systemu.

New-ADGroup -Name "Event Source" -GroupScope Global
Add-ADGroupMember -Identity "Event Source" -Members Serwer2$

8. Tworzenie obiektu GPO dla źródłowego systemu.

New-GPO -Name "Event Source"
New-GPLink -Name "Event Source" -Target "DC=Corp,DC=Contoso,DC=Com"
Set-GPPermission -Name "Event Source" -TargetName "Event Source" -TargetType Group -PermissionLevel GpoApply
Set-GPPermission -Name "Event Source" -TargetName "Authenticated Users" -TargetType Group -PermissionLevel None

9. Zastosowanie ustawień GPO.

$EventKey="HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager" $TargetAddress="Server=http://serwer1.corp.contoso.com:5985/wsman/SubscriptionManager/WEC"
Set-GPRegistryValue -Name "Event Source" -Key $Even

10. W tym kroku należy otworzyć edytor zarządzania zasadami grupy i dokonać aktualizacji GPO, a także dodać usługę sieciową do grupy Event Log Readers (Rys. 16).

powershell16

Rysunek 16. Dodanie w edytorze GPO usługi sieciowej do grupy Event Log Readers.

11. Następnie należy ponownie uruchomić komputer źródłowy.

12. Na sam koniec pozostało uruchomić Event Viewer, czyli podgląd zdarzeń na komputerze kolektora i przejrzeć Forwarded Events czyli zakładkę z przekazywanymi zdarzeniami.

Wyjaśnienie

Zaczynamy od utworzenia grupy zabezpieczeń AD o nazwie Event Collector do obsługi serwera kolektora. Ta grupa zabezpieczeń jest stosowana w celu ograniczenia, które są nakładane na komputery Group Policy.

W drugim etapie, wykorzystane jest polecenie New-GPO do utworzenia zasady Group Policy dla komputera kolektora. Polecenie New-GPLink zostało wykorzystane do połączenia z domeną. Następnie za pomocą Set-GPPermission zostały zmodyfikowane uprawnienia GPO, aby ograniczyć dostęp do grupy bezpieczeństwa w Event Collector.

Następnie można skonfigurować ustawienia GPO. Pierwsze ustawienie dotyczy AlowAutoConfig, które informuje system Windows, aby uruchomić usługę WinRM i rozpocząć nasłuchiwanie zdarzeń z zewnętrznych źródeł. Wartości IPv4Filter i IPv6Filter określają, z których systemów będą przyjmowane połączenia. W scenariuszu zaprezentowanym w tym artykule wprowadzony jest znak: *, co oznacza, że z każdego źródła.

Kolejny krok to konfiguracja Windows Event Collector. Uruchomienie polecenia wecutil qc zastosuje podstawową konfigurację dla kolektora i skonfiguruje usługę do automatycznego uruchamiania się wraz z startem systemu operacyjnego.

Następnie utworzony został plik subscription.xml. Plik XML instruuje system kolektorów, aby wysyłały wszystkie zgłoszenia z Security w dzienniku zdarzeń, które mają status Critical, Error lub Warning.

W szóstym etapie, utworzona zostaje subskrypcja poprzez plik XML. Aby utworzyć subskrypcję, wykorzystano polecenie wecutil.exe z parametrem cs i odwołaniem do pliku XML. Kolektor na tym etapie jest już w pełni skonfigurowany i teraz pozostaje jeszcze skonfigurować komputery źródłowe.

W siódmym etapie, można już rozpocząć konfigurację systemów źródłowych, tworząc grupę zabezpieczeń AD dla komputerów źródłowych. Po pierwsze, wykorzystujemy New-ADGroupMember, aby dodać systemy przesyłające zgłoszenia. W tym przypadku dodany zostanie jedynie do tej grupy Serwer2, ale oczywiście istnieje możliwość podłączenia wielu systemów.

Następnie wykorzystane zostało polecenie New-GPO, aby utworzyć zasady grupy dla komputerów źródłowych. Najpierw jednak należy utworzyć Group Policy i użyć New-GPLink, by połączyć go z domeną. Następnie za pomocą Set-GPPermission dokonać zmiany uprawnień, aby ograniczyć dostęp do grupy zabezpieczeń.

W kolejnym punkcie zostały skonfigurowane ustawienia GPO. Zaczynamy od zdefiniowania zmiennej $EventKey, która posłuży do identyfikacji klucza rejestru lokalizacji, która będzie konfigurowania. Następnie została zdefiniowana zmienna $targetAddress do określenia miejsca, do którego klienci będą przekazywać logi. Został też skonfigurowany klucz SubscriptionManager z adresem serwera docelowego.

Ostatni etap to uruchomienie Group Policy Management Editor w celu aktualizacji źródła zdarzeń GPO. Ten krok nie może być zrobiony przy użyciu PowerShell. Dlatego też musi być wykonany przy użyciu wspomnianego edytora. Należy dokonać edycji Event Source GPO i przejść do Computer Configuration | Policies | Windows Settings | Security Settings | Restricted Groups. Teraz należy dodać rolę Network Service do lokalnej grupy Event Log Readers. Uprawnienie to jest konieczne dla systemu źródłowego, aby było możliwe wysyłanie logów dziennika zdarzeń.

Aby wszystkie zabezpieczenia zostały zastosowane, komputer źródłowy musi być ponownie uruchomiony. Po ponownym uruchomieniu komputera, dzienniki zdarzeń powinny zacząć być przekazywane do systemu docelowego.

Autor: Grzegorz Gałęzowski

Polecamy

Partnerzy