Блокировка интернета при проведении ВсОШ в Москве

Материал из IT в школе
Перейти к навигацииПерейти к поиску


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

Эта статья описывает необходимые настройки фильтрации интернета при проведении муниципального этапов всероссийской олимпиады школьников в Москве. В статье описаны настройки для систем МОС-12 и Windows. Фильтрацию можно реализовать на МОС-10 используя правила из этой статьи и инструкцию Блокировка интернета в МОС при помощи iptables.

Список необходимых хостов из этой статьи может дополняться и меняться. Перед муниципальным этапом необходимо использовать актуальный список.

До проведения муниципального этапа рекомендуется провести проверку фильтрации при проведении любого школьного этапа ВсОШ, а также при проведении школьного этапа ВсОШ по информатике в Москве.

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

Список необходимых разрешённых хостов

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

  • Для всех соединений, находящихся в состоянии Established или Related, то есть для уже открытых соединений.
  • DNS-протокол: UDP, порт 53.
  • mDNS-протокол (zeroconf, Avahi): UDP порт 5353
  • NTP-протокол: UDP порт 123.
  • ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.
  • Входящие соединения по протоколу TCP на порт 22 - если используется ssh-сервер, запущенный на компьютере, для удалённого управления.
  • Входящие соединения по протоколу TCP на порты 11100, 11200, 11300, 11400 - если используется Veyon для удалённого управления.
  • Все соединения на localhost, для работы локальных приложений.

В случае использования средств удалённого управления (ssh, Veyon) они не должны быть доступны участникам для подключения к компьютерам других участников.

Также должны быть разрешены соединения со следующими хостами.

Список открытых хостов
Имя хоста IP-адрес Зачем нужен
10.0.0.0/8 Локальная сеть ДОНМ для доступа ко всем ресурсам, для простоты конфигурирования
school.mos.ru 94.79.51.81

94.79.51.82

94.79.51.83

Необходим для работы тестирующей системы МЭШ и "Магазина приложений" МОС
uchebnik.mos.ru 94.79.51.81

94.79.51.82

94.79.51.83

Необходим для работы тестирующей системы МЭШ
login.mos.ru 94.79.51.169

94.79.51.170

94.79.51.171

Необходим для авторизации в МЭШ. Сам сайт login.mos.ru открывать не нужно, он делает редирект на mos.ru
online.olimpiada.ru 46.235.186.69

46.235.188.68

78.41.110.69

93.93.88.23

212.193.144.0/20

Резервная тестирующая система
vos.olimpiada.ru 185.178.208.183 Сайт ВсОШ в Москве
всош.цпм.рф 185.30.228.25 Сайт ВсОШ в Москве (xn--b1ayi3a.xn--l1afu.xn--p1ai)
olympiads.ru 194.58.88.173 Сайт городской предметно-методической комиссии ВсОШ по информатике
mc.yandex.ru 87.250.250.119

87.250.251.119

93.158.134.119

77.88.21.119

Метрика яндекса, если заблокировать, то браузер будет долго загружать страницу
os.mos.ru

repo.os.mos.ru

37.230.149.17 Репозитории МОС, для установки пакетов, если возникнет необходимость доставить приложения.
marketplace.visualstudio.com 13.107.42.18 Магазин расширений для VSCode
ms-vscode.gallerycdn.vsassets.io 68.232.34.200 Необходим для скачивания расширений для VSCode
ms-vscode.gallery.vsassets.io 13.107.6.175 Необходим для скачивания расширений для VSCode
az764295.vo.msecnd.net 152.199.19.160 Необходим для скачивания расширений для VSCode
it-help-school.ru 91.221.70.4 Этот сайт, для доступа к техническим инструкциям

Настройка МОС-12

Подробности о настройке файрвола в МОС-12 в статье Блокировка интернета в МОС-12 при помощи nftables

В МОС-12 можно записать в файл /etc/sysconfig/nftables.conf следующий набор правил:

# Эта команда сбрасывает все правила, иначе новые правила будут добавляться к ранее установленным
flush ruleset

table inet filter {
    chain input {
        # Правила обработки входящих пакетов
        # По умолчанию ставим правило drop для пакетов
        type filter hook input priority 0; policy drop;

        # Принимаем пакеты всех установленных соединений
        ct state established,related accept

        # Принимаем пакеты на 22 порт TCP для управления компьютером по ssh
        tcp dport 22 accept

        # Разрешаем соединения на порт 53 TCP и UDP для работы DNS
        tcp dport 53 accept
        udp dport 53 accept

        # Принимаем пакеты на 5353 порт UDP для работы mDNS (avahi)
        udp dport 5353 accept

        # Принимаем пакеты на порты 11100, 11200, 11300, 11400 TCP для управления компьютером по Veyon
        tcp dport 11100 accept
        tcp dport 11200 accept
        tcp dport 11300 accept
        tcp dport 11400 accept

        # Принимаем входящий ping
        icmp type echo-request accept

        # Принимаем все пакеты с этого компьютера (на lo-интерфейс)
        iif lo accept
    }

    chain output {
        # Правила обработки исходящих пакетов
        # По умолчанию ставим правило drop для пакетов
        type filter hook output priority 0; policy drop;

        # Разрешаем все установленные соединения
        ct state established,related accept

        # Разрешаем соединения на порт 53 UDP для работы DNS
        udp dport 53 accept

        # Разрешаем соединения на порт 5353 UDP для работы mDNS
        udp dport 5353 accept

        # Разрешаем соединения на UDP порт 123 для работы NTP
        udp dport 123 accept

        # Разрешаем соединения на этот же компьютер (lo-интерфейс)
        oif lo accept

        # Далее идёт белый список сайтов, к которым должен быть открыт доступ

        # Вся локальная сеть 10.*.*.* для доступа к ресурсам МЭШ из сети ДОНМ, для простоты целиком
        ip daddr 10.0.0.0/8 accept

        # school.mos.ru, uchebnik.mos.ru
        ip daddr 94.79.51.81 accept
        ip daddr 94.79.51.82 accept
        ip daddr 94.79.51.83 accept

        # login.mos.ru
        ip daddr 94.79.51.169 accept
        ip daddr 94.79.51.170 accept
        ip daddr 94.79.51.171 accept

        # mc.yandex.ru
        ip daddr 87.250.250.119 accept
        ip daddr 87.250.251.119 accept
        ip daddr 93.158.134.119 accept
        ip daddr 77.88.21.119 accept

        # online.olimpiada.ru
        ip daddr 46.235.186.69 accept
        ip daddr 46.235.188.68 accept
        ip daddr 78.41.110.69 accept
        ip daddr 93.93.88.23 accept
        ip daddr 212.193.144.0/20 accept

        # vos.olimpiada.ru
        ip daddr 185.178.208.183 accept

        # всош.цпм.рф
        ip daddr 185.30.228.25 accept

        # olympiads.ru
        ip daddr 194.58.88.173 accept

        # os.mos.ru, repo.os.mos.ru
        ip daddr 37.230.149.17 accept
        
        # marketplace.visualstudio.com
        ip daddr 13.107.42.18 accept

        # ms-vscode.gallerycdn.vsassets.io
        ip daddr 68.232.34.200 accept

        # ms-vscode.gallery.vsassets.io
        ip daddr 13.107.6.175 accept
        
        # az764295.vo.msecnd.net
        ip daddr 152.199.19.160 accept

        # it-help-school.ru
        ip daddr 91.221.70.4 accept

        # Это правило делает reject на все остальные соединения
        # на порт 80 (http) и 443 (https), в результате
        # браузер не будет ждать загрузки недоступных ресурсов
        tcp dport 80 reject
        tcp dport 443 reject
    }
}

Затем выполните команды для включения файрвола под root

# systemctl enable nftables
# systemctl start nftables

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

# systemctl disable nftables
# systemctl stop nftables

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

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

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

# Устанавливаем 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 Outbound TCP" -Direction Outbound -Action Allow -Protocol TCP -RemotePort 53
New-NetFirewallRule -DisplayName "Olymp Allow DNS Inbound TCP" -Direction Inbound -Action Allow -Protocol TCP -RemotePort 53

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

# Открываем порт 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

# Разрешаетм доступ к локальной сети 10.0.0.0/8 для доступа к ресурсам МЭШ из сети ДОНМ
New-NetFirewallRule -DisplayName "Olymp Allow Local Network" -Direction Outbound -Action Allow -RemoteAddress 10.0.0.0/8
New-NetFirewallRule -DisplayName "Olymp Allow Local Network" -Direction Inbound -Action Allow -RemoteAddress 10.0.0.0/8

# Разрешаем доступ к конкретным сайтам
New-NetFirewallRule -DisplayName "Olymp Allow school.mos.ru" -Direction Outbound -Action Allow -RemoteAddress 94.79.51.81,94.79.51.82,94.79.51.83
New-NetFirewallRule -DisplayName "Olymp Allow school.mos.ru" -Direction Inbound -Action Allow -RemoteAddress 94.79.51.81,94.79.51.82,94.79.51.83
New-NetFirewallRule -DisplayName "Olymp Allow login.mos.ru" -Direction Outbound -Action Allow -RemoteAddress 94.79.51.169,94.79.51.170,94.79.51.171
New-NetFirewallRule -DisplayName "Olymp Allow login.mos.ru" -Direction Inbound -Action Allow -RemoteAddress 94.79.51.169,94.79.51.170,94.79.51.171
New-NetFirewallRule -DisplayName "Olymp Allow online.olimpiada.ru" -Direction Outbound -Action Allow -RemoteAddress 46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20
New-NetFirewallRule -DisplayName "Olymp Allow online.olimpiada.ru" -Direction Inbound -Action Allow -RemoteAddress 46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20
New-NetFirewallRule -DisplayName "Olymp Allow vos.olimpiada.ru" -Direction Outbound -Action Allow -RemoteAddress 185.178.208.183 
New-NetFirewallRule -DisplayName "Olymp Allow vos.olimpiada.ru" -Direction Inbound -Action Allow -RemoteAddress 185.178.208.183
New-NetFirewallRule -DisplayName "Olymp Allow vsosh.cpm.rf" -Direction Outbound -Action Allow -RemoteAddress 185.30.228.25
New-NetFirewallRule -DisplayName "Olymp Allow vsosh.cpm.rf" -Direction Inbound -Action Allow -RemoteAddress 185.30.228.25
New-NetFirewallRule -DisplayName "Olymp Allow olympiads.ru" -Direction Outbound -Action Allow -RemoteAddress 194.58.88.173
New-NetFirewallRule -DisplayName "Olymp Allow olympiads.ru" -Direction Inbound -Action Allow -RemoteAddress 194.58.88.173
New-NetFirewallRule -DisplayName "Olymp Allow mc.yandex.ru" -Direction Outbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119
New-NetFirewallRule -DisplayName "Olymp Allow mc.yandex.ru" -Direction Inbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119
New-NetFirewallRule -DisplayName "Olymp Allow marketplace.visualstudio.com" -Direction Outbound -Action Allow -RemoteAddress 13.107.42.18
New-NetFirewallRule -DisplayName "Olymp Allow marketplace.visualstudio.com" -Direction Inbound -Action Allow -RemoteAddress 13.107.42.18
New-NetFirewallRule -DisplayName "Olymp Allow ms-vscode.gallerycdn.vsassets.io" -Direction Outbound -Action Allow -RemoteAddress 68.232.34.200
New-NetFirewallRule -DisplayName "Olymp Allow ms-vscode.gallerycdn.vsassets.io" -Direction Inbound -Action Allow -RemoteAddress 68.232.34.200
New-NetFirewallRule -DisplayName "Olymp Allow ms-vscode.gallery.vsassets.io" -Direction Outbound -Action Allow -RemoteAddress 13.107.6.175
New-NetFirewallRule -DisplayName "Olymp Allow ms-vscode.gallery.vsassets.io" -Direction Inbound -Action Allow -RemoteAddress 13.107.6.175
New-NetFirewallRule -DisplayName "Olymp Allow az764295.vo.msecnd.net" -Direction Outbound -Action Allow -RemoteAddress 152.199.19.160
New-NetFirewallRule -DisplayName "Olymp Allow az764295.vo.msecnd.net" -Direction Inbound -Action Allow -RemoteAddress 152.199.19.160
New-NetFirewallRule -DisplayName "Olymp Allow it-help-school.ru" -Direction Outbound -Action Allow -RemoteAddress 91.221.70.4
New-NetFirewallRule -DisplayName "Olymp Allow it-help-school.ru" -Direction Inbound -Action Allow -RemoteAddress 91.221.70.4

Сохраните этот скрипт в файле с расширением 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"

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

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

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

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