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

Материал из IT в школе
Версия от 15:51, 4 октября 2024; Dkirienko (обсуждение | вклад) (→‎Настройка Windows 10 и Windows 11: Правка скриптов настройки для 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

Необходим для работы тестирующей системы МЭШ и "Магазина приложений" МОС
olympiads.ru 194.58.88.173 Сайт городской предметно-методической комиссии ВсОШ по информатике
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

        # olympiads.ru
        ip daddr 194.58.88.173 accept

        # Репозитории МОС для возможности установки пакетов
        # os.mos.ru, repo.os.mos.ru
        ip daddr 37.230.149.17 accept
        
        # school.mos.ru
        ip daddr 94.79.51.81 accept
        ip daddr 94.79.51.82 accept
        ip daddr 94.79.51.83 accept

        # Магазин расширений для vscode
        # 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 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 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

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

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