DNS Socket Pool 이해하기


DNS Server를 설치하면 DNS Server Process가 상당한 메모리(약 150MB)를 사용하게 된다. 그 이유는 Socket Pool을 사용하기 위해서 DNS와 관련된 Process가 갑자기 많이 실행된다. DNS Socket Pool은 DNS 서버 보안을 위해서 필요한 기능이다. 혹시 DNS 보안 보다 메모리 활용에 더 중점을 둔다면  SocketPoolSize를 조정하여 운영하면 된다.

DNS Socket Pool (Source Port Randomization)에 대한 자세한 내용은 다음 동영상(http://technet.microsoft.com/en-us/video/video-source-port-randomization-socket-pool-in-windows-server-2008-r2-dns.aspx)을 보면 알 수 있다. 좋은 동영상이므로 자세히 보면 왜 이런 기능이 Default로 설정되어 많은 메모리를 차지하게 되는지를 알 수 있다.

다음과 같이 테스트를 해본다.
1) DNS Server를 설치한다.
2) Task Manager를 실행하여 DNS Server Process가 얼마나 많은 메모리를 사용하는지 확인한다
3) netstat -ano를 실행한다. 그러면 많은 프로세스가 실행중임을 알 수있다
4) DNS socket pool size를 확인하기 위해 DNSCMD /Info /SocketPoolSize를 실행하거나 Get-DNSServer | more를 실행하여 현재 크기를 확인한다 (기본 설정 2500)
5) DNS socket pool size를 다음과 같이 진행하여 줄여 본 후 그 결과를 확인한다.
DNScmd /Config /SocketPoolSize 5
DNScmd /Info /SocketPoolSize
net stop dns & net start dns  (dns 서버를 재시작하기)
6) Task manager를 실행하여 DNS Server Process가 얼마 만큼의 메모리를 차지하는지 확인한다. 상당히 많이 줄어들었다는 것을 알 수 있다.
7) netstat -ano를 실행한다. 그 결과 이전보다 프로세스 및 열린 포트 수량이 확 줄어 든 것을 알 수 있다.

** DNS Socket Pool을 이용하여 DNS Port Spoofing 공격을 방어하는 기능은 Windows Server 2008 R2에서 처음 제공되었고, Windows Server 2012에서 계속 제공되는 기능이다. 이것을 모르는 상태에서 DNS Server를 설치하면 상당히 많은 메모리를 점유하는 것을 보고 놀라게 되지만 보안을 우선하게 된다면 DNS Socket Pool 기능을 Default로 사용하거나 적당히 줄여서 사용하고, 보안보다는 메모리 활용에 더 중요도를 둔다면 DNS Socket Poolsize를 확 줄여서 DNS server를 운영하면 된다. DNS Socket Pool Size를 줄이는 방법은 DNScmd /Config /SocketPoolSize 원하는값   으로 하면 된다.

 

컴퓨터가 얼마동안 켜져 있는지를 확인하는 방법


====

$os = Get-WmiObject -Class Win32_OperatingSystem
$boottime =
[System.Management.ManagementDateTimeConverter]::
ToDateTime($os.LastBootupTime)
$timedifference = New-TimeSpan -Start $boottime
$days = $timedifference.TotalDays
‘Your system is running for {0:0.0} days.’ -f $days
=====

위의 내용을 .ps1 파일로 만들어 실행하면 알 수 있다.

 

OS별로 PowerShell 버전 지원 현황


  • 사용하는 시스템의 OS에 따라서 지원되는 Powershell version이 다르다
  • 아래의 표를 보면 정확하게 알 수 있다. [기본]은 원래부터 설치되어 있는 것이다. [추가] Feature를 추가하는 것이고, [다운로드]는 Microsoft web site에서 다운로드 한다는 뜻이다. 이 , 적절한 .Net Framework 버전도 함께 설치해야 한다.


  • Version2.0 시스템에서 원격으로 Version3.0에 접속하여 Version3.0 명령어를 사용할 수 있다. 이 때 사용하는 명령어는 Enter-PSSession, Invoke-Command 이다
  • Windows Server 2012 PowerShell의 원격 관리에 대한 영문 동영상 주소는 http://youtu.be/WveEUCTvlYA

Group Managed Service Account 사용하도록 KDS root key 생성하기


여러 대의 웹서버에 관리 서비스 계정에 사용하기 위해서는 즉, 한 대의 서버가 아닌 여러 대의 서버에서 동일한 Managed Service Account를 사용하기 위해서는,  Group Managed Service Account(gMSA)를 만들 필요가 있다. 이렇게 하기 위해서는 먼저 KDS root key를 DC에서 만들어 여러 대의 DC간에 복제를 해야 한다.

KDS root key를 생성하기 위해서는 다음과 같이 한다.

1) 한 대의 DC만 있는 경우에는…
Add-KdsRootKey –EffectiveImmediately

2) KDS root key가 여러 대의 DC간의 복제를 하여 사용하기 위해서는
Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10))
** 여기서 10시간 전으로 설정해 주지 않으면 10시간 후에 KDS root key가 DC간의 복제가 10시간 후에 일어나기 때문에 금방 복제된 여부를 확인하기 위해서는 꼭 10시간 전으로 명기해주어야 한다.

Powershell v3.0의 도움말(Help) 설치하기


  • Powershell v2.0에서는 [도움말(Help)]이 로컬 컴퓨터에 Full version으로 설치되어 있지만 Powershell v3.0에서는 로컬 컴퓨터에 도움말(Help)이 간단하게만 설치되어 있다.


  • 그래서 도움말을 Microsoft Website에서 수동으로 다운로드해야 한다. 도움말이 저장되는 위치가 C:\Windows\System32 아래에 설치되기 때문에 반드시 관리자 권한이 있는 (Administrator)으로 로그온 하여 설치해야 한다.
  • 도움말을 설치하기 위해서는 2가지 방법이 있다.
    • 인터넷으로부터 직접 설치하기: Update-Help -Force
    • 컴퓨터가 인터넷에 연결되어 있지 않을 때는 로컬 네트워크의 File server로부터 설치하기:
      Update-Help -SourcePath \\FileServer\Help
  • 인터넷에 연결된 컴퓨터에서 사전에 Help 파일들을 다운로드하여 공유하면, 인터넷에 연결되지 않는 컴퓨터들도 미리 다운로드하여 저장하여 공유한 서버에 접속하여 Help 파일을 설치할 수 있  것이다.
  • 인터넷으로부터 Help 파일들을 로컬 컴퓨터로 다운로드하려면 다음과 같이 한다.
    • Md c:\help
    • Net Share Help=c:\help
    • Save-Help -DestinationPath c:\help -Force


  • 이렇게 인터넷으로부터 Help 파일을 다운로드한 후 먼저 자신부터 설치하고 그 다음은 인터넷에 연결되지 않은 컴퓨터들도 도움말을 설치한다.
    • 로컬 컴퓨터에서 설치하기: Update-Help -SourcePath c:\help


      이렇게 Help를 설치한  Get-Help -Name Get-Process의 내용을 보면 위의 것과 내용의 양이 차이가 난다는 것을 확연히 알 수 있다.

    • 네트워크에 존재하는 다른 컴퓨터에서 설치하기: Update-Help -SourcePath \\fileserver\help  -Force



  • Help 파일을 DC에서 다운로드하여 저장하는 것과 Domain Member 컴퓨터에서 다운로드하여 저장하는 것의 차이가 있다. Domain Controller module 내용이 더 많다. 그러므로 가능하여 Help 파일을 다운로드하는 서버는 DC가 좋다.
  • 정리를 하면, Powershell v3.0에서는 Help가 기본적인 간단한 내용만 있기 때문에 반드시 Full Help를 설치해야 한다. 설치하는 방법은 인터넷에 직접 연결하든가(Update-Help -Force) 아니면
    로컬 네트워크의 파일 서버에 미리 Help를 다운로드(Save-Help -DestinationPath c:\help)한 후 그 서버에 접속하여 Help를 설치한다(Update-Help -SourcePath \\fileserver\help)