Блокировка интернета при проведении регионального этапа ВсОШ по информатике

Материал из IT в школе
Версия от 02:05, 18 ноября 2024; Dkirienko (обсуждение | вклад) (Добавлена информация и настройке ufw)
Перейти к навигацииПерейти к поиску


Эта статья создана для помощи организаторам регионального этапа всероссийской олимпиады школьников по информатике в настройке фильтрации доступа в интернет во время олимпиады.

При проведении регионального этапа ВсОШ по информатике, в соответствии с требованиями к проведению регионального этапа, доступ участников в интернет должен быть ограничен сайтом тестирующей системы.

Удобнее всего осуществлять фильтрацию на сетевом оборудовании (роутеры, сервера организации), тогда настройки фильтрации производятся централизованно в одном месте. В этом случае фильтрация самостоятельно настраивается специалистами организации в соответствии с правилами, изложенными в этой статье.

В случаях, когда фильтрация доступа в интернет на сетевом оборудовании невозможна, фильтрация осуществляется настройкой файрвола операционной системы на каждом компьютере участника.


После настройки фильтрации необходимо проверить, что данные сайты открываются в браузере, другие сайты (например, ya.ru, vk.com, gmail.com, web.telegram.org) - не открываются.

Основные правила

Настройка фильтрации осуществляется под учетной записью администратора. Участники олимпиады должны использовать непривилегированную учётную запись, исключающую возможность изменения настроек файрвола.

На каждом компьютере должен быть открыт доступ:

  • DNS-протокол: UDP, порт 53 (для входящих соединений - UDP и TCP, порт 53).
  • NTP-протокол: UDP порт 123.
  • ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.
  • Все соединения на localhost, для работы локальных приложений.

Также может быть открыт доступ для работы других локальных сервисов, если это необходимо для функционирования сети или администрирования компьютеров. Например, может быть открыт доступ к локальным компьютерам по протоколу ssh (порт 22), если на компьютере участников запущен ssh-сервер для администрирования (исключающий возможность подключения участников по протоколу ssh), или UDP порт 5353 для работы протокола mDNS (zeroconf).

Также должен быть открыт доступ к сайтам тестирующих систем (рекомендуется оставить только ту тестирующую систему, которая будет использоваться в регионе).

Список открытых хостов
Тестирующая система Имя хоста IP-адрес
Яндекс-контест ext.contest.yandex.ru

ext.contest.yandex.com

87.250.250.200

2a02:6b8::360

clck.yandex.ru

clck.yandex.com

77.88.21.14

87.250.250.14

87.250.251.14

93.158.134.14

213.180.193.14

213.180.204.14

2a02:6b8::14

yastatic.net

yandex.st  

178.154.131.215

178.154.131.216

178.154.131.217

2a02:6b8:20::215

Codeforces *.contest.codeforces.com 95.163.252.68

После настройки необходимо проверить, что сайт тестирующей системы доступен участникам. Примеры сайтов для проверки: ext.contest.yandex.ru (Яндекс-контест), reg2025.contest.codeforces.com (Codeforces).

Все прочие сайты должны быть заблокированы. Примеры сайтов для проверки (они должны быть заблокированы): codeforces.com, contest.yandex.ru, ya.ru, mail.ru, google.com, vk.com, web.telegram.org

Желательно проверить, что доступ заблокирован не только в браузере, но и в других приложениях, например, невозможно подключение наружу по протоколу ssh (пример команды для проверки: ssh sshtron.zachlatta.com).

Все настройки фильтрации можно сделать конфигурационным скриптом, запускаемом на компьютере участника, в соответствии с инструкциями ниже.

Настройка Windows 10 и Windows 11

В Windows можно использовать стандартный файрвол операционной системы.

Для этого нужно создать powershell-скрипт следующего содержания.

Сохраните этот скрипт в файле с расширением ps1, например, block-internet.ps1.

Этот скрипт нужно запускать с правами администратора. Для этого нужно запустить PowerShell с правами администратора, например, найти в меню "Пуск" Windows PowerShell, сделать правый клик мышью и выбрать "Запуск от имени администратора". Затем в консоли PowerShell ввести полный путь и имя этого скрипта. Участникам олимпиады права администратора компьютера должны быть недоступны.

Можно создать ярлык, чтобы скрипт всегда запускался от администратора. Для этого нужно создать новый ярлык, например, на рабочем столе: правый клик мышью - Создать - Ярлык.

В поле "Укажите расположение объекта" нужно вписать (заменив "C:\users\student\block-internet.ps1" на правильный путь к скрипту). Параметр -NoExit можно убрать, тогда окно PowerShell будет закрываться после исполнения скрипта.

powershell.exe -ExecutionPolicy Bypass -NoExit -File "C:\users\student\block-internet.ps1"

Затем откройте свойства ярлыка, нажмите "Дополнительно" и поставьте галку "Запуск от имени администратора".

# Устанавливаем policy для пакетов по умолчанию - Block
Set-NetFirewallProfile -DefaultInboundAction Block
Set-NetFirewallProfile -DefaultOutboundAction Block

# Разрешаем весь трафик для службы dnscache
New-NetFirewallRule -DisplayName "Olymp Allow dnscache service" -Direction Outbound -Action Allow -Service "dnscache"
New-NetFirewallRule -DisplayName "Olymp Allow dnscache service" -Direction Inbound -Action Allow -Service "dnscache"

# Открываем порт 53 для работы DNS
New-NetFirewallRule -DisplayName "Olymp Allow DNS Outbound" -Direction Outbound -Action Allow -Protocol UDP -RemotePort 53
New-NetFirewallRule -DisplayName "Olymp Allow DNS Inbound" -Direction Inbound -Action Allow -Protocol UDP -RemotePort 53
New-NetFirewallRule -DisplayName "Olymp Allow DNS Inbound TCP" -Direction Inbound -Action Allow -Protocol TCP -RemotePort 53

# Открываем порт 123 UDP для работы NTP
New-NetFirewallRule -DisplayName "Olymp Allow NTP Outbound" -Direction Outbound -Action Allow -Protocol UDP -RemotePort 123
New-NetFirewallRule -DisplayName "Olymp Allow NTP Inbound" -Direction Inbound -Action Allow -Protocol UDP -RemotePort 123

# Разрешаем трафик на localhost
New-NetFirewallRule -DisplayName "Olymp Allow Localhost Inbound" -Direction Inbound -Action Allow -RemoteAddress 127.0.0.1
New-NetFirewallRule -DisplayName "Olymp Allow Localhost Outbound" -Direction Outbound -Action Allow -RemoteAddress 127.0.0.1

# Разрешаем ICMP (ping)
New-NetFirewallRule -DisplayName "Olymp Allow ICMP Outbound" -Direction Outbound -Action Allow -Protocol ICMPv4
New-NetFirewallRule -DisplayName "Olymp Allow ICMP Inbound" -Direction Inbound -Action Allow -Protocol ICMPv4

# Разрешаем доступ к сайтам тестирующей системы
New-NetFirewallRule -DisplayName "Olymp Allow ext.contest.yandex.ru" -Direction Outbound -Action Allow -RemoteAddress 87.250.250.200,2a02:6b8::360
New-NetFirewallRule -DisplayName "Olymp Allow ext.contest.yandex.ru" -Direction Inbound -Action Allow -RemoteAddress 87.250.250.200,2a02:6b8::360
New-NetFirewallRule -DisplayName "Olymp Allow clck.yandex.ru" -Direction Outbound -Action Allow -RemoteAddress 77.88.21.14,87.250.250.14,87.250.251.14,93.158.134.14,213.180.193.14,213.180.204.14,2a02:6b8::14
New-NetFirewallRule -DisplayName "Olymp Allow clck.yandex.ru" -Direction Inbound -Action Allow -RemoteAddress 77.88.21.14,87.250.250.14,87.250.251.14,93.158.134.14,213.180.193.14,213.180.204.14,2a02:6b8::14
New-NetFirewallRule -DisplayName "Olymp Allow yastatic.net" -Direction Outbound -Action Allow -RemoteAddress 178.154.131.215,178.154.131.216,178.154.131.217,2a02:6b8:20::215
New-NetFirewallRule -DisplayName "Olymp Allow yastatic.net" -Direction Inbound -Action Allow -RemoteAddress 178.154.131.215,178.154.131.216,178.154.131.217,2a02:6b8:20::215
New-NetFirewallRule -DisplayName "Olymp Allow .contest.codeforces.com" -Direction Outbound -Action Allow -RemoteAddress 95.163.252.68
New-NetFirewallRule -DisplayName "Olymp Allow .contest.codeforces.com" -Direction Inbound -Action Allow -RemoteAddress 95.163.252.68

Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт, который удаляет все установленные правила и сбрасывает правила для обработки пакетов "по умолчанию".

Set-NetFirewallProfile -DefaultInboundAction NotConfigured
Set-NetFirewallProfile -DefaultOutboundAction NotConfigured
Get-NetFirewallRule | Where-Object { $_.DisplayName -like "Olymp*" } | Remove-NetFirewallRule

Исполнение этого скрипта снимает все установленные ограничения. Его также нужно запускать с правами администратора, рекомендуется создать на рабочем столе два ярлыка для запуска под администратором - ддя блокировки и разблокировки интернета.

Настройка Linux

В операционных системах на базе GNU/Linux необходимо использовать системный файрвол iptables или nftables в зависимости от дистрибутива. Точные инструкции для Linux не приводятся, так как конфигурационные файлы различаются в разных дистрибутивах. Можно использовать следующие статьи для примеров подобной настройки:

Блокировка интернета при проведении ВсОШ в Москве - используется nftables для операционной системы МОС-12, применимо также для дистрибутивов семейства Роса.

Блокировка интернета в МОС-12 при помощи nftables - также про настройку nftables в МОС-12 и дистрибутивах семейства Роса.

Блокировка интернета в МОС при помощи iptables - используется iptables, применимо для дистрибутивов семейства Альт (Альт Образование, Альт рабочая станция, Simply linux и т.д.).

Настройка ufw в Ubuntu

В Ubuntu и дистрибутивах, построенных на его основе, а также в ряде других дистрибутивов (Astra Linux) есть простая утилита ufw для настройки файрвола. Основные особенности использования ufw:

  • Не нужно создавать конфигурационные файлы. Каждый вызов утилиты ufw может создавать отдельное правило, для задания нескольких правил нужно несколько раз вызвать утилиту ufw.
  • Правила сохраняются между перезапусками. Созданная конфигурация запоминается, не нужно изучать конфигурационные файлы, сохранение происходит автоматически.
  • Для отладки и тиражирования конфигурации удобно создать скрипт, в который запишем все нужные вызовы ufw.
  • Команда ufw reset сбрасывает все настройки и отключает файрвол.
  • Команда ufw enable включает файрвол.
  • Команда ufw status verbose выводит текущее состояние файрвола.

Вот пример скрипта для создания всех необходимых правил фильтрации. Его нужно запускать от пользователя root или через sudo

#!/bin/bash

ufw --force reset

ufw enable

# Добавьте следующую строчку при необходимости подключения к компьютеру по ssh для управления им 
# ufw allow ssh 

# ntp
ufw allow ntp 
ufw allow out ntp

# dns
ufw allow domain/udp
ufw allow out domain/udp

# Локальные соединения
ufw allow from 127.0.0.1/8
ufw allow out to 127.0.0.1/8

# Сюда вписываем сайты, к которым должен быть открыт доступ.
ufw allow out to 87.250.250.200
ufw allow out to 2a02:6b8::360
ufw allow out to 77.88.21.14
ufw allow out to 87.250.250.14
ufw allow out to 87.250.251.14
ufw allow out to 93.158.134.14
ufw allow out to 213.180.193.14
ufw allow out to 213.180.204.14
ufw allow out to 2a02:6b8::14
ufw allow out to 178.154.131.215
ufw allow out to 178.154.131.216
ufw allow out to 178.154.131.217
ufw allow out to 2a02:6b8:20::215
ufw allow out to 95.163.252.68

# Делаем reject на остальные хосты при подключении по http и https
ufw reject out http
ufw reject out https

# Политика по умолчанию - отклонять пакеты
ufw default deny incoming
ufw default deny outgoing

Для отключения фильтрации необходимо выполнить команду

ufw --force reset