Windows Server를 운영하다 보면 보안 점검이나 ISMS-P, ISO/IEC 27001 관련 점검 과정에서 서버에 설정된 방화벽 정책을 확인해야 하는 경우가 있습니다.
Windows Defender 방화벽은 GUI에서도 확인할 수 있지만, 등록된 정책이 많을 경우 각 정책의 IP, Port, 방향 등을 하나씩 확인하기 번거로울 수 있습니다.
Power Shell을 활용하면 현재 적용 중인 방화벽 정책을 한 번에 조회하고, Inbound와 Outbound 정책을 각각 CSV 파일로 추출하여 Excel에서 정리할 수 있습니다.
또한 실제 서버에서 LISTEN 중인 Port를 확인하여 방화벽 정책과 비교하거나, 필요한 경우 정책의 추가·수정·비활성화·삭제까지 수행할 수 있습니다.
이번 글에서는 다음 작업을 진행해보겠습니다.
- Windows 방화벽 상태 확인
- Inbound 정책 조회
- Outbound 정책 조회
- TCP LISTEN Port 확인
- Inbound / Outbound 정책 CSV 추출
- 방화벽 정책 검토
- 정책 추가 및 조회
- 정책 허용 범위 수정
- 정책 비활성화 및 활성화
- 정책 삭제
1. ISMS-P 및 ISO 관점에서 방화벽 정책 점검
ISMS-P 및 ISO/IEC 27001과 같은 정보보호 관리체계에서는 서버와 네트워크에 대한 접근을 업무상 필요한 범위로 제한하고, 불필요하거나 과도한 접근 권한이 지속적으로 유지되지 않도록 관리하는 것이 중요합니다.
방화벽 정책을 점검할 때는 단순히 정책이 존재하는지만 확인하기보다는 다음 항목을 함께 확인하는 것이 좋습니다.
- 현재 활성화된 정책인지
- Inbound 또는 Outbound 정책인지
- Allow 또는 Block 정책인지
- 허용 대상 IP가 적절한지
- 허용 Port 범위가 적절한지
- 실제 서버에서 사용하는 서비스인지
- 더 이상 사용하지 않는 정책이 남아 있지 않은지
특히 Any로 설정된 정책이라고 해서 모두 불필요한 정책으로 판단해서는 안 됩니다.
예를 들어 외부에 공개하는 웹 서비스의 TCP 80/443 Port는 서비스 특성상 접근 IP 범위가 넓을 수 있습니다.
반면 RDP와 같은 관리용 Port가 모든 IP에 허용되어 있다면 실제 운영 환경에 따라 관리자 IP 또는 관리망으로 접근 범위를 제한할 수 있는지 검토하는 것이 좋습니다.
Windows 기본 정책 역시 기본 정책이라는 이유만으로 일괄 삭제하기보다는 실제 서버 역할과 서비스에서 사용되는 정책인지 먼저 확인해야 합니다.
2. Power Shell 관리자 권한 실행
방화벽 정책을 추가하거나 수정하려면 Power Shell을 관리자 권한으로 실행합니다.
Windows 검색창에서 Power Shell을 검색한 뒤 관리자 권한으로 실행합니다.

3. Windows 방화벽 Profile 상태 확인
먼저 Windows 방화벽 Profile 상태를 확인합니다.
Get-NetFirewallProfile -PolicyStore ActiveStore |
Select-Object Name, Enabled, DefaultInboundAction, DefaultOutboundAction
Windows 방화벽은 일반적으로 다음 Profile로 구분됩니다.
- Domain
- Private
- Public
각 Profile에서 방화벽 활성화 여부와 기본 Inbound / Outbound 동작을 확인할 수 있습니다.

4. Inbound 방화벽 정책 조회
Inbound는 외부에서 서버 방향으로 들어오는 통신에 적용되는 정책입니다.
현재 활성화된 Inbound 정책을 확인합니다.
Get-NetFirewallRule `
-PolicyStore ActiveStore `
-Direction Inbound `
-Enabled True |
Select-Object DisplayName, Enabled, Profile, Direction, Action
Allow 정책만 확인하고 싶다면 다음과 같이 사용할 수 있습니다.
Get-NetFirewallRule `
-PolicyStore ActiveStore `
-Direction Inbound `
-Enabled True `
-Action Allow |
Select-Object DisplayName, Profile, Direction, Action

Inbound 정책에서는 주로 다음 항목을 확인합니다.
- Remote Address
- Local Port
- Protocol
- Action
즉 어떤 IP에서 서버의 어떤 Port로 접근할 수 있는지를 확인하는 것이 중요합니다.
5. Outbound 방화벽 정책 조회
Outbound는 서버에서 외부 네트워크 방향으로 나가는 통신에 적용되는 정책입니다.
활성화된 Outbound 정책은 다음과 같이 확인할 수 있습니다.
Get-NetFirewallRule `
-PolicyStore ActiveStore `
-Direction Outbound `
-Enabled True |
Select-Object DisplayName, Enabled, Profile, Direction, Action
Allow 정책만 확인하려면 다음과 같이 사용합니다.
Get-NetFirewallRule `
-PolicyStore ActiveStore `
-Direction Outbound `
-Enabled True `
-Action Allow |
Select-Object DisplayName, Profile, Direction, Action

Inbound뿐만 아니라 Outbound 정책도 함께 확인하면 서버에서 불필요한 외부 통신이 허용되어 있는지 점검하는 데 도움이 됩니다.
6. 방화벽 정책의 IP와 Port 확인
Get-NetFirewallRule 명령만으로는 방화벽 정책의 모든 IP와 Port 조건을 확인하기 어렵습니다.
Port 정보는 다음 명령으로 확인할 수 있습니다.
Get-NetFirewallRule -DisplayName "정책이름" |
Get-NetFirewallPortFilter
IP Address 조건은 다음과 같이 확인합니다.
Get-NetFirewallRule -DisplayName "정책이름" |
Get-NetFirewallAddressFilter
정책을 검토할 때는 다음 항목을 함께 확인하는 것이 좋습니다.
DisplayName
Enabled
Direction
Action
Profile
Protocol
LocalPort
RemotePort
LocalAddress
RemoteAddress
7. 현재 LISTEN 중인 TCP Port 확인
방화벽에서 허용하고 있는 Port가 실제 서버에서 사용 중인지 확인하기 위해 LISTEN 상태의 Port를 조회할 수 있습니다.
Get-NetTCPConnection -State Listen |
Select-Object LocalAddress, LocalPort, OwningProcess |
Sort-Object LocalPort

특정 Port만 확인할 수도 있습니다.
예를 들어 TCP 80 Port를 확인하려면 다음과 같이 실행합니다.
Get-NetTCPConnection -State Listen -LocalPort 80
OwningProcess 항목에 표시된 PID를 이용하면 어떤 프로세스가 해당 Port를 사용하는지도 확인할 수 있습니다.
Get-Process -Id PID번호
UDP Port를 확인해야 하는 경우에는 다음 명령을 사용할 수 있습니다.
Get-NetUDPEndpoint |
Select-Object LocalAddress, LocalPort, OwningProcess |
Sort-Object LocalPort
방화벽에 등록된 허용 Port와 실제 LISTEN Port를 비교하면 현재 사용하지 않는 정책을 식별하는 데 도움이 됩니다.
8. Inbound 방화벽 정책 CSV 추출
방화벽 정책 수가 많을 경우 콘솔 화면에서 하나씩 확인하는 것보다 CSV 파일로 추출하여 Excel에서 확인하는 것이 편리합니다.
다음 명령은 활성화된 Inbound 정책의 주요 정보를 CSV 파일로 저장합니다.
Get-NetFirewallRule `
-PolicyStore ActiveStore `
-Direction Inbound `
-Enabled True |
ForEach-Object {
$rule = $_
$port = $rule | Get-NetFirewallPortFilter
$addr = $rule | Get-NetFirewallAddressFilter
[PSCustomObject]@{
DisplayName = $rule.DisplayName
Enabled = $rule.Enabled
Direction = $rule.Direction
Action = $rule.Action
Profile = $rule.Profile
Protocol = ($port.Protocol -join ",")
LocalPort = ($port.LocalPort -join ",")
RemotePort = ($port.RemotePort -join ",")
LocalAddress = ($addr.LocalAddress -join ",")
RemoteAddress = ($addr.RemoteAddress -join ",")
PolicyStoreSourceType = $rule.PolicyStoreSourceType
}
} | Export-Csv `
"C:\firewall_inbound.csv" `
-NoTypeInformation `
-Encoding UTF8
생성되는 파일은 다음과 같습니다.
C:\firewall_inbound.csv

생성된 CSV 파일은 Excel에서 열어 확인할 수 있습니다.

9. Outbound 방화벽 정책 CSV 추출
Outbound 정책도 별도의 CSV 파일로 추출할 수 있습니다.
Get-NetFirewallRule `
-PolicyStore ActiveStore `
-Direction Outbound `
-Enabled True |
ForEach-Object {
$rule = $_
$port = $rule | Get-NetFirewallPortFilter
$addr = $rule | Get-NetFirewallAddressFilter
[PSCustomObject]@{
DisplayName = $rule.DisplayName
Enabled = $rule.Enabled
Direction = $rule.Direction
Action = $rule.Action
Profile = $rule.Profile
Protocol = ($port.Protocol -join ",")
LocalPort = ($port.LocalPort -join ",")
RemotePort = ($port.RemotePort -join ",")
LocalAddress = ($addr.LocalAddress -join ",")
RemoteAddress = ($addr.RemoteAddress -join ",")
PolicyStoreSourceType = $rule.PolicyStoreSourceType
}
} | Export-Csv `
"C:\firewall_outbound.csv" `
-NoTypeInformation `
-Encoding UTF8
결과적으로 다음 두 파일을 각각 확인할 수 있습니다.
C:\firewall_inbound.csv
C:\firewall_outbound.csv

Inbound와 Outbound 정책을 각각 분리하여 관리하면 방향별 정책을 검토하기 편리합니다.
10. 추출한 정책에서 확인할 항목
CSV 파일을 Excel에서 열어 다음 항목을 중심으로 확인합니다.
| 구분 | 확인 사항 |
|---|---|
| Enabled | 실제 활성화된 정책인지 |
| Direction | Inbound / Outbound |
| Action | Allow / Block |
| Protocol | TCP / UDP / Any |
| LocalPort | 서버에서 사용하는 Port |
| RemotePort | 상대측 Port |
| RemoteAddress | 접근이 허용된 상대 IP |
| Profile | Domain / Private / Public / Any |
| PolicyStoreSourceType | 정책 출처 |
특히 다음과 같은 정책은 실제 필요성을 확인해볼 필요가 있습니다.
- 관리용 서비스의 RemoteAddress가
Any인 경우 - 필요 이상으로 넓은 Port 범위가 허용된 경우
- 임시 작업 목적으로 생성한 정책
- 현재 사용하지 않는 서비스의 정책
- 중복으로 등록된 정책
- 서비스 종료 후 남아 있는 정책
다만 공개 웹 서비스의 80/443 Port처럼 서비스 특성상 Any 범위가 필요한 경우도 있으므로 설정값만 보고 바로 삭제하지 않는 것이 중요합니다.
11. 방화벽 정책 변경 전 백업
운영 서버에서 방화벽 정책을 변경하기 전에는 기존 설정을 백업하는 것이 좋습니다.
netsh advfirewall export "C:\firewall_backup.wfw"

복원이 필요한 경우에는 다음 명령을 사용할 수 있습니다.
netsh advfirewall import "C:\firewall_backup.wfw"
12. 방화벽 정책 추가
이번에는 테스트용 정책을 직접 생성해보겠습니다.
예시로 192.168.0.0/16 대역에서 현재 서버의 TCP 80 Port로 접근할 수 있도록 Inbound Allow 정책을 생성합니다.
New-NetFirewallRule `
-DisplayName "Allow_HTTP_192.168_Network" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 80 `
-RemoteAddress 192.168.0.0/16 `
-Action Allow
위 명령을 실행하면 다음 조건의 정책이 생성됩니다.
Direction : Inbound
Action : Allow
Protocol : TCP
LocalPort : 80
RemoteAddress : 192.168.0.0/16
※
192.168.0.0/16은 명령어 설명을 위한 사설 IP 예시입니다. 실제 환경에서는 서비스에 필요한 IP 또는 네트워크 범위를 확인하여 설정해야 합니다.

13. 생성한 방화벽 정책 확인
앞에서 생성한 정책의 기본 정보를 확인합니다.
Get-NetFirewallRule `
-DisplayName "Allow_HTTP_192.168_Network"

Port 설정은 다음과 같이 확인합니다.
Get-NetFirewallRule `
-DisplayName "Allow_HTTP_192.168_Network" |
Get-NetFirewallPortFilter
정상적으로 생성되었다면 다음과 같은 결과를 확인할 수 있습니다.
Protocol : TCP
LocalPort : 80
RemotePort : Any
IP 범위도 확인합니다.
Get-NetFirewallRule `
-DisplayName "Allow_HTTP_192.168_Network" |
Get-NetFirewallAddressFilter
192.168.0.0/16으로 등록한 경우 다음과 같이 표시될 수 있습니다.
LocalAddress : Any
RemoteAddress : 192.168.0.0/255.255.0.0
192.168.0.0/255.255.0.0은 192.168.0.0/16과 동일한 네트워크 범위를 의미합니다.

14. 기존 방화벽 정책 허용 범위 수정
이번에는 앞서 생성한 정책의 허용 범위를 변경해보겠습니다.
기존 설정:
192.168.0.0/16
변경할 설정:
192.168.0.0/24
다음과 같이 실행합니다.
Set-NetFirewallRule `
-DisplayName "Allow_HTTP_192.168_Network" `
-RemoteAddress 192.168.0.0/24
변경 후 설정을 확인합니다.
Get-NetFirewallRule `
-DisplayName "Allow_HTTP_192.168_Network" |
Get-NetFirewallAddressFilter
정상적으로 변경되었다면 다음과 같이 표시됩니다.
RemoteAddress : 192.168.0.0/255.255.255.0
즉 접근 가능 범위가 /16에서 /24로 축소된 것을 확인할 수 있습니다.

이와 같이 관리용 서비스나 특정 시스템 간 통신 정책은 실제 필요한 IP 범위만 허용하도록 조정할 수 있습니다.
15. 정책 비활성화 및 활성화
불필요해 보이는 정책을 발견했다고 해서 바로 삭제하기보다는 먼저 비활성화한 뒤 서비스 영향을 확인하는 방법도 사용할 수 있습니다.
정책 비활성화:
Disable-NetFirewallRule `
-DisplayName "Allow_HTTP_192.168_Network"
상태 확인:
Get-NetFirewallRule `
-DisplayName "Allow_HTTP_192.168_Network" |
Select-Object DisplayName, Enabled
정상적으로 비활성화되었다면:
Enabled : False
로 표시됩니다.

다시 활성화하려면 다음과 같이 실행합니다.
Enable-NetFirewallRule `
-DisplayName "Allow_HTTP_192.168_Network"
16. 방화벽 정책 삭제
더 이상 필요하지 않은 것이 확인된 정책은 삭제할 수 있습니다.
Remove-NetFirewallRule `
-DisplayName "Allow_HTTP_192.168_Network"
삭제 후 다시 조회합니다.
Get-NetFirewallRule `
-DisplayName "Allow_HTTP_192.168_Network"
정책이 정상적으로 삭제되었다면 해당 DisplayName의 정책을 찾을 수 없다는 결과가 출력됩니다.

17. 운영 서버에서 방화벽 정책 점검 시 권장 순서
실제 운영 서버에서는 다음과 같은 순서로 점검하는 것이 안전합니다.
1. 현재 적용된 방화벽 정책 조회
2. Inbound / Outbound 정책 구분
3. IP 및 Port 허용 범위 확인
4. 실제 LISTEN Port 및 서비스 확인
5. Inbound / Outbound 정책 CSV 추출
6. 실제 운영 서비스와 정책 비교
7. 불필요하거나 과도한 허용 정책 검토
8. 기존 방화벽 설정 백업
9. 필요 시 정책 비활성화 또는 허용 범위 수정
10. 서비스 영향 확인
11. 불필요한 것이 확인된 정책 삭제
방화벽 정책을 검토할 때는 Windows 기본 정책을 일괄적으로 삭제하기보다는 실제 서버 역할과 서비스 구성에 따라 필요한 정책인지 판단하는 것이 중요합니다.
또한 Group Policy 등을 통해 중앙에서 적용된 정책이 있을 수 있으므로 정책 출처 역시 함께 확인해야 합니다.
마무리
Windows Server 방화벽은 GUI를 통해서도 관리할 수 있지만, 정책 수가 많아지면 Power Shell을 이용한 조회와 정리가 효율적입니다.
Power Shell을 활용하면 Inbound 및 Outbound 정책을 각각 조회하고 정책별 IP와 Port를 CSV 파일로 추출하여 Excel에서 검토할 수 있습니다.
또한 현재 서버에서 LISTEN 중인 Port와 방화벽 허용 정책을 비교하여 실제 사용 중인 서비스와 방화벽 정책이 적절하게 구성되어 있는지 확인할 수 있습니다.
보안 점검이나 ISMS-P 및 ISO/IEC 27001 관련 관리 활동에서는 모든 정책을 단순히 삭제하기보다는 서버 역할과 서비스 용도를 확인하고, 불필요하거나 필요 이상으로 넓게 허용된 접근 범위를 식별하여 조정하는 것이 중요합니다.
방화벽 정책을 변경해야 하는 경우에는 기존 설정을 백업하고, 가능하면 정책을 먼저 비활성화하거나 허용 범위를 축소한 후 서비스 영향을 확인한 뒤 최종적으로 삭제하는 방식으로 진행하는 것이 안전합니다.
※ 본 내용은 Windows Server 방화벽 정책 점검 및 Power Shell 활용 방법을 설명하기 위한 예시입니다. 실제 정책의 필요 여부는 서버 역할, 서비스 구성, 조직의 정보보호 정책 및 위험평가 결과에 따라 판단해야 하며, 본 설정만으로 ISMS-P 또는 ISO/IEC 27001 인증요건 충족을 의미하지는 않습니다.
※ 본 글은 본인의 실제 경험과 학습을 기반으로 직접 작성하였으며, AI는 참고용으로만 활용하였습니다.





