nftables
Требования
- Установите Ansible:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
Обязательные переменные
Просмотрите переменные, как показано в значениях по умолчанию.
Вы можете добавить определение брандмауэра в переменные для вашего хоста (../host_vars/[имя_хоста].yaml), группы хостов (../group_vars/[имя_группы].yaml) с использованием следующей структуры (см. molecule.default.vars/test.yaml для примера):
# эта переменная указывает на правила, которые отправляются на удалённый хост
# это словарь таблиц, с цепочками и правилами, см. molecule/default/vars/test.yaml
nftables_ruleset:
# ключи этого словаря становятся таблицами
# они должны быть:
# семейством и названием брандмауэра, например:
"inet firewall":
# описание таблицы
comment: "брандмауэр устройства"
chains:
# имя соответствующей цепочки
input:
# имя переменной из nftables_rules
# которую вы хотите поместить в эту цепочку
- input_hook
- valid_connections
- ...
# другая таблица с такой же структурой
# допустимые семьи: inet, inet6, netdev и inet,
# см. документацию nftables для полного справочника
"inet foo":
# потенциальные правила определяются в `nftables_rules`
# каждое правило имеет два атрибута:
# -> def: определение правил или набора правил в корректном синтаксисе nftables
# -> depends_on: необязательный список зависимостей переменных из nftables_variables
# см. molecule/default/vars/test.yaml для примера
nftables_rules:
input_hook: >
type filter hook input priority 0; policy drop;
valid_connections:
def: |
ct state established, related accept
ct state invalid drop
new_connections:
def: |
ct state new accept
# это определения переменных, которые включаются с depends_on
# убедитесь, что ключи совпадают
# см. molecule/default/vars/test.yaml для примера
nftables_variables:
tcp_ports:
comment: конфигурация TCP портов
def: |
{% if nftables_open_tcp_ports_global %}define OPEN_TCP_PORTS = { {{ nftables_open_tcp_ports_global | join(",") }} }{% endif +%}
{% if nftables_open_tcp_ports_local %}define LOCAL_OPEN_TCP_PORTS = { {{ nftables_open_tcp_ports_local | join(",") }} }{% endif +%}
{% if nftables_open_tcp_ports_vpn %}define VPN_TCP_PORTS = { {{ nftables_open_tcp_ports_vpn | join(",") }} }{% endif +%}
...
Плейбук Ansible проверит, переданы ли правильные переменные роли с помощью argument_spec.
Пример плейбука
Минимальный (при условии, что вы передали переменные в другом месте):
hosts:
- foo
roles:
- pimvh.nftables
Суть - что произойдет, если я это запущу
- проверить, определены ли правила/некоторые другие переменные
- установить nftables и интерфейс на Python
- создать необходимые таблицы nftables
- создать динамические таблицы в виде пустых таблиц
- создать пустой блоклист
- скопировать шаблон nftables в директорию nftables
- отредактировать службу nftables, чтобы она ссылалась на наш новый основной файл
- создать скрипт для перезагрузки брандмауэра, который сохраняет таблицы вне нашего контроля в файлы и перезагружает брандмауэр после
- когда nftables_abuseip_api_key определен, добавить скрипт для получения блоклиста с использованием их API и сделать его службой systemd
- включить службу nftables по запросу
- удалить iptables по запросу
Будущие улучшения
- Упростить структуру правил, которые нужно передать
- Улучшить argument_specs для
nftables_variables
иnftables_ruleset
Установить
ansible-galaxy install pimvh/nftables
Лицензия
gpl-3.0
Загрузки
98
Владелец