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

Материал из IT в школе
Версия от 20:37, 4 октября 2024; Dkirienko (обсуждение | вклад) (Правка настроек под Windows)
Перейти к навигацииПерейти к поиску


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

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

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

  • Для всех соединений, находящихся в состоянии Established или Related, то есть для уже открытых соединений.
  • DNS-протокол: TCP и UDP, порт 53.
  • ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.
  • Входящие соединения по протоколу TCP на порт 22 - если используется ssh-сервер, запущенный на компьютере, для удалённого управления им.
  • Все соединения на localhost, для работы локальных приложений.

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

Список открытых хостов
Имя хоста 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.83 Необходим для работы тестирующей системы МЭШ
login.mos.ru 212.11.153.6 Необходим для авторизации в МЭШ
vos.olimpiada.ru 185.178.208.183 Сайт ВсОШ в Москве
всош.цпм.рф 185.30.228.25 Сайт ВсОШ в Москве
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 можно записать в файл /etc/sysconfig/nftables.conf следующий набор правил:

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

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

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

        # Принимаем пакеты на 22 порт (для управления компьютером по ssh)
        tcp dport 22 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 для работы DNS
        tcp dport 53 accept
        udp dport 53 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 212.11.153.6 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

        # 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

    }
}

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

# systemctl enable nftables
# systemctl start nftables

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

# systemctl disable nftables
# systemctl stop nftables

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

В Windows 10 будем использовать стандартный файрвол Windows Defender ("Защитник 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

# Разрешаем трафик на 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 212.11.153.6
New-NetFirewallRule -DisplayName "Olymp Allow login.mos.ru" -Direction Inbound -Action Allow -RemoteAddress 212.11.153.6
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" на правильный путь к скрипту).

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

Его также нужно запускать с правами администратора.