Блокировка интернета в МОС-12 при помощи nftables: различия между версиями

Материал из IT в школе
Перейти к навигацииПерейти к поиску
(Заглушка для будущей статьи.)
 
(Заменил таблицу 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