В статье рассмотрим несколько способов, позволяющий заблокировать доступ к определенным веб-сайтам, доменам или IP адресам с компьютера Windows без использования сторонних программ. Обычно блокировку сайтов наиболее эффективно настраивать на уровне сетевого шлюза (роутер, маршрутизатор, Wi-Fi точка доступа, через которую вы выходите в Интернет), или с помощью стороннего ПО (фильтры контента, DNS фильтры, родительский контрол и т.д.). В данном случае мы попробуем заблокировать определенный сайт с помощью встроенных средств Windows и скриптов PowerShell.
Блокировка сайтов в Windows с помощью файла hosts
Самый известный способ заблокировать определенный сайт в Windows — перенаправить трафик к сайту на несуществующий IP с помощью фейковой записи в файле hosts. По умолчанию файл хост находится в каталоге
%windir%\system32\drivers\etc\
(можно изменить местоположение через параметр реестра DataBasePath в ветке
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
).
Чтобы отредактировать файл host, нужно открыть его любом в текстовом редакторе с правами администратора. Например, запустите консоль PoweShell в режиме Run as administrator и выполните команду:
notepad $env:SystemRoot\System32\drivers\etc\hosts
Чтобы заблокировать определенный сайт (например, ok.ru), добавьте в файл hosts строки вида:
127.0.0.1 ok.ru
127.0.0.1 www.ok.ru
Сохраните файл и очистите локальный кэш DNS клиента:
ipconfig /flushdns
После этого при попытке открыть сайт ok.ru в любом браузере будет появляется сообщение ERR_CONNECTION_REFUSED / Страница не найдена / Страница не доступна.
Для автоматизации блокровки (разблокировки) определенных сайтов в списке запрещенных в файле hosts можно использовать следующие PowerShell функции:
Function BlockSiteHosts ( [Parameter(Mandatory=$true)]$Url) {
$hosts = "$env:SystemRoot\System32\drivers\etc\hosts"
$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 = "$env:SystemRoot\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
}
}
Можно добавить эти функции в файл профиля PowerShell, после чего чтобы добавить сайт в заблокированные достаточно выполнить команду:
BlockSiteHosts ("vk.com")
Чтобы разблокировать сайт:
UnBlockSiteHosts ("vk.com")
Как заблокировать сайт в браузере с помощью групповых политик?
Для блокировки определенный сайтов в браузерах пользователей можно использовать групповые политики (GPO). Единственный нюанс, для каждого браузера идет свой набор шаблонов групповых политик, которые не будет работать для других браузеров. Поэтому администратору в первую очередь нужно ограничить запуск любых браузеров, кроме разрешенных (через AppLocker или SRP).
Рассмотрим, как запретить доступ к сайту в браузере Microsoft Edge:
- Скачайте и установите административные шаблоны GPO для браузера MS Edge (подробнее об установке ADMX шаблонов GPO)
- Откройте редактор локальной GPO (
gpedit.msc
) или редактор доменных политик GPMC (если блокируете доступ к сайту на нескольких машинах в домене) - Перейдите в раздел Computer Configuration -> Policies -> Administrative Templates -> Microsoft Edge.
- Включите параметр Block access to a list of URLs, нажмите кнопку Show и добавьте список адресов сайтов, которые нужно заблокировать.
- Сохраните настройки политики и обновите их на клиенте:
gpupdate /force
Теперь при попытке открыть запрещенный сайт в браузере Edge появится надпись:
Website is blocked Your organization doesn’t allow you to view this site.
Если вы используете Google Chrome в качестве основного браузера, нужно скачать и установить ADMX политики для Chrome и аналогичным образом настроить в них параметр Block access to a list of URLs.
Групповые политики для браузеров позволят гибко создать запреты доступа к сайтом и/или исключения (в зависимости от того, хотите ли вы использовать белый или черный список сайтов).
Заблокировать IP адрес сайта в брандмауэре Windows
Можно заблокировать определенные сайты или домены с помощью правил встроенного Windows Firewall. Однако в Брандмауэре Windows в качестве источника/назначения позволяет указать только IP адрес или подсеть, поэтому впрямую указать имя сайта нельзя.
Сначала нужно отрезолвить имя сайта в IP адрес. Воспользуйтесь командой:
nslookup ok.ru
или
Resolve-DnsName ok.ru
Команда вернула несколько IP адресов сайта. Вам нужно заблокировать их все.
Теперь нужно запустить панель настройки Windows Firewall (Панель управления \Все элементы панели управления\Брандмауэр Защитника Windows\Дополнительные параметры или
firewall.cpl
).
В секции “Правила для исходящих подключений” создайте новое правило со следующими параметрами:
- Тип правила: Настраиваемые;
- Программа: Все программы;
- Тип протокола: Любой;
- Область: в секции “Укажите удаленные IP адреса, к которым применяется данное правило” выберите пункт “Указанные IP адреса” -> Добавить. В открывшемся окне укажите IP адреса, IP подсети или диапазон IP адресов сайтов, которые нужно заблокировать.
Нажмите OK-> Далее -> Действие: “Блокировать подключение”.
В окне со списком профилей брандмауэра (типов сетей), к которым применяется это правило оставьте все опции. Осталось указать имя правила и сохранить его.
В домене AD можно применить на компьютеры пользователей политику, блокирующую сайт с помощью GPO. Но еще раз скажем, это нецелесообразно. Фильтровать сайты правильнее на шлюзе доступа в Интернет.
PowerShell: блокировка сайтов по имени и IP адресу в брандмауэре Windows
С помощью PowerShell можно создать правило брандмауэра, блокирующее исходящие подключения к определенному сайту:
New-NetFirewallRule -DisplayName "Block Site" -Direction Outbound –LocalPort Any -Protocol Any -Action Block -RemoteAddress 217.20.147.1, 217.20.141.0/26
Для автоматического резолвинга имени сайта в IP можно использовать PowerShell командлет Resolve-DnsName:
Resolve-DnsName "ok.ru"| Select-Object -ExpandProperty IPAddress
Таким образом чтобы отрезвить имя сайта в IP адрес и сразу добавить запрещающее правило для блокирования доступа к нему, используйте такой скрипт:
$SitesToBlock = "lenta.ru","mail.ru","ok.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
Проверим, что блокирующее правило для исходящего появилось в консоли.
Эта статья прежде всего разминка для ума. В корпоративной сети для ограничения доступа к сайтам нужно использовать фильтрацию на уровне шлюза доступа в интернет или прокси-сервере. Блокировка доступа на уровне хостов не столь эффективна.
Добавлю, может кому то будет интересно.
Была задача заблокировать кучке пользователей доступ в интернет(точнее доступ только по белому списку)
Сделал на групповых политиках(все в домене). Конкретно — политики браузера Google Chrome.Там такими параметрами очень удобно управлять. Делается запрет на все сайты, и список исключения.
Парк ПК весь на win8.1-10, той же политикой брандмауером запрещен выход в интернет для internet explorer, политикой SRP запрещен запуск Edge(брандмауером заблокоривать оказалось разные версии сложно).Других браузеров нету, в SRP запрещен запуск программ с профиля пользователя, USB порты для накопителей отключены.
Достаточно удобно получилось, из плюсов по сравнению из прокси сервером например:
1. Не страдают другие программы на ПК(skype,teamviewer, windows update и т. д.)
2. Удобно, легко управлять белым списком сайтов. Добавили — 90минут обновление политики, и готово
3. Легко и быстро фильтровать пользователей по доступам.
Полгода в продуктиве, обходных схем не обнаружено)
А что делать с портабельными версиями браузеров?
Допускаю, но откуда их взять? USB-отключен для накопителей. Плюс из папок пользователя запуск програм ограничен по SRP