nftables

Ansible Роль: nftables

Состояние сборки

Эта роль Ansible позволяет устанавливать nftables и управлять его конфигурацией.

Для получения дополнительной информации о nftables, пожалуйста, ознакомьтесь с официальной страницей проекта.

Переменные роли

Переменные и свойства выделенные жирным шрифтом, обязательны. Остальные являются необязательными.

Имя переменной Описание Значение по умолчанию
nftables_flush_ruleset Нужно ли сбрасывать текущий набор правил или нет. yes
nftables_config_file Путь к файлу конфигурации. /etc/nftables.conf
nftables_tables Список таблиц. []

Свойства таблицы

Имя свойства Описание Значение по умолчанию
name Имя таблицы.
family Адресное семейство таблицы. Если указано, должно быть либо ip, ip6, inet, arp, bridge или netdev. ip
sets Список множеств.
maps Список отображений.
verdict_maps Список отображений решений.
chains Список цепочек.

Документация

Свойства множества

Имя свойства Описание
name Имя множества.
type Тип элементов, содержащихся в множестве. Должен быть либо ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, icmp_type, icmpv6_type или mark.
size Количество элементов, которые может содержать множество.
policy Политика выбора множества. Если указана, должна быть либо performance, либо memory.
timeout Сколько времени элементы остаются в множестве.
flags Список флагов. Если указано, должен содержать хотя бы один из следующих: constant, interval, timeout.
gc_interval Интервал сборки мусора.
elements Список элементов, содержащихся в множестве. Элементы должны соответствовать типу множества.

Документация

Свойства отображения

Имя свойства Описание
name Имя отображения.
keys_type Тип ключей. Должен быть либо ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, icmp_type, icmpv6_type или mark.
values_type Тип значений. Должен быть либо ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, mark, counter или quota.
elements Список элементов, содержащихся в отображении. Элементы должны соответствовать типам ключей и значений отображения.

Документация

Свойства элемента отображения

Имя свойства Описание
key Значение ключа.
value Значение, связанное с ключом.

Свойства отображения решений

verdict_map - это специальный случай map, где values_type всегда равен verdict. Поэтому свойство values_type отсутствует. Элементы, содержащиеся в verdict_map, имеют свойство verdict вместо свойства value.

Имя свойства Описание
name Имя отображения.
keys_type Тип ключей. Должен быть либо ipv4_addr, ipv6_addr, ether_addr, inet_service, inet_proto, icmp_type, icmpv6_type или mark.
elements Список элементов, содержащихся в отображении решений.

Свойства элемента отображения решений

Имя свойства Описание
key Значение ключа.
verdict Решение, связанное с ключом.

Свойства цепочки

Имя свойства Описание
name Имя цепочки.
base Основное правило для цепочки.
rules Список правил, содержащихся в цепочке.

Документация

Основные свойства

Имя свойства Описание
type Тип цепочки. Должен быть либо filter, nat или route.
hook Хук, к которому прикреплена цепочка. Доступные значения зависят от type.
priority Целое число, определяющее порядок цепочек, прикрепленных к тому же hook.
policy Политика по умолчанию для цепочки. Если указана, должна быть либо accept, либо drop.

Документация

Свойства правила

Документация

Имя свойства Описание
position Целое число, определяющее порядок правил в цепочке.
statement Заявление правила.
comment Комментарий, описывающий правило.

Пример

Вот небольшой пример того, как должен выглядеть ваш файл.

ВАЖНО: НЕ используйте это в качестве вашего брандмауэра!

---
nftables_flush_ruleset: yes
nftables_config_path: /etc/nftables.rules
nftables_tables:
  - name: firewall
    family: inet

    sets:
      - name: "set1"
        type: 
        size: 10
        policy: "performance"
        timeout: "1d"
        flags:
          - "timeout"
          - "interval"
        gc_interval: "12h" 
        elements:
          - 192.0.2.1
          - 192.0.2.2

    maps:
      - name: "map1"
        keys_type: "inet_service"
        values_type: "ipv4_addr"
        elements:
          - key: ssh
            value: "192.0.2.10"
      - name: "map2"
        keys_type: "inet_service"
        values_type: "ipv4_addr"
        elements:
          - key: ftp
            value: "192.0.2.25"

    verdict_maps:
      - name: "vmap1"
        keys_type: "inet_service"
        elements:
          - key: "192.0.2.10"
            value: "accept"

    chains:
      - name: "Мой фильтр ввода"
        base:
          type: "filter"
          hook: "input"
          priority: 0
          policy: "drop"
        rules:
          - position: 2
            statement: "ct state invalid log prefix 'Invalid_IN: ' drop"
            comment: "Логировать и сбрасывать недопустимые пакеты."
          - position: 1
            statement: "iif lo accept"
          - position: 3
            statement: "ct state {established,related} accept"

      - name: "Мой фильтр вывода"
        base:
          type: "filter"
          hook: "output"
          priority: -10
          policy: "accept"
        rules:
          - position: 1
            statement: "ip daddr 192.0.2.100 counter"
...

Тестирование

Тестирование включает следующие шаги:

  1. Проверка синтаксиса роли
  2. Первый запуск
  3. Второй запуск и проверка идемпотентности.

На следующих операционных системах:

  • Debian 9
  • CentOS 7
  • Ubuntu 18.04

Участие

Ревью кода, патчи, комментарии, отчёты о багах и запросы на функции приветствуются. Пожалуйста, прочитайте Руководство по участию для получения дополнительных деталей.

О проекте

Install and manage nftables.

Установить
ansible-galaxy install Frzk/ansible-role-nftables
Лицензия
apache-2.0
Загрузки
118
Владелец