Домашнее задание №6
Задание выполняется на виртуальных машинах. После выполнения нужно записаться в очередь на проверку. Дедлайн – 01:00 AM 24 декабря (ночь перед занятием).
Настройка файервола nftables
В Debian для фильтрации пакетов используется nftables – подсистема ядра Linux, заменившая устаревшие iptables/arptables/ebtables.
Её настройка осуществляется с помощью утилиты nft, которая имеет собственный язык команд. Для удобства использования, в systemd присутствует юнит nftables.service, который при активации выполняет команды nft, записанные в файл /etc/nftables, который, таким образом, является одновременно файлом конфигурации системного файервола и сценарием на языке команд nft.
По умолчанию systemd-сервис nftables не активен, а файл /etc/nftables содержит только команду сброса старых правил (она необходима, чтобы при перезапуске сервиса правила изменялись, а не накапливались) и заготовки пустых цепочек для входящих, исходящих и пересылаемых пакетов.
Ваша задача – записать в файл команды, которые добавят описанные ниже правила фильтрации пакетов, и активировать сервис файервола (не только стартовать, но и добавить в автозагрузку).
ВНИМАНИЕ! Удаленная настройка файервола очень опасна, вы можете лишить себя сетевого доступа к узлу, внеся неверную конфигурацию.
Для того, чтобы себя обезопасить, перед применением новых правил можно запустить процесс, который автоматически отключит файервол через некоторое время.
Скрипт советую запускать в фоновом режиме с игнорированием сигналов SIGHUP, иначе он может быть прерван при потере соединения.
Правила фильтрации пакетов
Вам надо будет настроить фильтрацию только входящих пакетов для семейств адресов IPv4/IPv6, используя семейство адресов inet. Других правил фильтрации в конфигурации быть не должно. Пустые цепи для исходящих и пересылаемых пакетов можете оставить или удалить.
Нужно настроить следующие правила.
Принимать все пакеты на интерфейсе loopback (обычно не следует ограничивать сетевое общение процессов в пределах узла).
- Принимать все пакеты, для которых системой conntrack указано, что они относятся к установленному подключению, или к подключению, связанному с установленным (другим способом очень сложно настроить прием ответов на различные сетевые запросы, а без этого невозможно сетевое взаимодействие).
- Принимать пакеты ICMP (хотя не помешает ограничить их частоту).
- Принимать все пакеты на используемый порт SSH (иначе удаленный доступ по SSH будет потерян).
Принимать запросы HTTP/HTTPS с IP-адреса 93.180.62.114 (узнать номера соответствующих портов можно в файле /etc/services).
- Принимать пакеты NTP на стандратный порт (обатите внимание, что протокол NTP использует для транспорта UDP, а не TCP).
- Отбрасывать (drop) все остальные пакеты (для этого проще всего изменить умолчательную политику цепочки).
На каждое добавленное правило, кроме последнего, должен быть установлен счетчик срабатываний.
Справочная страница nft(8) очень объемная и содержит множество деталей, понятных только опытным сетевым администраторам. Советую начинать поиск ответа на интересующий вопрос на страницах wiki проекта nftables.
Для зачета задания нужно создать файл /root/task6.log с выдачей команды nft list ruleset, выполненой после настройки и активации файервола. Хотя бы для некоторых счетчиков должны быть ненулевые числа срабатываний.
