Блокировка интернета при проведении ВсОШ в Москве
Эта статья описывает необходимые настройки фильтрации интернета при проведении школьного и муниципального этапов всероссийской олимпиады школьников в Москве, если такая фильтрация осуществляется на каждом компьютере при помощи файрвола на каждом компьютере. В статье описаны настройки для систем МОС-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-скрипта следующего содержания.
# Allow all established connections
New-NetFirewallRule -DisplayName "Olymp Allow Established Outbound Connections" -Direction Outbound -Action Allow -Enabled True -State EstablishedAndRelated
New-NetFirewallRule -DisplayName "Olymp Allow Established Inbound Connections" -Direction Inbound -Action Allow -Enabled True -State EstablishedAndRelated
# Allow DNS protocol (port 53) both Inbound and Outbound
New-NetFirewallRule -DisplayName "Olymp Allow DNS Outbound" -Direction Outbound -Action Allow -Protocol UDP -LocalPort 53
New-NetFirewallRule -DisplayName "Olymp Allow DNS Inbound" -Direction Inbound -Action Allow -Protocol UDP -LocalPort 53
New-NetFirewallRule -DisplayName "Olymp Allow DNS Outbound TCP" -Direction Outbound -Action Allow -Protocol TCP -LocalPort 53
New-NetFirewallRule -DisplayName "Olymp Allow DNS Inbound TCP" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 53
# Allow access to localhost applications (127.0.0.1)
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
# Allow ICMP (ping) queries, both incoming and outgoing
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
# Open access to the local network 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
# Allow access to specific hosts
New-NetFirewallRule -DisplayName "Olymp Allow Host olympiads.ru" -Direction Outbound -Action Allow -RemoteAddress 194.58.88.173
New-NetFirewallRule -DisplayName "Olymp Allow Host olympiads.ru" -Direction Inbound -Action Allow -RemoteAddress 194.58.88.173
New-NetFirewallRule -DisplayName "Olymp Allow Host marketplace.visualstudio.com" -Direction Outbound -Action Allow -RemoteAddress 13.107.42.18
New-NetFirewallRule -DisplayName "Olymp Allow Host marketplace.visualstudio.com" -Direction Inbound -Action Allow -RemoteAddress 13.107.42.18
# Block all other outgoing traffic
New-NetFirewallRule -DisplayName "Olymp Block All Other Outbound Traffic" -Direction Outbound -Action Block -RemoteAddress Any
# Block all other incoming traffic
New-NetFirewallRule -DisplayName "Olymp Block All Other Inbound Traffic" -Direction Inbound -Action Block -RemoteAddress Any
Сохраните этот скрипт в файле с расширением ps1, например, block-internet.ps1, запустите его под администратором. Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать только эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт.
Get-NetFirewallRule | Where-Object { $_.DisplayName -like "Olymp*" } | Remove-NetFirewallRule