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"
...
Тестирование
Тестирование включает следующие шаги:
- Проверка синтаксиса роли
- Первый запуск
- Второй запуск и проверка идемпотентности.
На следующих операционных системах:
- Debian 9
- CentOS 7
- Ubuntu 18.04
Участие
Ревью кода, патчи, комментарии, отчёты о багах и запросы на функции приветствуются. Пожалуйста, прочитайте Руководство по участию для получения дополнительных деталей.