이 글에서는 PowerShell을 사용하여 고급 보안이 포함된 Windows Defender 방화벽의 설정과 규칙을 관리하는 기본 방법을 소개합니다. 네트워크 프로필별로 방화벽을 활성화/비활성화하는 방법, 방화벽 규칙을 생성하거나 삭제하는 방법, 그리고 현재 활성화된 방화벽 규칙을 보기 좋은 표 형태로 출력해 주는 간단한 PowerShell 스크립트 작성법까지 다룹니다.
PowerShell로 Windows 방화벽 관리하기
Windows 방화벽 설정은 그래픽 콘솔인 제어판 → 시스템 및 보안 → Windows Defender 방화벽에서 관리할 수 있습니다. 하지만 Windows 8.1(Windows Server 2012 R2)부터는 내장된 NetSecurity PowerShell 모듈을 사용해 방화벽을 더욱 효율적으로 관리할 수 있습니다.
과거에는 다음 명령어로 방화벽 규칙과 설정을 관리했습니다.
netsh advfirewall firewall
Windows 10의 NetSecurity 모듈에는 총 85개의 명령(cmdlet)이 포함되어 있으며, 전체 목록은 아래 명령으로 확인할 수 있습니다.
Get-Command -Module NetSecurity
네트워크 프로필 관리 방법
Windows 방화벽에는 세 가지 유형의 네트워크 프로필이 있습니다.
- 도메인(Domain) – Active Directory 도메인에 가입된 컴퓨터에 적용
- 개인(Private) – 가정 또는 사내 네트워크에 적용
- 공용(Public) – 공공장소의 공용 네트워크에 적용
NLA(Network Location Awareness)는 네트워크 유형 정보를 자체 데이터베이스에 저장합니다. 네트워크가 잘못 감지된 경우 프로필(위치)을 변경할 수 있습니다.
각 네트워크 프로필은 서로 다른 방화벽 규칙 집합을 사용할 수 있습니다. 기본적으로 컴퓨터의 모든 네트워크 인터페이스는 방화벽으로 보호되며, 세 가지 프로필이 모두 적용됩니다.
방화벽 프로필 활성화/비활성화
도메인, 공용, 개인 세 가지 프로필을 모두 활성화하려면 다음 명령을 사용합니다.
Set-NetFirewallProfile -All -Enabled True
특정 프로필만 활성화하려면 All 대신 프로필 이름을 지정합니다.
Set-NetFirewallProfile -Profile Public -Enabled True
세 가지 네트워크 위치 모두에 대해 방화벽을 비활성화하려면 다음 명령을 사용합니다.
Set-NetFirewallProfile -All -Enabled False
프로필 기본 동작 변경
Set-NetFirewallProfile cmdlet을 사용하면 기본 동작, 로깅, 로그 파일 경로 및 크기, 알림 설정 등 다양한 프로필 옵션을 변경할 수 있습니다.
최신 Windows 버전에서는 방화벽이 모든 프로필에 대해 기본적으로 활성화되어 있으며, 아웃바운드 연결은 허용되고 인바운드 연결은 차단됩니다(허용된 연결 제외).
공용(Public) 프로필의 기본 동작을 '모든 인바운드 연결 차단'으로 변경해 보겠습니다.
Set-NetFirewallProfile –Name Public –DefaultInboundAction Block
현재 프로필 설정은 다음과 같이 확인할 수 있습니다.
Get-NetFirewallProfile -Name Public
GPO(그룹 정책)를 사용해 방화벽 설정을 관리하는 경우, 현재 적용 중인 최종 프로필 설정을 다음 명령으로 확인할 수 있습니다.
Get-NetFirewallProfile -policystore activestore
특정 인터페이스 제외하기
모든 방화벽 설정이 컴퓨터의 모든 네트워크 인터페이스에 적용되었는지 확인하려면 다음 명령을 실행합니다.
Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases
모든 인터페이스가 보호 중이라면 다음과 같은 결과가 반환됩니다.
DisabledInterfaceAliases : {NotConfigured}특정 인터페이스를 프로필에서 제외할 수도 있습니다(인터페이스 이름 목록은 Get-NetIPInterface cmdlet으로 확인).
Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"
실행 후 Public 프로필이 Ethernet0 인터페이스에 더 이상 적용되지 않습니다.
DisabledInterfaceAliases : {Ethernet0}방화벽 로깅 설정
프로필 수준에서 네트워크 연결 로깅 옵션을 설정할 수 있습니다. 기본적으로 Windows 방화벽 로그는 %systemroot%\system32\LogFiles\Firewall 폴더에 저장되며 파일 크기는 4MB로 제한됩니다. 모든 연결 로깅을 활성화하고 최대 파일 크기를 변경하려면 다음 명령을 사용합니다.
Set-NetFireWallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000 -LogFileName '%systemroot%\system32\LogFiles\Firewall\pfirewall.log'
PowerShell로 방화벽 규칙 생성, 수정, 삭제하기
방화벽 규칙을 관리하는 데 사용할 수 있는 cmdlet은 총 9가지입니다.
- New-NetFirewallRule
- Copy-NetFirewallRule
- Disable-NetFirewallRule
- Enable-NetFirewallRule
- Get-NetFirewallRule
- Remove-NetFirewallRule
- Rename-NetFirewallRule
- Set-NetFirewallRule
- Show-NetFirewallRule
포트 열기 예제
예를 들어 도메인 및 개인 프로필에서 TCP 포트 80과 443으로의 인바운드 연결을 허용하려면 다음 명령을 사용합니다.
New-NetFirewallRule -DisplayName 'HTTP-Inbound' -Profile @('Domain', 'Private') -Direction Inbound -Action Allow -Protocol TCP -LocalPort @('80', '443')
애플리케이션 네트워크 접근 제어
특정 애플리케이션의 네트워크 접근을 허용하거나 차단할 수도 있습니다. 예를 들어 Firefox의 아웃바운드 연결을 차단하려면 다음과 같이 합니다.
New-NetFirewallRule -Program "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -Action Block -Profile Domain, Private -DisplayName "Block Firefox browser" -Description "Block Firefox browser" -Direction Outbound
특정 IP에서만 RDP 허용하기
포트 3389(RDP)로의 인바운드 연결을 특정 IP 주소에서만 허용하려면 다음 명령을 사용합니다.
New-NetFirewallRule -DisplayName "AllowRDP" –RemoteAddress 192.168.2.200 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Allow
특정 IP 범위에 ping(ICMP) 허용하기
지정된 IP 서브넷 또는 IP 범위의 주소에 대해 ping(ICMP)을 허용하려면 다음 명령들을 사용합니다.
$ips = @("192.168.2.15-192.168.2.40", "192.168.100.15-192.168.100.200", "10.1.0.0/16")
New-NetFirewallRule -DisplayName "Allow inbound ICMPv4" -Direction Inbound -Protocol ICMPv4 -IcmpType 8 -RemoteAddress $ips -Action Allow
New-NetFirewallRule -DisplayName "Allow inbound ICMPv6" -Direction Inbound -Protocol ICMPv6 -IcmpType 8 -RemoteAddress $ips -Action Allow
기존 방화벽 규칙 수정하기
기존 방화벽 규칙을 수정하려면 Set-NetFirewallRule cmdlet을 사용합니다. 예를 들어, 앞서 생성한 규칙에 대해 지정된 IP 주소의 인바운드 연결을 허용하려면 다음과 같이 합니다.
Get-NetFirewallrule -DisplayName 'HTTP-Inbound' | Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -RemoteAddress 192.168.1.10
방화벽 규칙에 여러 IP 주소를 추가하려면 다음 스크립트를 사용합니다.
$ips = @("192.168.2.15", "192.168.2.17", "192.168.100.15")
Get-NetFirewallrule -DisplayName 'WEB-Inbound'|Set-NetFirewallRule -RemoteAddress $ips
방화벽 규칙에 포함된 모든 IP 주소를 확인하려면 다음 명령을 실행합니다.
Get-NetFirewallrule -DisplayName 'Allow inbound ICMPv4'|Get-NetFirewallAddressFilter
규칙 활성화/비활성화 및 삭제
방화벽 규칙은 Disable-NetFirewallRule과 Enable-NetFirewallRule cmdlet으로 활성화/비활성화할 수 있습니다.
Disable-NetFirewallRule –DisplayName 'WEB-Inbound'
ICMP(ping)를 허용하려면 다음 명령을 실행합니다.
Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-In
방화벽 규칙을 삭제하려면 Remove-NetFirewallRule cmdlet을 사용합니다.
PowerShell로 방화벽 규칙 목록 조회하기
인바운드 트래픽에 대한 활성 방화벽 규칙 목록은 다음과 같이 확인할 수 있습니다.
Get-NetFirewallRule | where {($_.enabled -eq $True) -and ($_.Direction -eq "Inbound")} |ft
아웃바운드 차단 규칙 목록을 표시하려면 다음 명령을 사용합니다.
Get-NetFirewallRule -Action Block -Enabled True -Direction Outbound
규칙에 포함된 애플리케이션 이름을 표시하려면 다음과 같이 합니다.
Get-NetFirewallRule -Action Block -Enabled True -Direction Outbound | %{$_.Name; $_ | Get-NetFirewallApplicationFilter}
Get-NetFirewallRule cmdlet은 방화벽 규칙의 네트워크 포트와 IP 주소를 표시하지 않습니다. 허용된 인바운드(아웃바운드) 연결에 대한 상세 정보를 포트 번호와 함께 보기 편하게 표시하려면 다음 PowerShell 스크립트를 사용하세요.
Get-NetFirewallRule -Action Allow -Enabled True -Direction Inbound |
Format-Table -Property Name,
@{Name='Protocol';Expression={($PSItem | Get-NetFirewallPortFilter).Protocol}},
@{Name='LocalPort';Expression={($PSItem | Get-NetFirewallPortFilter).LocalPort}},
@{Name='RemotePort';Expression={($PSItem | Get-NetFirewallPortFilter).RemotePort}},
@{Name='RemoteAddress';Expression={($PSItem | Get-NetFirewallAddressFilter).RemoteAddress}},
Enabled,Profile,Direction,Action
PowerShell을 활용하면 명령 프롬프트에서 Windows 방화벽 규칙을 매우 유연하게 관리할 수 있습니다. 특정 이벤트 발생 시 PowerShell 스크립트를 자동으로 실행하여 포트를 열거나 닫는 것도 가능합니다. 다음 글에서는 Windows VDS 서버에서 RDP를 통한 원격 무차별 대입(brute-force) 공격을 시도하는 IP 주소를 자동으로 차단하는, PowerShell과 Windows 방화벽 기반의 간단한 솔루션을 살펴보겠습니다.