Розглянемо кілька способів, які допоможуть вам заборонити доступ до окремих сайтів, 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.
Перевіримо, що блокуючий правило для вихідного з'явилося в консолі.
Ця стаття перш за все розминка для розуму. У корпоративної мережі для обмеження доступу до сайтів потрібно використовувати фільтрацію на рівні шлюзу доступу в інтернет або проксі-сервері. Блокування доступу на рівні хостів не настільки ефективна.