Блокировка интернета в МОС-12 при помощи nftables: различия между версиями
Dkirienko (обсуждение | вклад) (Заглушка для будущей статьи.) |
Dkirienko (обсуждение | вклад) (Заменил таблицу ip на таблицу inet, добавил reject на http и https) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
'''Эта статья относится только к МОС-12 и неприменима к МОС-10.''' | |||
Типичной задачей при проведении олимпиад, тестирований, экзаменов и т.д. является ограничение доступа в интернет, оставив доступ к одному или нескольким сайтам. В системе МОС-12 для этого используется служба nftables, в отличие от МОС-10, где используется [[Блокировка интернета в МОС при помощи iptables|iptables]]. | |||
Достоинства использования nftables на рабочих станциях: | |||
*Готовое решение, не требует установки дополнительного ПО. | |||
*Не требует наличия маршрутизатора, прокси-сервера и т.д, может быть реализовано в любом компьютерном классе. | |||
Недостатки такого подхода: | |||
*Фильтрация производится на каждом компьютере, поэтому требуется настройка каждого компьютера (но может быть выполнена скриптами с использованием ssh). | |||
*Фильтрация производится по IP-адресу, поэтому если разрешается доступ к какому-либо сайту, то будет открыт и доступ ко всем сайтам на том же IP-адресе. | |||
*Если у сайта изменился IP-адрес, то необходимо обновить правило фильтрации. | |||
===Запуск службы=== | |||
Служба nftables по умолчанию отключена. Она запускается командой | |||
# systemctl start nftables | |||
Чтобы служба запускалась автоматически при старте компьютера выполните команду | |||
# systemctl enable nftables | |||
===Конфигурационные файлы=== | |||
Основным конфигурационным файлом службы является /etc/sysconfig/nftables.conf. По умолчанию он содержит несколько закомментированных строк с директивой include, подключающей другие конфигурационные файлы. | |||
Вы можете вписать приведённые ниже настройки в этот файл или создать отдельный файл, подключаемый из файла nftables.conf при помощи инструкции include. | |||
Чтобы применить новые настройки после изменения конфигурации нужно перезапустить службу: | |||
# systemctl restart nftables | |||
===Настройка блокировки интернета=== | |||
Допустим, мы хотим применить следующие правила. | |||
*Ограничить доступ к сети интернет только одним сайтом, например, olympiads.ru | |||
*Также необходимо обеспечить работу службы DNS, чтобы браузер и система могли определить IP-адрес данного сайта. DNS использует порт 53. | |||
*Снаружи оставим доступ к данному компьютеру по SSH, чтобы сохранить возможность удалённого администрирования. SSH использует порт 22. | |||
*Также оставим возможность использования протокола ICMP для работы ping, например, чтобы можно было "пинговать" наш компьютер. | |||
*Разрешим сетевые соединения с этим же компьютером (на loopback-интерфейс), что нужно для работы некоторых приложений. | |||
Определим адрес сайта olympiads.ru при помощи команды host. Обратите внимание, у одного доменного имени может быть несколько IP-адресов (как, например, у google.com), тогда нужно будет добавить все эти IP-адреса в конфиг. | |||
# host olympiads.ru | |||
olympiads.ru has address 194.58.88.173 | |||
olympiads.ru mail is handled by 10 mf1.nic.ru. | |||
Запишем в файл '''/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 порт (для управления компьютером по 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 | |||
# Разрешаем соединения на указанный адрес. Добавляйте аналогичные строки с другими адресами при необходимости | |||
ip daddr 194.58.88.173 accept | |||
# Разрешаем соединения на порт 53 UDP для работы DNS | |||
udp dport 53 accept | |||
# Разрешаем соединения на этот же компьютер (lo-интерфейс) | |||
oif lo accept | |||
# Это правило делает reject вместо drop на все остальные соединения | |||
# на порт 80 (http) и 443 (https), в результате | |||
# браузер не будет ждать загрузки недоступных ресурсов | |||
tcp dport 80 reject | |||
tcp dport 443 reject | |||
} | |||
} | |||
Внесите изменения в этот файл по мере необходимости | |||
Если необходимо разрешить обнаруживать локальные сетевые ресурсы при помощи службы [[Avahi]] (например, включить ресолвинг имён из домена .local в IP-адреса), необходимо разрешить UDP-запросы на порт 5353. Подробней в статье [[Avahi]]. | |||
Для того, чтобы изменения вступили в силу, нужно перезагрузить компьютер или перезапустить поддержку сети: | |||
# systemctl restart nftables | |||
В любой момент вы можете проверить действующие в настоящий момент правила при помощи команды | |||
# nft list ruleset | |||
===Отключение блокировки интернета=== | |||
Чтобы отключить блокировку, можно просто остановить и отключить автозапуск nftables | |||
# systemctl stop nftables | |||
# systemctl disable nftables | |||
[[Категория:МОС12]] |
Текущая версия на 22:52, 30 октября 2024
Эта статья относится только к МОС-12 и неприменима к МОС-10.
Типичной задачей при проведении олимпиад, тестирований, экзаменов и т.д. является ограничение доступа в интернет, оставив доступ к одному или нескольким сайтам. В системе МОС-12 для этого используется служба nftables, в отличие от МОС-10, где используется iptables.
Достоинства использования nftables на рабочих станциях:
- Готовое решение, не требует установки дополнительного ПО.
- Не требует наличия маршрутизатора, прокси-сервера и т.д, может быть реализовано в любом компьютерном классе.
Недостатки такого подхода:
- Фильтрация производится на каждом компьютере, поэтому требуется настройка каждого компьютера (но может быть выполнена скриптами с использованием ssh).
- Фильтрация производится по IP-адресу, поэтому если разрешается доступ к какому-либо сайту, то будет открыт и доступ ко всем сайтам на том же IP-адресе.
- Если у сайта изменился IP-адрес, то необходимо обновить правило фильтрации.
Запуск службы
Служба nftables по умолчанию отключена. Она запускается командой
# systemctl start nftables
Чтобы служба запускалась автоматически при старте компьютера выполните команду
# systemctl enable nftables
Конфигурационные файлы
Основным конфигурационным файлом службы является /etc/sysconfig/nftables.conf. По умолчанию он содержит несколько закомментированных строк с директивой include, подключающей другие конфигурационные файлы.
Вы можете вписать приведённые ниже настройки в этот файл или создать отдельный файл, подключаемый из файла nftables.conf при помощи инструкции include.
Чтобы применить новые настройки после изменения конфигурации нужно перезапустить службу:
# systemctl restart nftables
Настройка блокировки интернета
Допустим, мы хотим применить следующие правила.
- Ограничить доступ к сети интернет только одним сайтом, например, olympiads.ru
- Также необходимо обеспечить работу службы DNS, чтобы браузер и система могли определить IP-адрес данного сайта. DNS использует порт 53.
- Снаружи оставим доступ к данному компьютеру по SSH, чтобы сохранить возможность удалённого администрирования. SSH использует порт 22.
- Также оставим возможность использования протокола ICMP для работы ping, например, чтобы можно было "пинговать" наш компьютер.
- Разрешим сетевые соединения с этим же компьютером (на loopback-интерфейс), что нужно для работы некоторых приложений.
Определим адрес сайта olympiads.ru при помощи команды host. Обратите внимание, у одного доменного имени может быть несколько IP-адресов (как, например, у google.com), тогда нужно будет добавить все эти IP-адреса в конфиг.
# host olympiads.ru olympiads.ru has address 194.58.88.173 olympiads.ru mail is handled by 10 mf1.nic.ru.
Запишем в файл /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 порт (для управления компьютером по 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 # Разрешаем соединения на указанный адрес. Добавляйте аналогичные строки с другими адресами при необходимости ip daddr 194.58.88.173 accept # Разрешаем соединения на порт 53 UDP для работы DNS udp dport 53 accept # Разрешаем соединения на этот же компьютер (lo-интерфейс) oif lo accept # Это правило делает reject вместо drop на все остальные соединения # на порт 80 (http) и 443 (https), в результате # браузер не будет ждать загрузки недоступных ресурсов tcp dport 80 reject tcp dport 443 reject } }
Внесите изменения в этот файл по мере необходимости
Если необходимо разрешить обнаруживать локальные сетевые ресурсы при помощи службы Avahi (например, включить ресолвинг имён из домена .local в IP-адреса), необходимо разрешить UDP-запросы на порт 5353. Подробней в статье Avahi.
Для того, чтобы изменения вступили в силу, нужно перезагрузить компьютер или перезапустить поддержку сети:
# systemctl restart nftables
В любой момент вы можете проверить действующие в настоящий момент правила при помощи команды
# nft list ruleset
Отключение блокировки интернета
Чтобы отключить блокировку, можно просто остановить и отключить автозапуск nftables
# systemctl stop nftables # systemctl disable nftables