Microsoft MVP성태의 닷넷 이야기
Windows: 149. 다른 컴퓨터의 윈도우 이벤트 로그를 구독하는 방법 [링크 복사], [링크+제목 복사],
조회: 13283
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

다른 컴퓨터의 윈도우 이벤트 로그를 구독하는 방법

다음과 같은 질문이 있군요. ^^

Windows Event log 구독 관련
; https://social.msdn.microsoft.com/Forums/ko-KR/a115488c-bd46-4174-9238-99dcfcf6ab3a/windows-event-log-?forum=vistako

관련해서 검색해 보면 다음의 글과 같이 완전한 방법을 친절하게 설명한 자료가 있습니다.

Active Directory: Configuring Event Log Subscriptions (Forwarding)
; https://sid-500.com/2018/04/23/active-directory-configuring-event-log-subscriptions-forwarding/

(해보진 않았지만, "Active Directory"라고 써 있기는 해도 WORKGROUP 상에서 계정 정보만 적절하게 처리해 준다면 될 듯도 합니다.) 저도 한 번 해봤는데요. 우선, 윈도우 이벤트를 끌어오려는 측 - 즉, 클라이언트 컴퓨터에서는 다음과 같이 실행해서 "Windows Event Collector" NT 서비스를 구성해 주면 됩니다.

// 관리자 권한으로 실행

C:\WINDOWS\system32> wecutil qc
The service startup mode will be changed to Delay-Start. Would you like to proceed ( Y- yes or N- no)?y
Windows Event Collector service was configured successfully.

그다음 이벤트를 제공할 측 - 즉, 서버에서는 "Server Manager Remoting"을 다음의 PowerShell 명령어로 활성화시켜 줍니다.

// 관리자 권한으로 실행

Configure-SMRemoting.exe -ENABLE

실행 후 다음과 같이 명령행으로 확인하거나,

PS C:\WINDOWS\system32> Configure-SMRemoting.exe -GET
Server Manager Remoting is enabled

서버 관리자 MMC 화면에서 다음과 같이 "Enabled"로 되어 있는 것으로 정상 처리 여부를 알 수 있습니다.

window_event_sub_1.png

참고로, Configure-SMRemoting.exe 명령어가 없다면 그냥 NT 서비스 관리자에서 다음의 서비스를 "Automatic"으로 실행시켜도 무방합니다.

Service name: WinRM
Display name: Windows Remote Management (WS-Management)

WinRM 서비스는 이 통신을 위해 TCP 5985 포트를 열고 있기 때문에 netstat로 이를 확인할 수 있습니다.

C:\WINDOWS\system32> netstat -ano | findstr 5985
  TCP    0.0.0.0:5985           0.0.0.0:0              LISTENING       4
  TCP    192.168.0.5:5985       192.168.0.6:18795      ESTABLISHED     4
  TCP    [::]:5985              [::]:0                 LISTENING       4

당연히, 아무 클라이언트나 WinRM에 접속해서 마구 이벤트를 끌어가면 안 될 텐데요, 이를 위해 접속을 허용할 계정이나 컴퓨터를 로컬 컴퓨터의 "Event Log Readers" 그룹에 등록해야 합니다. 만약 AD 관련 PowerShell 구성 요소들이 설치되어 있으면 "Add-ADGroupMember"로 실행해주면 간단한데, 대개의 경우 별도 설치를 필요로 하므로 그냥 "net" 명령어로 추가해도 됩니다.

가령, 이벤트를 끌어가려는 클라이언트의 컴퓨터 이름이 "testpc"이고 Active Directory의 이름이 "testad"라면 다음과 같이 등록합니다.

C:\WINDOWS\system32> net localgroup "Event Log Readers" testad\testpc$ /add
The command completed successfully.

확인은 다음과 같이 할 수 있습니다.

C:\WINDOWS\system32> net localgroup "Event Log Readers"
Alias name     Event Log Readers
Comment        Members of this group can read event logs from local machine

Members

-------------------------------------------------------------------------------
TESTAD\TESTPC$
The command completed successfully.

Add-ADGroupMember로 등록하려면 다음과 같이 PowerShell에서 명령을 내릴 수 있습니다.

PS C:\WINDOWS\system32> Add-ADGroupMember -Identity "Event Log Readers" -Members "testpc$"

사실 저 과정도 명령어로 하지 않고 그냥 다음 화면과 같이 "컴퓨터 관리" MMC에서 직접 "Event Log Readers" 그룹에 추가해도 상관없습니다.

window_event_sub_2.png

여기까지 했으면 모든 구성은 끝이 났습니다. 이제는 이벤트를 끌어가려는 측의 "이벤트 로그" MMC에서 원하는 이벤트를 선택해 구독해 주면 됩니다.




설정이 완료된 후 이벤트가 쌓이지 않는다면 이벤트 구독 설정 항목을 마우스 우 클릭해 ""Runtime Status"로 확인해 보면 오류 이유를 알 수 있습니다. 가령 계정 정보가 맞지 않는다면 "Access is denied"같은 오류를 보게 되는데, 만약 정상적으로 설정했는데도 여전히 오류가 발생한다면 그냥 클라이언트 측의 "NT 서비스" 관리자로 가서 "Windows Event Collector" 서비스를 재시작하면 됩니다. 아무 문제가 없다면 다음과 같은 화면이 나와야 합니다.

window_event_sub_3.png

그런데, 그래도 수집이 안 되는 경우가 있었습니다. 음... 혹시나 해서 이벤트 로그를 제공하는 측의 PC를 재시작했더니... 잘 되는군요. ^^ 뭔가 서비스 재시작이 필요하거나 하는 부분이 있는 것 같은데 일단 그건 다음 세팅할 때 찾아보도록 하고 이번엔 여기까지만 정리합니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 9/5/2018]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2018-09-05 10시55분
[이태화] 요즘은 elastic의 winlogbeat 를 사용해서 Windows Event 중앙화를 하는 것 같더군요. 중요 이벤트는 어떤 것을 필터링하는지는 모르겠습니다.
[guest]
2018-09-06 01시44분
업계 소식 감사드립니다. ^^ elastic의 생태계 규모가 대단하군요.
정성태

... 46  47  48  49  50  51  52  53  54  55  56  57  58  [59]  60  ...
NoWriterDateCnt.TitleFile(s)
12167정성태3/5/202011827개발 환경 구성: 471. C# - 닷넷 응용 프로그램에서 DB2 Express-C 데이터베이스 사용 (3) - ibmcom/db2express-c 컨테이너 사용
12166정성태3/4/202011442개발 환경 구성: 470. Windows Server 컨테이너 - DockerMsftProvider 모듈을 이용한 docker 설치
12165정성태3/2/202011075.NET Framework: 900. 실행 시에 메서드 가로채기 - CLR Injection: Runtime Method Replacer 개선 - 네 번째 이야기(Monitor.Enter 후킹)파일 다운로드1
12164정성태2/29/202011935오류 유형: 598. Surface Pro 6 - Windows Hello Face Software Device가 인식이 안 되는 문제
12163정성태2/27/202010398.NET Framework: 899. 익명 함수를 가리키는 delegate 필드에 대한 직렬화 문제
12162정성태2/26/202013260디버깅 기술: 166. C#에서 만든 COM 객체를 C/C++로 P/Invoke Interop 시 메모리 누수(Memory Leak) 발생 [6]파일 다운로드2
12161정성태2/26/20209851오류 유형: 597. manifest - The value "x64" of attribute "processorArchitecture" in element "assemblyIdentity" is invalid.
12160정성태2/26/202010557개발 환경 구성: 469. Reg-free COM 개체 사용을 위한 manifest 파일 생성 도구 - COMRegFreeManifest
12159정성태2/26/20208666오류 유형: 596. Visual Studio - The project needs to include ATL support
12158정성태2/25/202010548디버깅 기술: 165. C# - Marshal.GetIUnknownForObject/GetIDispatchForObject 사용 시 메모리 누수(Memory Leak) 발생파일 다운로드1
12157정성태2/25/202010520디버깅 기술: 164. C# - Marshal.GetNativeVariantForObject 사용 시 메모리 누수(Memory Leak) 발생 및 해결 방법파일 다운로드1
12156정성태2/25/20209833오류 유형: 595. LINK : warning LNK4098: defaultlib 'nafxcw.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
12155정성태2/25/20209064오류 유형: 594. Warning NU1701 - This package may not be fully compatible with your project
12154정성태2/25/20208856오류 유형: 593. warning LNK4070: /OUT:... directive in .EXP differs from output filename
12153정성태2/23/202011621.NET Framework: 898. Trampoline을 이용한 후킹의 한계파일 다운로드1
12152정성태2/23/202011363.NET Framework: 897. 실행 시에 메서드 가로채기 - CLR Injection: Runtime Method Replacer 개선 - 세 번째 이야기(Trampoline 후킹)파일 다운로드1
12151정성태2/22/202011846.NET Framework: 896. C# - Win32 API를 Trampoline 기법을 이용해 C# 메서드로 가로채는 방법 - 두 번째 이야기 (원본 함수 호출)파일 다운로드1
12150정성태2/21/202011707.NET Framework: 895. C# - Win32 API를 Trampoline 기법을 이용해 C# 메서드로 가로채는 방법 [1]파일 다운로드1
12149정성태2/20/202011502.NET Framework: 894. eBEST C# XingAPI 래퍼 - 연속 조회 처리 방법 [1]
12148정성태2/19/202012755디버깅 기술: 163. x64 환경에서 구현하는 다양한 Trampoline 기법 [1]
12147정성태2/19/202011399디버깅 기술: 162. x86/x64의 기계어 코드 최대 길이
12146정성태2/18/202011604.NET Framework: 893. eBEST C# XingAPI 래퍼 - 로그인 처리파일 다운로드1
12145정성태2/18/202010825.NET Framework: 892. eBEST C# XingAPI 래퍼 - Sqlite 지원 추가파일 다운로드1
12144정성태2/13/202010849.NET Framework: 891. 실행 시에 메서드 가로채기 - CLR Injection: Runtime Method Replacer 개선 - 두 번째 이야기파일 다운로드1
12143정성태2/13/20208882.NET Framework: 890. 상황별 GetFunctionPointer 반환값 정리 - x64파일 다운로드1
12142정성태2/12/202010709.NET Framework: 889. C# 코드로 접근하는 MethodDesc, MethodTable파일 다운로드1
... 46  47  48  49  50  51  52  53  54  55  56  57  58  [59]  60  ...