이 문서에서는 PowerShell을 사용하여 고급 보안이 포함된 기본 제공 Windows Defender 방화벽의 설정 및 규칙을 관리하는 방법에 대한 기본 사항을 제공합니다. 다른 네트워크 프로필에 대해 방화벽을 활성화/비활성화하고, 방화벽 규칙을 생성 또는 제거하고, 현재 활성 방화벽 규칙 세트를 보여주는 편리한 표를 얻기 위해 작은 PS 스크립트를 작성하는 방법을 고려할 것입니다.
그래픽 콘솔에서 Windows 방화벽 설정을 관리할 수 있습니다. 제어판 -> 시스템 및 보안 -> Windows Defender 방화벽 . 그러나 Windows 8.1(Windows Server 2012 R2)부터 내장된 NetSecurity를 사용할 수 있습니다. 방화벽을 관리하는 PowerShell 모듈입니다.
이전에는 다음 명령이 Windows 방화벽 규칙 및 설정을 관리하는 데 사용되었습니다.netsh advfirewall firewall
Windows 10의 NetSecurity 모듈에는 85개의 명령이 있습니다. 전체 목록을 표시할 수 있습니다.
Get-Command -Module NetSecurity
PowerShell에서 Windows 방화벽 네트워크 프로필을 관리하는 방법
Windows 방화벽에는 세 가지 유형의 네트워크 프로필이 있습니다.
- 도메인 – Active Directory 도메인의 컴퓨터에 적용됨
- 비공개 – 가정 또는 회사 네트워크
- 공개 – 공용 네트워크
NLA(네트워크 위치 인식)는 데이터베이스에 네트워크 유형에 대한 정보를 보관합니다. 네트워크 프로필(위치)이 잘못 감지된 경우 변경할 수 있습니다.
각 네트워크 프로필(위치)은 사용된 방화벽 규칙 집합에 따라 다를 수 있습니다. 기본적으로 컴퓨터의 모든 네트워크 인터페이스는 방화벽으로 보호되며 세 가지 유형의 프로필이 모두 적용됩니다.
도메인, 공용 및 개인의 세 가지 네트워크 프로필을 모두 활성화하려면 다음 명령을 사용하십시오.
Set-NetFirewallProfile -All -Enabled True
또는 전체 대신 특정 프로필을 설정합니다. :
Set-NetFirewallProfile -프로필 공개 -활성화 True
세 네트워크 위치 모두에 대해 방화벽을 비활성화하려면 다음 명령을 사용하십시오.
Set-NetFirewallProfile -All -Enabled False
Set-NetFirewallProfile cmdlet을 사용하여 프로필 옵션(기본 작업, 로깅, 로그 파일의 경로 및 크기, 알림 설정 등)을 변경할 수 있습니다.
최신 OS 버전에서는 모든 프로필에 대해 Windows 방화벽이 활성화되어 있음을 알 수 있습니다. 프로필 설정에서 모든 아웃바운드 연결은 허용되고 인바운드 연결은 차단됩니다(허용된 연결 제외).
모든 인바운드 연결을 차단하도록 공개 프로필의 기본 동작을 변경해 보겠습니다.
Set-NetFirewallProfile –이름 공개 –DefaultInboundAction 블록
다음과 같이 현재 프로필 설정을 표시할 수 있습니다.
Get-NetFirewallProfile -이름 공개
GPO를 사용하여 Windows 방화벽 설정을 관리하는 경우 현재 결과 프로필 설정을 다음과 같이 표시할 수 있습니다.
Get-NetFirewallProfile -policystore 활성 저장소
모든 방화벽 설정이 컴퓨터의 모든 네트워크 인터페이스에 적용되었는지 확인하십시오.
Get-NetFirewallProfile -이름 공개 | fl DisabledInterfaceAliases
모든 인터페이스가 보호되는 경우 명령은 다음을 반환합니다.
DisabledInterfaceAliases : {NotConfigured}
특정 인터페이스 프로필을 비활성화할 수 있습니다(인터페이스 이름 목록을 표시하려면 Get-NetIPInterface 사용).
Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"
보시다시피 공개 프로필은 더 이상 Ethernet0에 적용되지 않습니다.
DisabledInterfaceAliases : {Ethernet0}
프로필 수준에서 네트워크 연결 로깅 옵션을 설정할 수 있습니다. 기본적으로 Windows 방화벽 로그는 %systemroot%\system32\LogFiles\Firewall에 저장되며 파일 크기는 4MB입니다. 모든 연결 로깅을 활성화하고 최대 파일 크기를 변경할 수 있습니다.
Set-NetFireWallProfile -프로필 도메인 -LogBlocked True -LogMaxSize 20000 -LogFileName '%systemroot%\system32\LogFiles\Firewall\pfirewall.log'
PowerShell을 사용하여 Windows 방화벽 규칙을 생성, 편집 또는 제거하는 방법
방화벽 규칙을 관리하기 위한 9개의 cmdlet이 있습니다.
- 새로운 NetFirewallRule
- NetFirewallRule 복사
- NetFirewallRule 비활성화
- NetFirewallRule 활성화
- NetFirewallRule 가져오기
- NetFirewallRule 제거
- NetFirewallRule 이름 바꾸기
- NetFirewallRule 설정
- NetFirewallRule 표시
Windows 방화벽에서 포트를 여는 방법에 대한 몇 가지 간단한 예를 살펴보겠습니다.
예를 들어 도메인 및 개인 프로필에 대해 포트 80 및 443에 대한 인바운드 TCP 연결을 허용하려면 다음 명령을 사용하십시오.
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" -설명 "Block Firefox browser" -Direction Outbound
하나의 IP 주소에서만 포트 3389에서 인바운드 RDP 연결을 허용하려면:
New-NetFirewallRule -DisplayName "AllowRDP" -RemoteAddress 192.168.2.200 -방향 인바운드 -프로토콜 TCP -LocalPort 3389 -액션 허용
지정된 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-NetNameFirewallRule에서 Iv "Allow" 표시 -방향 인바운드 -프로토콜 ICMPv4 -IcmpType 8 -RemoteAddress $ips -Action Allow
New-NetFirewallRule -DisplayName "Allow inbound ICMPv6" -방향 인바운드 -프로토콜 ICMPv6 -IcmpType 8 -RemoteAddress $ips -Action Allow
기존 방화벽 규칙을 편집하기 위해 Set-NetFirewallRule cmdlet을 사용합니다. 예를 들어, 이전에 생성된 규칙에 대해 지정된 IP 주소로부터의 인바운드 연결을 허용하려면:
Get-NetFirewallrule -DisplayName 'HTTP-인바운드' | 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-인바운드'|Set-NetFirewallRule -RemoteAddress $ips 코드>
방화벽 규칙의 모든 IP 주소를 표시하려면:
Get-NetFirewallrule -DisplayName '인바운드 ICMPv4 허용'|Get-NetFirewallAddressFilter
Disable-NetFirewallRule을 사용하여 방화벽 규칙을 활성화/비활성화할 수 있습니다. 및 Enable-NetFirewallRule cmdlet.
Disable-NetFirewallRule –DisplayName 'WEB-인바운드'
ICMP(ping)를 허용하려면 다음 명령을 실행하십시오.
Enable-NetFirewallRule -이름 FPS-ICMP4-ERQ-In
방화벽 규칙을 제거하기 위해 Remove-NetFirewallRule cmdlet이 사용됩니다.
PowerShell을 사용하여 Windows 방화벽 규칙 나열
다음과 같이 인바운드 트래픽에 대한 활성 방화벽 규칙 목록을 표시할 수 있습니다.
Get-NetFirewallRule | 여기서 {($_.enabled -eq $True) -and ($_.Direction -eq "인바운드")} |ft
아웃바운드 차단 규칙 목록을 표시하려면:
Get-NetFirewallRule -Action Block -활성화 True -방향 아웃바운드
규칙에 앱 이름을 표시하려면:
Get-NetFirewallRule -Action 차단 -활성화 True -방향 아웃바운드 | %{$_.이름; $_ | Get-NetFirewallApplicationFilter}
보시다시피 Get-NetFirewallRule cmdlet은 방화벽 규칙에 대한 네트워크 포트와 IP 주소를 표시하지 않습니다. 포트 번호를 표시하는 보다 편리한 방법으로 허용된 인바운드(아웃바운드) 연결에 대한 자세한 정보를 표시하려면 다음 PowerShell 스크립트를 사용하십시오.
Get-NetFirewallRule -Action Allow -Enabled True -Direction Inbound |
Format-Table -속성 이름,
@{Name='Protocol';Expression={($PSItem | Get-NetFirewallPortFilter) .프로토콜}},
@{이름='로컬포트';표현식={($PSItem | Get-NetFirewallPortFilter).LocalPort}},
@{이름='원격포트';표현식={($ PSItem | Get-NetFirewallPortFilter).RemotePort}},
@{Name='RemoteAddress';Expression={($PSItem | Get-NetFirewallAddressFilter).RemoteAddress}},
사용, 프로필, 방향, 작업
PowerShell은 명령 프롬프트에서 Windows 방화벽 규칙을 관리할 수 있는 충분한 기회를 제공합니다. 특정 이벤트가 발생하면 자동으로 PowerShell 스크립트를 실행하여 포트를 열고 닫을 수 있습니다. 다음 기사에서는 Windows VDS 서버에서 RDP를 통해 원격으로 암호를 무차별 대입하려는 IP 주소를 자동으로 차단하는 간단한 PowerShell 및 Windows 방화벽 기반 솔루션을 고려할 것입니다.