명령줄을 사용하여 Windows 방화벽 관리
이 문서에서는 Windows 방화벽 관리를 자동화하는 데 사용할 수 있는 PowerShell 및 netsh.exe
을 사용하여 Windows 방화벽을 관리하는 방법에 대한 예제를 제공합니다.
프로필 전역 기본값 설정
전역 기본값은 프로필별로 디바이스 동작을 설정합니다. Windows 방화벽은 도메인, 프라이빗 및 퍼블릭 프로필을 지원합니다.
Windows 방화벽은 허용된 원치 않는 트래픽에 해당하지 않는 트래픽 또는 디바이스의 요청에 따라 전송되는 트래픽을 삭제합니다. 만드는 규칙이 적용되지 않는 경우 Windows 방화벽을 사용하도록 설정해야 할 수 있습니다. 로컬 디바이스에서 Windows 방화벽을 사용하도록 설정하는 방법은 다음과 같습니다.
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
Windows 방화벽 동작 제어
전역 기본 설정은 명령줄 인터페이스를 통해 정의할 수 있습니다. 이러한 수정 사항은 Windows 방화벽 콘솔을 통해서도 사용할 수 있습니다. 다음 스크립틀릿은 기본 인바운드 및 아웃바운드 작업을 설정하고, 보호된 네트워크 연결을 지정하며, 프로그램이 인바운드 연결을 수신하지 못하도록 차단될 때 사용자에게 알림을 표시할 수 있도록 합니다. 멀티캐스트 또는 브로드캐스트 네트워크 트래픽에 대한 유니캐스트 응답을 허용하고 문제 해결을 위한 로깅 설정을 지정합니다.
Set-NetFirewallProfile -DefaultInboundAction Block -DefaultOutboundAction Allow -NotifyOnListen True -AllowUnicastResponseToMulticast True -LogFileName %SystemRoot%\System32\LogFiles\Firewall\pfirewall.log
Windows 방화벽 사용 안 함
IPsec(인터넷 프로토콜 보안) 연결 보안 규칙을 사용하는 기능, 네트워크 지문을 사용하는 공격으로부터의 네트워크 보호, Windows 서비스 강화 및 부팅 시간 필터와 같은 다른 이점이 손실되므로 Windows 방화벽을 사용하지 않도록 설정하지 않는 것이 좋습니다. 타사 방화벽 소프트웨어는 호환성을 위해 사용하지 않도록 설정해야 하는 Windows 방화벽의 규칙 유형 만 프로그래밍 방식으로 사용하지 않도록 설정할 수 있습니다. 이 목적을 위해 방화벽을 직접 사용하지 않도록 설정해서는 안 됩니다. Windows 방화벽을 사용하지 않도록 설정해야 하는 경우 Windows 방화벽 서비스를 중지하여 사용하지 않도록 설정하지 마세요(서비스 스냅인에서 표시 이름은 Windows Defender 방화벽이고 서비스 이름은 MpsSvc임). Windows 방화벽 서비스를 중지하는 것은 Microsoft에서 지원되지 않으며 다음을 비롯한 문제를 일으킬 수 있습니다.
- 시작 메뉴가 작동을 중지할 수 있습니다.
- 최신 애플리케이션을 설치하거나 업데이트하지 못할 수 있습니다.
- 휴대폰을 통한 Windows 정품 인증 실패
- Windows 방화벽에 의존하는 애플리케이션 또는 OS 비호환성
Windows 방화벽을 사용하지 않도록 설정하는 적절한 방법은 Windows 방화벽 프로필을 사용하지 않도록 설정하고 서비스를 실행 상태로 두는 것입니다. 다음 절차에 따라 방화벽을 끄거나 컴퓨터 구성을 설정하는 그룹 정책 사용하지 않도록 설정합니다.관리 템플릿|네트워크|네트워크 Connections|Windows 방화벽|도메인 프롤파일|Windows 방화벽: 모든 네트워크 연결을 보호합니다. 자세한 내용은 Windows 방화벽 배포 가이드를 참조하세요. 다음 예제에서는 모든 프로필에 대해 Windows 방화벽을 사용하지 않도록 설정합니다.
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
기본 방화벽 규칙 배포
이 섹션에서는 방화벽 규칙을 만들고, 수정하고, 삭제하기 위한 scriptlet 예제를 제공합니다.
방화벽 규칙 만들기
Windows PowerShell 방화벽 규칙을 추가하는 것은 Netsh에서처럼 보이지만 매개 변수와 값은 다르게 지정됩니다. 다음은 텔넷 애플리케이션이 네트워크에서 수신 대기하도록 허용하는 방법의 예입니다. 이 방화벽 규칙은 IP 주소 대신 키워드(keyword) 사용하여 로컬 서브넷으로 범위가 지정됩니다. Netsh에서와 마찬가지로 규칙은 로컬 디바이스에 만들어지고 즉시 적용됩니다.
New-NetFirewallRule -DisplayName "Allow Inbound Telnet" -Direction Inbound -Program %SystemRoot%\System32\tlntsvr.exe -RemoteAddress LocalSubnet -Action Allow
다음 스크립틀릿은 특정 애플리케이션 및 로컬 포트에서 Active Directory의 그룹 정책 개체(GPO)로 아웃바운드 트래픽을 차단하는 기본 방화벽 규칙을 추가하는 방법을 보여 줍니다. Windows PowerShell 정책 저장소는 New-NetFirewall cmdlet 내에서 매개 변수로 지정됩니다. Netsh에서는 먼저 Netsh 세션의 명령이 수정해야 하는 GPO를 지정해야 합니다. 입력하는 명령은 GPO의 내용에 대해 실행되며 Netsh 세션이 종료되거나 다른 set store 명령이 실행될 때까지 실행이 계속 적용됩니다. 여기서 domain.contoso.com Active Directory Domain Services(AD DS)의 이름이고 gpo_name 수정하려는 GPO의 이름입니다. GPO 이름에 공백이 있는 경우 따옴표가 필요합니다.
New-NetFirewallRule -DisplayName "Block Outbound Telnet" -Direction Outbound -Program %SystemRoot%\System32\tlntsvr.exe -Protocol TCP -LocalPort 23 -Action Block -PolicyStore domain.contoso.com\gpo_name
GPO 캐싱
사용 중인 도메인 컨트롤러의 부담을 줄이기 위해 Windows PowerShell GPO를 로컬 세션에 로드하고, 해당 세션에서 모든 변경 내용을 수행한 다음, 한 번에 다시 저장할 수 있습니다. 다음 명령은 이전 예제와 동일한 작업을 수행하지만(GPO에 텔넷 규칙을 추가함) PowerShell에서 GPO 캐싱을 적용하여 수행합니다. 로컬 세션에 로드하고 -GPOSession 매개 변수를 사용하여 GPO를 변경하는 것은 Netsh에서 지원되지 않습니다.
$gpo = Open-NetGPO -PolicyStore domain.contoso.com\gpo_name
New-NetFirewallRule -DisplayName "Block Outbound Telnet" -Direction Outbound -Program %SystemRoot%\System32\telnet.exe -Protocol TCP -LocalPort 23 -Action Block -GPOSession $gpo
Save-NetGPO -GPOSession $gpo
이 명령은 개별 변경 내용을 일괄 처리하지 않고 전체 GPO를 한 번에 로드하고 저장합니다. 따라서 다른 관리자가 변경하거나 다른 Windows PowerShell 창에서 변경한 경우 GPO를 저장하면 해당 변경 내용이 덮어씁니다.
기존 방화벽 규칙 수정
규칙을 만들 때 Netsh 및 Windows PowerShell 규칙 속성 및 영향을 변경할 수 있지만 규칙은 고유 식별자를 유지 관리합니다(Windows PowerShell 이 식별자는 -Name 매개 변수로 지정됨). 예를 들어 인바운드 원치 않는 트래픽에 대해 TCP 포트 80 을 사용하도록 설정하는 웹 80 허용 규칙이 있을 수 있습니다. 규칙의 사람이 읽을 수 있는 지역화된 이름을 지정하여 트래픽이 허용되는 웹 서버의 다른 원격 IP 주소와 일치하도록 규칙을 변경할 수 있습니다.
Set-NetFirewallRule -DisplayName "Allow Web 80" -RemoteAddress 192.168.0.2
Netsh를 사용하려면 규칙의 이름을 변경해야 하며 방화벽 규칙을 가져오는 다른 방법이 없습니다. Windows PowerShell 알려진 속성을 사용하여 규칙을 쿼리할 수 있습니다.
를 실행 Get-NetFirewallRule
하면 주소 및 포트와 같은 일반적인 조건이 표시되지 않을 수 있습니다. 이러한 조건은 Filters라는 별도의 개체로 표시됩니다. 앞에서 설명한 대로 New-NetFirewallRule 및 Set-NetFirewallRule의 모든 조건을 설정할 수 있습니다. 이러한 필드(포트, 주소, 보안, 인터페이스, 서비스)를 기반으로 방화벽 규칙을 쿼리하려면 필터 개체 자체를 가져와야 합니다.
필터 개체를 사용하여 웹 80 허용 규칙(이전과 같이)의 원격 엔드포인트를 변경할 수 있습니다. Windows PowerShell 사용하여 포트 필터를 사용하여 포트별로 쿼리한 다음 로컬 포트에 영향을 주는 다른 규칙이 있다고 가정하면 원하는 규칙을 검색할 때까지 추가 쿼리를 사용하여 빌드합니다.
다음 예제에서는 쿼리가 단일 방화벽 규칙을 반환한 다음, Windows PowerShell 파이프라인 입력 기능을 활용하여 cmdlet으로 파이프 Set-NetFirewallRule
된다고 가정합니다.
Get-NetFirewallPortFilter | ?{$_.LocalPort -eq 80} | Get-NetFirewallRule | ?{ $_.Direction -eq "Inbound" -and $_.Action -eq "Allow"} | Set-NetFirewallRule -RemoteAddress 192.168.0.2
와일드카드 문자를 사용하여 규칙을 쿼리할 수도 있습니다. 다음 예제에서는 특정 프로그램과 연결된 방화벽 규칙의 배열을 반환합니다. 배열의 요소는 후속 Set-NetFirewallRule
cmdlet에서 수정할 수 있습니다.
Get-NetFirewallApplicationFilter -Program "*svchost*" | Get-NetFirewallRule
Set 명령에 연결된 그룹 이름을 지정하면 그룹의 여러 규칙을 동시에 수정할 수 있습니다. 동일한 영향을 공유하는 여러 규칙을 관리하기 위해 지정된 관리 그룹에 방화벽 규칙을 추가할 수 있습니다. 다음 예제에서는 그룹 텔넷 관리에 인바운드 및 아웃바운드 텔넷 방화벽 규칙을 모두 추가합니다. Windows PowerShell 규칙을 처음 만들 때 그룹 멤버 자격이 지정되므로 이전 예제 규칙을 다시 만듭니다. Netsh에서는 사용자 지정 규칙 그룹에 규칙을 추가할 수 없습니다.
New-NetFirewallRule -DisplayName "Allow Inbound Telnet" -Direction Inbound -Program %SystemRoot%\System32\tlntsvr.exe -RemoteAddress LocalSubnet -Action Allow -Group "Telnet Management"
New-NetFirewallRule -DisplayName "Block Outbound Telnet" -Direction Outbound -Program %SystemRoot%\System32\tlntsvr.exe -RemoteAddress LocalSubnet -Action Allow -Group "Telnet Management"
규칙을 만들 때 그룹을 지정하지 않으면 Windows PowerShell 점 표기법을 사용하여 규칙 그룹에 규칙을 추가할 수 있습니다. 명령을 사용하면 규칙 그룹별로 쿼리할 수 있으므로 를 사용하여 Set-NetFirewallRule
그룹을 지정할 수 없습니다.
$rule = Get-NetFirewallRule -DisplayName "Allow Inbound Telnet"
$rule.Group = "Telnet Management"
$rule | Set-NetFirewallRule
명령의 Set
도움으로 규칙 그룹 이름이 지정된 경우 그룹 멤버 자격은 수정되지 않고 그룹의 모든 규칙이 지정된 매개 변수로 표시된 것과 동일한 수정을 받습니다.
다음 스크립틀릿은 방화벽 규칙에 영향을 주는 원격 관리가 포함된 미리 정의된 그룹의 모든 규칙을 사용하도록 설정합니다.
Set-NetFirewallRule -DisplayGroup "Windows Firewall Remote Management" -Enabled True
그룹 또는 규칙의 다른 속성별로 규칙을 사용하도록 설정하기 위한 별도의 Enable-NetFirewallRule
cmdlet도 있습니다.
Enable-NetFirewallRule -DisplayGroup "Windows Firewall Remote Management" -Verbose
방화벽 규칙 삭제
규칙 개체가 더 이상 활성화되지 않도록 설정할 수 있습니다. Windows PowerShell Disable-NetFirewallRule cmdlet은 시스템에 규칙을 그대로 두지만 규칙이 더 이상 적용되지 않고 트래픽에 영향을 주도록 비활성 상태로 둡니다. Enable-NetFirewallRule에서 비활성화된 방화벽 규칙을 다시 사용하도록 설정할 수 있습니다. 이 cmdlet은 디바이스에서 규칙 정의를 영구적으로 제거하는 Remove-NetFirewallRule과 다릅니다. 다음 cmdlet은 로컬 정책 저장소에서 지정된 기존 방화벽 규칙을 삭제합니다.
Remove-NetFirewallRule -DisplayName "Allow Web 80"
다른 cmdlet과 마찬가지로 제거할 규칙을 쿼리할 수도 있습니다. 여기서는 모든 차단 방화벽 규칙이 디바이스에서 삭제됩니다.
Remove-NetFirewallRule -Action Block
Get 명령을 사용하여 규칙을 쿼리하고 변수에 저장하고 영향을 받을 규칙을 관찰한 다음 Set 명령과 마찬가지로 Remove 명령으로 파이프하는 것이 더 안전할 수 있습니다. 다음 예제에서는 모든 차단 방화벽 규칙을 보고 처음 네 개의 규칙을 삭제하는 방법을 보여 있습니다.
$x = Get-NetFirewallRule -Action Block
$x
$x[0-3] | Remove-NetFirewallRule
원격으로 관리
WinRM을 사용한 원격 관리는 기본적으로 사용하도록 설정됩니다. CimSession 매개 변수를 지원하는 cmdlet은 WinRM을 사용하며 기본적으로 원격으로 관리할 수 있습니다. 다음 예제에서는 RemoteDevice라는 디바이스에서 영구 저장소의 모든 방화벽 규칙을 반환합니다.
Get-NetFirewallRule -CimSession RemoteDevice
-CimSession 매개 변수를 사용하여 원격 디바이스에서 모든 수정을 수행하거나 규칙을 볼 수 있습니다. 여기서는 원격 디바이스에서 특정 방화벽 규칙을 제거합니다.
$RemoteSession = New-CimSession -ComputerName RemoteDevice
Remove-NetFirewallRule -DisplayName "AllowWeb80" -CimSession $RemoteSession -Confirm
기본 IPsec 규칙 설정 배포
IPsec(인터넷 프로토콜 보안) 정책은 IPsec 동작을 결정하는 규칙으로 구성됩니다. IPsec은 네트워크 수준 피어 인증, 데이터 원본 인증, 데이터 무결성, 데이터 기밀성(암호화) 및 재생 보호를 지원합니다. Windows PowerShell Netsh 및 Windows 방화벽 콘솔과 같은 강력하고 복잡한 IPsec 정책을 만들 수 있습니다. 그러나 Windows PowerShell 문자열 토큰 기반이 아닌 개체 기반이므로 Windows PowerShell 구성은 더 큰 제어 및 유연성을 제공합니다. Netsh에서 인증 및 암호화 집합은 특정 형식의 쉼표로 구분된 토큰 목록으로 지정되었습니다. Windows PowerShell 기본 설정을 사용하는 대신 먼저 원하는 인증 또는 암호화 제안 개체를 만들고 원하는 순서대로 목록에 번들로 묶습니다. 그런 다음 이러한 집합을 참조하는 하나 이상의 IPsec 규칙을 만듭니다. 이 모델의 이점은 규칙의 정보에 프로그래밍 방식으로 액세스하는 것이 훨씬 쉽다는 것입니다. 예제를 명확히 하려는 경우 다음 섹션을 참조하세요.
IPsec 규칙 만들기
다음 cmdlet은 그룹 정책 개체에 기본 IPsec 전송 모드 규칙을 만듭니다. IPsec 규칙은 간단하게 만들 수 있습니다. 필요한 것은 표시 이름이며 나머지 속성은 기본값을 사용합니다. 인바운드 트래픽은 기본 빠른 모드 및 기본 모드 설정을 사용하여 인증되고 무결성이 검사됩니다. 이러한 기본 설정은 IPsec 기본값 사용자 지정에서 콘솔에서 찾을 수 있습니다.
New-NetIPsecRule -DisplayName "Require Inbound Authentication" -PolicyStore domain.contoso.com\gpo_name
IPsec 규칙에 사용자 지정 인증 방법 추가
IPsec 규칙 개체에 AH 및 ESP를 모두 포함하는 사용자 지정 빠른 모드 제안 집합을 만들려면 연결된 개체를 별도로 만들고 해당 연결을 연결합니다. 인증 방법에 대한 자세한 내용은 IPsec 프로토콜 선택을 참조하세요. 그런 다음, IPsec 규칙을 만들 때 새로 만든 사용자 지정 빠른 모드 정책을 사용할 수 있습니다. 암호화 집합 개체는 IPsec 규칙 개체에 연결됩니다. 이 예제에서는 사용자 지정 빠른 모드 암호화 집합을 지정하여 이전에 만든 IPsec 규칙을 기반으로 합니다. 최종 IPsec 규칙은 지정된 암호화 메서드에 의해 아웃바운드 트래픽을 인증해야 합니다.
$AHandESPQM = New-NetIPsecQuickModeCryptoProposal -Encapsulation AH,ESP -AHHash SHA1 -ESPHash SHA1 -Encryption DES3
$QMCryptoSet = New-NetIPsecQuickModeCryptoSet -DisplayName "ah:sha1+esp:sha1-des3" -Proposal $AHandESPQM -PolicyStore domain.contoso.com\gpo_name
New-NetIPsecRule -DisplayName "Require Inbound Authentication" -InboundSecurity Require -OutboundSecurity Request -QuickModeCryptoSet $QMCryptoSet.Name -PolicyStore domain.contoso.com\gpo_name
IKEv2 IPsec 전송 규칙
회사 네트워크는 다른 기관과의 통신을 보호해야 할 수 있습니다. 그러나 기관이 비 Windows 운영 체제를 실행하고 IKEv2(인터넷 키 Exchange 버전 2) 표준을 사용해야 한다는 것을 알게 됩니다. IPsec 규칙에서 IKEv2를 키 모듈로 지정하여 Windows Server 2012 IKEv2 기능을 적용할 수 있습니다. 이 기능 사양은 컴퓨터 인증서 인증을 통해서만 수행할 수 있으며 2단계 인증에는 사용할 수 없습니다.
New-NetIPsecRule -DisplayName "Require Inbound Authentication" -InboundSecurity Require -OutboundSecurity Request -Phase1AuthSet MyCertAuthSet -KeyModule IKEv2 -RemoteAddress $nonWindowsGateway
시나리오를 포함하여 IKEv2에 대한 자세한 내용은 IKEv2를 사용하여 엔드 투 엔드 IPsec Connections 보안을 참조하세요.
한 정책에서 다른 정책으로 IPsec 규칙 복사
동일한 규칙 속성을 가진 방화벽 및 IPsec 규칙을 복제하여 다른 정책 저장소 내에서 다시 만드는 작업을 간소화할 수 있습니다. 이전에 만든 규칙을 한 정책 저장소에서 다른 정책 저장소로 복사하려면 연결된 개체도 별도로 복사해야 합니다. 연결된 방화벽 필터를 복사할 필요가 없습니다. 다른 cmdlet과 동일한 방식으로 복사할 규칙을 쿼리할 수 있습니다. 개별 규칙을 복사하는 작업은 Netsh 인터페이스를 통해 불가능합니다. Windows PowerShell 사용하여 수행할 수 있는 방법은 다음과 같습니다.
$Rule = Get-NetIPsecRule -DisplayName "Require Inbound Authentication"
$Rule | Copy-NetIPsecRule -NewPolicyStore domain.costoso.com\new_gpo_name
$Rule | Copy-NetPhase1AuthSet -NewPolicyStore domain.costoso.com\new_gpo_name
Windows PowerShell 오류 처리
Windows PowerShell 스크립트에서 오류를 처리하려면 -ErrorAction 매개 변수를 사용할 수 있습니다. 이 매개 변수는 Remove cmdlet에 특히 유용합니다. 특정 규칙을 제거하려는 경우 규칙을 찾을 수 없으면 실패합니다. 규칙이 제거되는 경우 규칙이 아직 없는 경우 해당 오류를 무시할 수 있습니다. 이 경우 다음을 수행하여 제거 작업 중에 "규칙을 찾을 수 없음" 오류를 표시하지 않을 수 있습니다.
Remove-NetFirewallRule -DisplayName "Contoso Messenger 98" -ErrorAction SilentlyContinue
와일드카드를 사용하면 오류가 표시되지 않을 수도 있지만 제거하지 않으려는 규칙과 일치할 수 있습니다. 이러한 와일드카드는 유용한 바로 가기일 수 있지만 실수로 삭제되는 추가 규칙이 없는 경우에만 사용해야 합니다. 따라서 다음 cmdlet은 규칙을 제거하여 "찾을 수 없음" 오류를 표시하지 않습니다.
Remove-NetFirewallRule -DisplayName "Contoso Messenger 98*"
와일드카드를 사용하는 경우 일치하는 규칙 집합을 두 번 검사 경우 -WhatIf 매개 변수를 사용할 수 있습니다.
Remove-NetFirewallRule -DisplayName "Contoso Messenger 98*" -WhatIf
일치하는 규칙 중 일부만 삭제하려면 -Confirm 매개 변수를 사용하여 규칙별 확인 프롬프트를 가져올 수 있습니다.
Remove-NetFirewallRule -DisplayName "Contoso Messenger 98*" -Confirm
작업이 수행될 때 각 규칙의 이름을 표시하는 전체 작업을 수행할 수도 있습니다.
Remove-NetFirewallRule -DisplayName "Contoso Messenger 98*" -Verbose
모니터
다음 Windows PowerShell 명령은 배포 단계의 업데이트 주기에 유용합니다. 특정 저장소의 모든 IPsec 규칙을 볼 수 있도록 하려면 다음 명령을 사용할 수 있습니다. Netsh에서 이 명령은 profile=domain, public 또는 profile=domain,private인 규칙을 표시하지 않습니다. 규칙에 포함된 단일 항목 도메인이 있는 규칙만 표시됩니다. 다음 명령 예제에서는 모든 프로필의 IPsec 규칙을 보여 줍니다.
Show-NetIPsecRule -PolicyStore ActiveStore
기본 모드 보안 연결을 모니터링하여 현재 디바이스에 연결된 피어 및 보안 연결을 형성하는 데 사용되는 보호 도구 모음과 같은 정보를 모니터링할 수 있습니다. 다음 cmdlet을 사용하여 기존 기본 모드 규칙 및 해당 보안 연결을 확인합니다.
Get-NetIPsecMainModeSA
규칙의 원본 GPO 찾기
특정 규칙 또는 규칙 그룹의 속성을 보려면 규칙을 쿼리합니다. 쿼리가 구성되지 않음으로 지정된 필드를 반환하는 경우 규칙이 시작되는 정책 저장소를 확인할 수 있습니다. GPO에서 온 개체의 경우(-PolicyStoreSourceType 매개 변수는 Show 명령에서 GroupPolicy로 지정됨) -TracePolicyStore가 전달되면 GPO의 이름이 찾아 PolicyStoreSource 필드에 반환됩니다.
Get-NetIPsecRule -DisplayName "Require Inbound Authentication" -TracePolicyStore
공개된 원본에는 도메인 이름이 포함되어 있지 않습니다.
기본 도메인 격리 정책 배포
IPsec을 사용하여 도메인 멤버를 비 도메인 멤버로부터 격리할 수 있습니다. 도메인 격리는 IPsec 인증을 사용하여 도메인 가입 디바이스가 통신 디바이스의 ID를 긍정적으로 설정하여 organization 보안을 개선하도록 요구합니다. IPsec 규칙 개체를 사용하여 트래픽을 보호하는 데 IPsec의 하나 이상의 기능을 사용할 수 있습니다. 네트워크에서 도메인 격리를 구현하기 위해 도메인의 디바이스는 IPsec으로 보호되지 않는 원치 않는 인바운드 네트워크 트래픽을 차단하는 IPsec 규칙을 받습니다. 여기서는 도메인 멤버의 인증이 필요한 IPsec 규칙을 만듭니다. 이 인증을 통해 도메인에 가입되지 않은 디바이스에서 도메인에 가입된 디바이스를 격리할 수 있습니다. 다음 예제에서는 인바운드 트래픽에 Kerberos 인증이 필요하며 아웃바운드 트래픽에 대해 요청됩니다.
$kerbprop = New-NetIPsecAuthProposal -Machine -Kerberos
$Phase1AuthSet = New-NetIPsecPhase1AuthSet -DisplayName "Kerberos Auth Phase1" -Proposal $kerbprop -PolicyStore domain.contoso.com\domain_isolation
New-NetIPsecRule -DisplayName "Basic Domain Isolation Policy" -Profile Domain -Phase1AuthSet $Phase1AuthSet.Name -InboundSecurity Require -OutboundSecurity Request -PolicyStore domain.contoso.com\domain_isolation
IPsec 터널 모드 구성
다음 명령은 로컬 디바이스의 인터페이스(1.1.1.1.1)를 통해 개인 네트워크(192.168.0.0/16)의 트래픽을 라우팅하는 IPsec 터널을 만듭니다. 1) 공용 인터페이스(2.2.2.2)를 통해 다른 개인 네트워크(192.157.0.0/16)를 통해 두 번째 디바이스에 공용 네트워크에 연결됩니다. 터널을 통과하는 모든 트래픽은 ESP/SHA1을 사용하여 무결성을 검사하고 ESP/DES3을 사용하여 암호화됩니다.
$QMProposal = New-NetIPsecQuickModeCryptoProposal -Encapsulation ESP -ESPHash SHA1 -Encryption DES3
$QMCryptoSet = New-NetIPsecQuickModeCryptoSet -DisplayName "esp:sha1-des3" -Proposal $QMProposal
New-NetIPSecRule -DisplayName "Tunnel from HQ to Dallas Branch" -Mode Tunnel -LocalAddress 192.168.0.0/16 -RemoteAddress 192.157.0.0/16 -LocalTunnelEndpoint 1.1.1.1 -RemoteTunnelEndpoint 2.2.2.2 -InboundSecurity Require -OutboundSecurity Require -QuickModeCryptoSet $QMCryptoSet.Name
IPsec을 사용하여 보안 방화벽 규칙 배포
Windows 방화벽을 통해 보안 트래픽만 허용될 수 있는 상황에서는 수동으로 구성된 방화벽과 IPsec 규칙의 조합이 필요합니다. 방화벽 규칙은 허용된 패킷에 대한 보안 수준을 결정하고 기본 IPsec 규칙은 트래픽을 보호합니다. 시나리오는 배포에서 많은 유사점을 사용하여 Windows PowerShell 및 Netsh에서 수행할 수 있습니다.
보안 방화벽 규칙 만들기(안전한 경우 허용)
안전한 경우 연결을 허용하도록 방화벽 규칙을 구성하려면 해당 트래픽을 인증하고 무결성을 보호한 다음 필요에 따라 IPsec으로 암호화해야 합니다. 다음 예제에서는 트래픽을 인증해야 하는 방화벽 규칙을 만듭니다. 이 명령은 별도의 IPsec 규칙을 사용하여 원격 디바이스의 연결이 인증된 경우에만 인바운드 텔넷 네트워크 트래픽을 허용합니다.
New-NetFirewallRule -DisplayName "Allow Authenticated Telnet" -Direction Inbound -Program %SystemRoot%\System32\tlntsvr.exe -Authentication Required -Action Allow
다음 명령은 첫 번째(컴퓨터) 인증이 필요한 IPsec 규칙을 만든 다음 선택적 두 번째(사용자) 인증을 시도합니다. 이 규칙을 만들면 메신저 프로그램에 대한 방화벽 규칙 요구 사항을 통해 트래픽이 보호되고 허용됩니다.
$mkerbauthprop = New-NetIPsecAuthProposal -Machine -Kerberos
$mntlmauthprop = New-NetIPsecAuthProposal -Machine -NTLM
$P1Auth = New-NetIPsecPhase1AuthSet -DisplayName "Machine Auth" -Proposal $mkerbauthprop,$mntlmauthprop
$ukerbauthprop = New-NetIPsecAuthProposal -User -Kerberos
$unentlmauthprop = New-NetIPsecAuthProposal -User -NTLM
$anonyauthprop = New-NetIPsecAuthProposal -Anonymous
$P2Auth = New-NetIPsecPhase2AuthSet -DisplayName "User Auth" -Proposal $ukerbauthprop,$unentlmauthprop,$anonyauthprop
New-NetIPSecRule -DisplayName "Authenticate Both Computer and User" -InboundSecurity Require -OutboundSecurity Require -Phase1AuthSet $P1Auth.Name -Phase2AuthSet $P2Auth.Name
암호화 및 그룹 멤버 자격을 요구하여 서버 격리
organization 디바이스의 보안을 개선하기 위해 도메인 멤버가 제한된 도메인 격리를 배포할 수 있습니다. 서로 통신할 때 인증이 필요하고 인증되지 않은 인바운드 연결을 거부합니다. 중요한 데이터가 있는 서버의 보안을 향상하려면 엔터프라이즈 도메인 내의 디바이스 하위 집합에만 액세스를 허용하여 이 데이터를 보호해야 합니다. IPsec은 서버를 격리하여 이 추가 보호 계층을 제공할 수 있습니다. 서버 격리에서 중요한 데이터 액세스는 합법적인 비즈니스 요구가 있는 사용자 및 디바이스로 제한되며, 도청을 방지하기 위해 데이터가 추가로 암호화됩니다.
그룹 멤버 자격 및 암호화가 필요한 방화벽 규칙 만들기
서버 격리를 배포하기 위해 인증을 적용하는 IPsec 규칙에서 권한 있는 사용자 또는 디바이스로 트래픽을 제한하는 방화벽 규칙을 계층화합니다. 다음 방화벽 규칙은 "액세스 서버에 대한 권한 부여"라는 사용자 지정 그룹의 구성원인 사용자 계정의 텔넷 트래픽을 허용합니다. 이 액세스는 제한 매개 변수를 지정하여 디바이스, 사용자 또는 둘 다에 따라 추가로 제한될 수 있습니다. 사용자 또는 그룹의 SID(보안 식별자)를 확장하여 SDDL(보안 설명자 정의 언어) 문자열을 만듭니다. 그룹의 SID를 찾는 방법에 대한 자세한 내용은 그룹 계정에 대한 SID 찾기를 참조하세요. 그룹에 대한 액세스를 제한하면 관리에서 Windows 방화벽 및/또는 IPsec 정책을 통해 강력한 인증 지원을 확장할 수 있습니다. 다음 예제에서는 보안 그룹을 나타내는 SDDL 문자열을 만드는 방법을 보여 줍니다.
$user = new-object System.Security.Principal.NTAccount ("corp.contoso.com\Administrators")
$SIDofSecureUserGroup = $user.Translate([System.Security.Principal.SecurityIdentifier]).Value
$secureUserGroup = "D:(A;;CC;;;$SIDofSecureUserGroup)"
이전 스크립틀릿을 사용하면 다음과 같이 보안 컴퓨터 그룹에 대한 SDDL 문자열을 가져올 수도 있습니다.
$secureMachineGroup = "D:(A;;CC;;;$SIDofSecureMachineGroup)"
보안 그룹을 만드는 방법 또는 SDDL 문자열을 확인하는 방법에 대한 자세한 내용은 SID 작업을 참조하세요. 텔넷은 암호화를 제공하지 않는 애플리케이션입니다. 이 애플리케이션은 네트워크를 통해 이름 및 암호와 같은 데이터를 보낼 수 있습니다. 이 데이터는 악의적인 사용자가 가로챌 수 있습니다. 관리자가 텔넷 사용을 허용하지만 트래픽을 보호하려는 경우 IPsec 암호화가 필요한 방화벽 규칙을 만들 수 있습니다. 이 방화벽 규칙은 관리자가 이 애플리케이션을 사용할 때 이 포트에서 보내거나 받는 모든 트래픽이 암호화되도록 해야 합니다. IPsec이 연결에 권한을 부여하지 못하면 이 애플리케이션에서 트래픽이 허용되지 않습니다. 이 예제에서는 다음 방화벽 규칙을 만들어 지정된 보안 사용자 그룹에서 인증되고 암호화된 인바운드 텔넷 트래픽만 허용합니다.
New-NetFirewallRule -DisplayName "Allow Encrypted Inbound Telnet to Group Members Only" -Program %SystemRoot%\System32\tlntsvr.exe -Protocol TCP -Direction Inbound -Action Allow -LocalPort 23 -Authentication Required -Encryption Required -RemoteUser $secureUserGroup -PolicyStore domain.contoso.com\Server_Isolation
엔드포인트 보안 적용
이전 예제에서는 특정 애플리케이션에 대한 종단 간 보안을 보여 줬습니다. 많은 애플리케이션에 엔드포인트 보안이 필요한 상황에서는 애플리케이션당 방화벽 규칙을 사용하는 것이 번거롭고 관리하기 어려울 수 있습니다. 권한 부여는 규칙별 기준을 재정의하고 IPsec 계층에서 수행할 수 있습니다. 이 예제에서는 다음 cmdlet을 사용하여 권한 있는 사용자 그룹에서 전송 모드 트래픽만 허용하도록 전역 IPsec 설정을 설정합니다. 보안 그룹 작업에 대한 이전 예제를 참조하세요.
Set-NetFirewallSetting -RemoteMachineTransportAuthorizationList $secureMachineGroup
IPsec 보호 네트워크 트래픽을 허용하는 방화벽 규칙 만들기(인증된 바이패스)
인증된 바이패스를 사용하면 지정된 신뢰할 수 있는 디바이스 또는 사용자의 트래픽이 방화벽 블록 규칙을 재정의할 수 있습니다. 이 재정의는 관리자가 검사 서버를 사용하여 포트 수준 예외 없이 디바이스를 모니터링하고 업데이트하려는 경우에 유용합니다. 자세한 내용은 인증된 방화벽 바이패스 사용 방법을 참조하세요. 이 예제에서는 차단 방화벽 규칙이 있다고 가정합니다. 이 예제에서는 트래픽이 지정된 디바이스 또는 사용자 보안 그룹의 구성원인 디바이스 또는 사용자 계정에서 발생한 것으로 인증된 경우 IP 주소의 모든 포트에서 네트워크 트래픽을 허용하여 블록 규칙을 재정의합니다.
New-NetFirewallRule -DisplayName "Inbound Secure Bypass Rule" -Direction Inbound -Authentication Required -OverrideBlockRules $true -RemoteMachine $secureMachineGroup -RemoteUser $secureUserGroup -PolicyStore domain.contoso.com\domain_isolation