서드파티(외부) 프로그램 없이 Windows만의 기본 기능으로 특정 웹사이트, 도메인, URL 또는 IP 주소에 대한 접근을 차단하는 다양한 방법을 살펴보겠습니다. 이 글에서는 Windows 10에 내장된 도구와 PowerShell 자동화 기능을 활용해 원하는 사이트를 차단하는 실전 방법을 소개합니다.
일반적으로 네트워크 라우터(인터넷 접속에 사용하는 스위치나 Wi-Fi 공유기)에서 웹사이트를 차단하거나, 콘텐츠 필터·DNS 필터 같은 서드파티 소프트웨어를 사용하는 것이 더 간편합니다. 하지만 별도 장비나 프로그램 없이 Windows 자체 기능만으로 차단해야 하는 상황이라면 아래 방법들이 유용합니다.
hosts 파일을 이용한 웹사이트 차단
Windows에서 특정 웹사이트를 차단하는 가장 대중적인 방법은 hosts 파일을 수정하는 것입니다. 이 파일은 일반적으로 %windir%\system32\drivers\etc\ 디렉터리에 위치하며, 확장자가 없다는 점에 유의하세요.
hosts 파일이 있는 디렉터리 경로는 레지스트리 키 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 아래의 DataBasePath 값으로 지정되며, 기본값은 %SystemRoot%\System32\drivers\etc입니다.
hosts 파일은 IP 주소와 DNS 이름 간의 매핑을 수동으로 지정하는 용도로 사용됩니다. 이름 확인(name resolution) 시 hosts 파일은 네트워크 연결 설정에 지정된 DNS 서버보다 높은 우선순위를 가집니다.
특정 웹사이트(예: facebook.com)를 차단하려면 관리자 권한으로 hosts 파일을 열고 다음과 같은 줄을 추가합니다:
127.0.0.1 facebook.com 127.0.0.1 www.facebook.com
파일을 저장한 후 컴퓨터를 재시작하거나, 다음 명령으로 DNS 캐시를 초기화하세요:
ipconfig /flushdns
이후 어떤 브라우저에서 facebook.com에 접속하려고 하면 "페이지를 찾을 수 없음" 또는 "페이지를 표시할 수 없음" 메시지가 나타납니다.
배치 파일(.bat)로 hosts 항목 자동 추가
다음과 같은 .bat 파일을 사용하면 hosts 파일에 새로운 차단 항목을 손쉽게 추가할 수 있습니다:
@echo off
set hostspath=%windir%\System32\drivers\etc\hosts
echo 127.0.0.1 www.facebook.com >> %hostspath%
echo 127.0.0.1 facebook.com >> %hostspath%
exit
PowerShell 함수로 hosts 파일 자동 관리
아래 PowerShell 함수를 사용하면 hosts 파일에서 특정 웹사이트를 자동으로 차단하거나 해제할 수 있습니다.
Function BlockSiteHosts ( [Parameter(Mandatory=$true)]$Url) {
$hosts = 'C:\Windows\System32\drivers\etc\hosts'
$is_blocked = Get-Content -Path $hosts |
Select-String -Pattern ([regex]::Escape($Url))
If(-not $is_blocked) {
$hoststr="127.0.0.1 ” + $Url
Add-Content -Path $hosts -Value $hoststr
}
}
Function UnBlockSiteHosts ( [Parameter(Mandatory=$true)]$Url) {
$hosts = 'C:\Windows\System32\drivers\etc\hosts'
$is_blocked = Get-Content -Path $hosts |
Select-String -Pattern ([regex]::Escape($Url))
If($is_blocked) {
$newhosts = Get-Content -Path $hosts |
Where-Object {
$_ -notmatch ([regex]::Escape($Url))
}
Set-Content -Path $hosts -Value $newhosts
}
}
웹사이트를 차단 목록에 추가하려면 다음 명령을 실행합니다:
BlockSiteHosts ("twitter.com")
차단을 해제하려면 다음 명령을 사용합니다:
UnBlockSiteHosts ("twitter.com")
DNS 필터링을 이용한 웹사이트 차단
클라이언트들이 동일한 DNS 서버를 사용하고 있다면, 해당 DNS 서버에 차단하려는 도메인을 127.0.0.1 같은 로컬 주소로 연결하는 레코드를 생성하는 방식으로도 웹사이트를 차단할 수 있습니다. 참고로 OpenDNS, SafeDNS, Cisco Umbrella 같은 상용 DNS 콘텐츠 필터 대부분도 동일한 원리를 사용합니다.
Windows Defender 방화벽에서 웹사이트 IP 주소 차단하기
내장된 Windows Defender 방화벽을 통해서도 웹사이트를 차단할 수 있습니다. 단, 이 방법의 가장 큰 단점은 차단 규칙에 도메인 이름이나 웹사이트 URL을 직접 사용할 수 없다는 것입니다. Windows Defender 방화벽에서는 출발지/목적지로 IP 주소 또는 서브넷만 지정할 수 있습니다.
먼저 차단하려는 웹사이트의 IP 주소를 확인해야 합니다. nslookup 명령을 사용하면 가장 간단하게 확인할 수 있습니다:
nslookup twitter.com
명령 실행 결과 하나의 웹사이트에 여러 개의 IP 주소가 할당되어 있음을 확인할 수 있으며, 이 주소들을 모두 차단해야 합니다.
Windows Defender 방화벽 관리 스냅인을 실행합니다 (제어판 → 모든 제어판 항목 → Windows Defender 방화벽 → 고급 설정, 또는 firewall.cpl 실행).
아웃바운드 규칙(Outbound Rules) 섹션에서 다음 설정으로 새 규칙을 만듭니다:
- 규칙 종류(Rule Type): 사용자 지정(Custom)
- 프로그램(Program): 모든 프로그램
- 프로토콜 유형(Protocol Type): 임의(Any)
- 범위(Scope): "이 규칙이 적용되는 원격 IP 주소" 섹션에서 "다음 IP 주소" 선택 → 추가를 클릭한 후, 차단하려는 IP 주소·서브넷 또는 IP 주소 범위를 입력합니다.
확인 → 다음 → 작업 순으로 진행한 뒤 연결 차단(Block the connection)을 선택합니다.
방화벽 프로필(도메인, 개인, 공용)을 지정하는 창에서는 기본 설정을 그대로 두고, 규칙 이름을 지정한 후 저장합니다.
이제 Windows Defender 방화벽이 해당 웹사이트 IP 주소로 향하는 모든 아웃바운드 연결을 차단합니다. 차단된 사이트에 접속하려고 하면 브라우저에 다음과 같은 메시지가 표시됩니다:
Unable to connect (연결할 수 없음)
또는
Your Internet access is blocked Firewall or antivirus software may have blocked the connection ERR_NETWORK_ACCESS_DENIED
AD 도메인 환경이라면 GPO를 통해 Windows 방화벽 정책을 배포하여 사용자 컴퓨터에서 특정 웹사이트 접근을 차단할 수도 있습니다. 하지만 이는 비효율적인 방법이며, 인터넷 접속 라우터(게이트웨이)에서 웹사이트를 필터링하는 것이 바람직합니다.
PowerShell로 도메인 이름 또는 IP 주소 기반 방화벽 차단 규칙 만들기
PowerShell을 사용해서도 웹사이트 접속을 차단하는 방화벽 규칙을 만들 수 있습니다:
New-NetFirewallRule -DisplayName "Block Site" -Direction Outbound –LocalPort Any -Protocol Any -Action Block -RemoteAddress 104.244.42.129, 104.244.42.0/24
"The rule was parsed successfully from the store"라는 메시지가 출력되면 새 방화벽 규칙이 성공적으로 적용된 것입니다. Windows Defender 방화벽 그래픽 인터페이스에서 해당 규칙을 확인할 수 있습니다.
Resolve-DnsName으로 도메인 IP 자동 조회
웹사이트 이름을 수동으로 IP 주소로 변환하지 않으려면 Resolve-DnsName PowerShell cmdlet을 사용해 웹사이트의 IP 주소를 자동으로 가져올 수 있습니다:
Resolve-DnsName "twitter.com"| Select-Object -ExpandProperty IPAddress
이렇게 하면 도메인 이름을 IP 주소로 변환한 후 방화벽에 차단 규칙을 추가할 수 있습니다:
$IPAddress = Resolve-DnsName "twitter.com"| Select-Object -ExpandProperty IPAddress
New-NetFirewallRule -DisplayName "Block Site" -Direction Outbound –LocalPort Any -Protocol Any -Action Block -RemoteAddress $IPAddress
여러 웹사이트 한 번에 차단하기
다음 스크립트를 사용하면 여러 웹사이트에 대한 차단 규칙을 한 번에 추가할 수 있습니다:
$SitesToBlock = "facebook.com","instagram.com","youtube.com"
$IPAddress = $SitesToBlock | Resolve-DnsName -NoHostsFile | Select-Object -ExpandProperty IPAddress
New-NetFirewallRule -DisplayName "Block Web Sites" -Direction Outbound –LocalPort Any -Protocol Any -Action Block -RemoteAddress $IPAddress
여기서 Resolve-DnsName cmdlet에 -NoHostsFile 매개변수를 추가한 것은 이름 확인 시 hosts 파일을 참조하지 않도록 하기 위함입니다.
마지막으로 Windows 방화벽 콘솔에서 아웃바운드 차단 규칙이 정상적으로 생성되었는지 확인합니다.
마무리: 호스트 수준 차단의 한계
이 글에서 소개한 방법들은 학습 목적이나 개인 PC 환경에서 유용하게 활용할 수 있습니다. 다만 기업 네트워크 환경에서는 인터넷 접속 게이트웨이, 라우터 또는 프록시 서버에서 웹사이트 필터링을 수행해야 합니다. 호스트(개별 PC) 수준의 차단은 우회가 쉽고 관리 부담이 크기 때문에 효율성이 떨어진다는 점을 기억하세요.