Як заблокувати доступ до сайту в Windows за допомогою PowerShell

Розглянемо кілька способів, які допоможуть вам заборонити доступ до окремих сайтів, URL і IP адресами в Windows без використання сторонніх програм. Зазвичай блокування сайтів найбільш ефективно налаштовувати на рівні шлюзу (роутер, маршрутизатор, Wi-Fi точка доступу, через яку ви виходите в Інтернет), або за допомогою стороннього ПО (фільтри контенту, DNS фільтри і т.д.). У нашому випадку ми спробуємо заблокувати певний сайт за допомогою вбудованих засобів Windows 10 і автоматизації PowerShell.

зміст:

  • Блокування сайтів в Windows за допомогою файлу hosts
  • Блокування сайтів через DNS
  • Блокуємо IP адреса сайту в брандмауері Windows
  • PowerShell: правила блокування сайтів на ім'я і IP адресою в брандмауері Windows

Блокування сайтів в Windows за допомогою файлу hosts

Найвідоміший спосіб заблокувати певний сайт в Windows - відредагувати файл hosts. Зазвичай файл знаходиться в каталозі % Windir% \ system32 \ drivers \ etc \. Зверніть увагу, що у файлу hosts немає розширення.

Шлях до каталогу з файлом hosts задається в параметрі DataBasePath в гілці реєстру HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters. За замовчуванням це% SystemRoot% \ System32 \ drivers \ etc.

Файл hosts використовується для ручного призначення відповідностей між IP адресами і DNS іменами. При виконанні вирішенні імен файл hosts має пріоритет над DNS серверами, зазначеними в налаштуваннях мережевих підключень,

Щоб заблокувати певний сайт (наприклад, ok.ru), відкрийте на редагування файл hosts (з правами адміністратора) і додайте в нього такі рядки:

127.0.0.1 ok.ru
127.0.0.1 www.ok.ru

Збережіть файл і перезавантажте комп'ютер (або очистіть DNS кеш командою: ipconfig / flushdns).

Після цього при спробі відкрити сайт ok.ru в будь-якому браузері буде з'являється повідомлення "Сторінку не знайдено" / "Сторінку не доступна".

Ви можете додавати нові рядки з URL сайтів в файл hosts за допомогою такого bat файлу:

@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.

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 ( "vk.com")

Щоб розблокувати сайт запустіть:

UnBlockSiteHosts ( "vk.com")

Блокування сайтів через DNS

Якщо ваші клієнти користуються одним DNS сервером, ви можете аналогічним чином заблокувати певний сайти за допомогою створення DNS записи в цьому DNS, що вказує на 127.0.0.1 (або щось в такому роді). За таким принципом, до речі, працюють більшість комерційних контент фільтрів DNS (OpenDNS, SkyDNS, яндекс.dns і т.д.).

Блокуємо IP адреса сайту в брандмауері Windows

Також ви можете заблокувати певні сайти за допомогою вбудованого Windows Firewall. Головний недолік такого методу - ви не зможете використовувати ім'я домену або сайту в правилі блокування. Брандмауер Windows в якості джерела / призначення дозволяє вказати тільки IP адреса або підмережа.

Спочатку потрібно визначити IP адреса сайту, який ви хочете заблокувати. Проше всього це зробити командою nslookup.

nslookup ok.ru

Як ви бачите в результатах команди присутні кілька IP адрес, які призначені сайту. Вам потрібно заблокувати їх все.

Тепер потрібно запустити панель настройки Windows Firewall (Панель керування \ Всі елементи панелі керування \ Брандмауер Захисника Windows \ Розширені можливості пошуку або firewall.cpl).

У секції "Правила для вихідних підключень"Створіть нове правило з наступними параметрами:

  • Тип правила: Настроюються;
  • програма: Всі програми;
  • Тип протоколу: Будь-який;
  • область: В секції "Вкажіть віддалені IP адреси, до яких застосовується дане правило" виберіть пункт "Зазначені IP адреси" -> Додати. У вікні, вкажіть IP адреси, IP підмережі або діапазон IP адрес сайтів, які потрібно заблокувати.

Натисніть OK-> Далі -> Дія: "блокувати підключення".

У вікні зі списком профілів брандмауера, до яких застосовується це правило залиште все опції. Залишилося вказати ім'я правила і зберегти його.

Після цього Брандмауер Захисника Windows блокуватиме всі з'єднання з даним сайтом. У браузері при підключенні до заблокованого сайту буде з'являтися помилка:

Unable to connect

або

Доступ в Інтернет закритий
Можливо, підключення заблокована брандмауером або антивірусним ПЗ.
ERR_NETWORK_ACCESS_DENIED

В домені 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

Рядок "The rule was parsed successfully from the store" говорить про те, що правило нове правило брандмауера успішно застосовано. Ви можете знайти його в графічному інтерфейсі Windows Firewall.

Щоб не ні перетворювати ім'я сайту в IP адреси вручну можна використовувати PowerShell командлет Resolve-DnsName для отримання IP адрес сайтів.

Resolve-DnsName "ok.ru" | Select-Object -ExpandProperty IPAddress

Таким чином ми можемо перетворити ім'я домену в IP адреси і відразу додати забороняє правило для блокування доступу до сайту:

$ IPAddress = Resolve-DnsName "ok.ru" | Select-Object -ExpandProperty IPAddress
New-NetFirewallRule -DisplayName "Block Site" -Direction Outbound -LocalPort Any -Protocol Any -Action Block -RemoteAddress $ IPAddress

Виходить, що тепер ви можете додати забороняє правило в Windows Firewall відразу для декількох сайтів:

$ SitesToBlock = "lenta.ru", "mail.ru", "facebook.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 я додав параметр -NoHostsFile, щоб не використовувати при перевірці файл hosts.

Перевіримо, що блокуючий правило для вихідного з'явилося в консолі.

Ця стаття перш за все розминка для розуму. У корпоративної мережі для обмеження доступу до сайтів потрібно використовувати фільтрацію на рівні шлюзу доступу в інтернет або проксі-сервері. Блокування доступу на рівні хостів не настільки ефективна.