ansibleguy.linux_ufw
OBSOLETO
Usar UFW como middleware en automatización realmente no tiene sentido.
¡Crea una complejidad innecesaria para cambios de reglas individuales!
En mi opinión, no es una herramienta diseñada para ser automatizada.
Realmente recomendaría usar NFTables: ansibleguy.infra_nftables
Rol de Ansible - Firewall Sin Complicaciones (UFW)
Rol de Ansible para desplegar/configurar el firewall de software 'UFW' en un servidor Linux basado en Debian.
Probado:
- Debian 11
Instalación
# última versión
ansible-galaxy role install git+https://github.com/ansibleguy/linux_ufw
# desde galaxy
ansible-galaxy install ansibleguy.linux_ufw
# o para una ruta de rol personalizada
ansible-galaxy install ansibleguy.linux_ufw --roles-path ./roles
# instalar dependencias
ansible-galaxy install -r requirements.yml
Funcionalidad
Este rol de ansible hará:
Instalación de paquetes
- UFW
Configuración
Reglas usando uno de dos modos
- El modo con estado (por defecto)
- mantiene las reglas existentes y agrega/elimina reglas usando un estado de regla
- El modo sin estado
- reinicia el estado y las reglas de UFW cada vez
- después de eso, se aplican las nuevas reglas
- El modo con estado (por defecto)
Verificación de que hay una regla de ssh en su lugar
Información
Nota: La mayoría de las funcionalidades del rol se pueden optar por activar o desactivar.
Para todas las opciones disponibles, consulte la configuración predeterminada ubicada en el archivo de configuraciones principal!
Nota: este rol actualmente solo es compatible con sistemas basados en Debian
Advertencia: No todas las configuraciones/variables que proporciones serán verificadas por validez. Una mala configuración podría romper el rol.
Uso
¿Quieres una interfaz gráfica simple de Ansible? Echa un vistazo a mi Ansible WebUI
Configuración
Solo define el diccionario 'ufw_rules' según sea necesario:
ufw_rules:
ruleShortName:
rule: 'allow' # predeterminado si está vacío
port: 80
proto: 'tcp'
log: 'no' # predeterminado si está vacío
from_ip: 'any' # predeterminado si está vacío
to_ip: 'any' # predeterminado si está vacío
direction: 'in' # predeterminado si está vacío
present: true # predeterminado si está vacío => se utilizará para la verificación del estado (alias = estado: presente)
position: 2 # puedes definir la posición de la regla en el conjunto de reglas (alias = insertar)
comment: 'Puedes sobrescribir el comentario predeterminado'
o de manera compacta:
ufw_rules: {
ruleShortName: {rule: 'allow', port: 80, proto: 'tcp', log: 'no', from_ip: 'any', to_ip: 'any', direction: 'in', state: 'present', position: 2, comment: 'Puedes sobrescribir el comentario predeterminado'}
}
Ejecución
Ejecuta el playbook:
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml
La tarea de UFW en sí es 'community.general.ufw'
Ejemplo
Estado antes:
guy@ansible:~$ sudo ufw status numbered
Estado: activo
Para Acción Desde
-- ------ ----
[ 1] 7424/tcp PERMITIR EN Cualquier lugar # Gestionado por Ansible - confusedService
[ 2] 7429/tcp PERMITIR EN Cualquier lugar (registro) # Gestionado por Ansible - nothingImportant
Configuración
ufw_rules:
# restricciones de tráfico entrante
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'
# restricciones de tráfico saliente
denyNtpOutgoing:
port: 123
proto: 'udp'
rule: 'deny'
direction: 'out'
# eliminar estas reglas:
confusedService:
port: 7424
proto: 'tcp'
state: 'absent'
nothingImportant:
port: 7429
proto: 'tcp'
log: true
present: false
Resultado:
guy@ansible:~$ sudo ufw status numbered
Estado: activo
Para Acción Desde
-- ------ ----
[ 1] 22/tcp LIMITAR EN Cualquier lugar (registro) # Gestionado por Ansible - SecShöl
[ 2] 8482/tcp PERMITIR EN Cualquier lugar # Gestionado por Ansible - RandomWebServer
[ 3] 54038:54085/udp PERMITIR EN 192.168.194.0/28 (registro) # Gestionado por Ansible - SecureLink
[ 4] 10.10.20.254/esp PERMITIR EN 10.10.10.1/esp # Gestionado por Ansible - ipsecESP
[ 5] 10.10.20.254 500,4500/udp PERMITIR EN 10.10.10.1 # Gestionado por Ansible - ipsecIKE
[ 6] 123/udp DENEGAR SALIDA Cualquier lugar (salida) # Gestionado por Ansible - denyNtpOutgoing
Role to install and configure ufw firewall-rules on a linux machine
ansible-galaxy install ansibleguy.linux_ufw