linux_ufw
УСТАРЕВШИЙ
Использование UFW как промежуточного ПО в автоматизации не имеет смысла.
Это создает ненужную сложность для изменений с единственным правилом!
На мой взгляд, это не инструмент, предназначенный для автоматизации.
Я бы скорее рекомендовал использовать NFTables: ansibleguy.infra_nftables
Роль Ansible - Uncomplicated Firewall (UFW)
Роль Ansible для развертывания/настройки программного фаервола 'UFW' на сервере с операционной системой на базе Debian.
Проверено:
- Debian 11
Установка
# последняя версия
ansible-galaxy role install git+https://github.com/ansibleguy/linux_ufw
# из галактики
ansible-galaxy install ansibleguy.linux_ufw
# или в пользовательский путь для ролей
ansible-galaxy install ansibleguy.linux_ufw --roles-path ./roles
# установка зависимостей
ansible-galaxy install -r requirements.yml
Функциональность
Эта роль Ansible выполнит:
Установку пакетов
- UFW
Настройку
Правила с использованием одного из двух режимов
- Состояния (по умолчанию)
- сохраняет существующие правила и добавляет/удаляет правила с помощью состояния правила
- Без состояния
- сбрасывает состояние и правила ufw каждый раз
- после этого применяются новые правила
- Состояния (по умолчанию)
Проверка, что правило ssh установлено
Информация
Примечание: Большинство функций роли могут быть включены или отключены.
Для всех доступных опций - смотрите стандартную конфигурацию в главном файле конфигурации!
Примечание: эта роль в настоящее время поддерживает только системы на базе Debian.
Предупреждение: Не все настройки/переменные, которые вы укажете, будут проверены на корректность. Неправильная конфигурация может сломать роль!
Использование
Хотите простую веб-интерфейс для Ansible? Ознакомьтесь с моим Ansible WebUI
Конфигурация
Просто определите словарь 'ufw_rules' по мере необходимости:
ufw_rules:
ruleShortName:
rule: 'allow' # по умолчанию, если пусто
port: 80
proto: 'tcp'
log: 'no' # по умолчанию, если пусто
from_ip: 'any' # по умолчанию, если пусто
to_ip: 'any' # по умолчанию, если пусто
direction: 'in' # по умолчанию, если пусто
present: true # по умолчанию, если пусто => будет использовано для проверки состояния (псевдоним = состояние: present)
position: 2 # вы можете определить позицию правила в наборе правил (псевдоним = вставка)
comment: 'Вы можете переопределить комментарий по умолчанию'
или компактным способом:
ufw_rules: {
ruleShortName: {rule: 'allow', port: 80, proto: 'tcp', log: 'no', from_ip: 'any', to_ip: 'any', direction: 'in', state: 'present', position: 2, comment: 'Вы можете переопределить комментарий по умолчанию'}
}
Выполнение
Запустите playbook:
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml
Задача ufw - это 'community.general.ufw'
Пример
Состояние до:
guy@ansible:~$ sudo ufw status numbered
Статус: активен
Кому Действие Откуда
-- ------ ----
[ 1] 7424/tcp ALLOW IN Anywhere # Управляемый Ansible - confusedService
[ 2] 7429/tcp ALLOW IN Anywhere (log) # Управляемый Ansible - nothingImportant
Конфигурация
ufw_rules:
# ограничения входящего трафика
SecShöl:
port: 22
proto: 'tcp'
log: true
rule: 'limit'
RandomWebServer:
port: 8482
proto: 'tcp'
SecureLink:
port: 54038:54085
proto: 'udp'
log: true
from_ip: '192.168.194.0/28'
ipsecESP:
proto: 'esp'
from_ip: '10.10.10.1'
to_ip: '10.10.20.254'
ipsecIKE:
port: 500,4500
proto: 'udp'
from_ip: '10.10.10.1'
to_ip: '10.10.20.254'
# ограничения исходящего трафика
denyNtpOutgoing:
port: 123
proto: 'udp'
rule: 'deny'
direction: 'out'
# удалить эти правила:
confusedService:
port: 7424
proto: 'tcp'
state: 'absent'
nothingImportant:
port: 7429
proto: 'tcp'
log: true
present: false
Результат:
guy@ansible:~$ sudo ufw status numbered
Статус: активен
Кому Действие Откуда
-- ------ ----
[ 1] 22/tcp LIMIT IN Anywhere (log) # Управляемый Ansible - SecShöl
[ 2] 8482/tcp ALLOW IN Anywhere # Управляемый Ansible - RandomWebServer
[ 3] 54038:54085/udp ALLOW IN 192.168.194.0/28 (log) # Управляемый Ansible - SecureLink
[ 4] 10.10.20.254/esp ALLOW IN 10.10.10.1/esp # Управляемый Ansible - ipsecESP
[ 5] 10.10.20.254 500,4500/udp ALLOW IN 10.10.10.1 # Управляемый Ansible - ipsecIKE
[ 6] 123/udp DENY OUT Anywhere (out) # Управляемый Ansible - denyNtpOutgoing
ansible-galaxy install ansibleguy/linux_ufw