Windows 방화벽: 필요한 포트 열기
서비스용 포트를 여는 방법, 주소별로 접근을 제한하는 방법, 그리고 서버 접근을 잃지 않으면서 규칙이 실제로 작동하는지 확인하는 방법을 설명해요.
업데이트 2026년 8월 23일
Windows Server가 설치된 VDS에서는 방화벽이 서비스와 인터넷 사이의 유일한 필터예요. IPv4 주소가 공인 IP이고, 머신 앞에 외부 방어막이 없거든요. 그래서 규칙은 간단해요. 직접 열어둔 것만 외부에 노출돼요.
현재 열려 있는 항목
Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction
Get-NetFirewallRule -Enabled True -Direction Inbound |
Where-Object Action -eq Allow |
Get-NetFirewallPortFilter | Select-Object Protocol, LocalPort -Unique
Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess
마지막 명령은 어떤 포트가 실제로 수신 중인지 보여줘요. 127.0.0.1에서만 수신하는 서비스는 규칙과 관계없이 외부에서 접근할 수 없어요.
포트 열기
웹 서버:
New-NetFirewallRule -DisplayName "HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
신뢰할 수 있는 주소에만 자체 서비스를 공개:
New-NetFirewallRule -DisplayName "App 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 `
-RemoteAddress 203.0.113.5,198.51.100.0/24 -Action Allow
애플리케이션이 동적 포트를 사용한다면 포트 대신 특정 프로그램에 대한 규칙을 만드는 편이 더 안정적이에요:
New-NetFirewallRule -DisplayName "MyApp" -Direction Inbound -Program "C:\apps\myapp.exe" -Action Allow
규칙 삭제 및 확인:
Remove-NetFirewallRule -DisplayName "App 8080"
Get-NetFirewallRule -DisplayName "App 8080" | Format-List
닫아둬야 할 항목
주소로 제한하지 않고 외부에 노출해서는 안 되는 포트:
| 포트 | 서비스 | 이유 |
|---|---|---|
| 3389 | RDP | 비밀번호 무차별 대입 공격이 몇 시간 안에 시작돼요. RDP 보호를 참고하세요 |
| 1433 | MS SQL | 데이터베이스는 인터넷에서 접근할 수 없어야 해요. MS SQL Server를 참고하세요 |
| 5985, 5986 | WinRM | 원격 관리용이므로 본인 주소에서만 접근하세요 |
| 445 | SMB | 대규모 공격의 대표적인 표적이에요 |
컴퓨터에서 데이터베이스에 접근해야 한다면 1433을 열지 말고, RDP 세션 안에서 포트 포워딩을 하거나 VPN을 설정하세요.
확인
머신 내부에서 수신 중인 포트가 외부에서도 접근 가능하다는 뜻은 아니에요. 다른 호스트에서 확인하세요:
nc -vz YOUR_ADDRESS 443
curl -I http://YOUR_ADDRESS
외부에서는 닫혀 있는데 Get-NetTCPConnection에 리스너가 보인다면, 문제는 규칙이나 네트워크 프로필에 있어요. 규칙이 활성 프로필(보통 "공용 네트워크")에 만들어졌는지 확인하세요.
흔한 실수
- "디버깅을 위해" 방화벽을 완전히 비활성화하는 경우. 작업을 마치기도 전에 머신이 발견돼요. 대신 주소 제한을 건 임시 규칙을 만드세요.
- 포트는 열었지만 애플리케이션은 잊는 경우. 많은 서비스가 기본적으로 localhost에서만 수신해요. 규칙은 이와 관련이 없어요.
- RDP에서 스스로 잠기는 경우. 그 후에는 제어판
/hosting/vds/m/<id>의 "Console" 탭, "Screen" 모드로 로그인해서 거기서 규칙을 수정하세요. - 차단 규칙 위에 허용 규칙을 만드는 경우. Windows에서는 차단이 항상 허용보다 우선해요. 같은 포트를 가진 차단 규칙이 있는지 찾아보세요.
변경할 때마다 구성 스냅샷을 저장해두면 유용해요:
Get-NetFirewallRule -Enabled True | Export-Csv C:\fw.csv. 이렇게 하면 서비스가 갑자기 응답을 멈췄을 때 무엇이 바뀌었는지 파악할 수 있어요.