pimvh.nftables
Requisitos
- Ansible instalado:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
Variables requeridas
Revisa las variables como se muestra en los valores predeterminados.
Puedes agregar una definición de firewall a las variables para tu host (../host_vars/[nombre_host].yaml), grupo de hosts (../group_vars/[nombre_grupo].yaml) usando la siguiente estructura (ver ejemplo en molecule.default.vars/test.yaml):
# esta variable apunta a las reglas que se envían al host remoto
# es un diccionario de tablas, con cadenas, con reglas, ver molecule/default/vars/test.yaml
nftables_ruleset:
# las claves de esto se convierten en tablas
# deben ser:
# familia y nombre del firewall, por ejemplo:
"inet firewall":
# descripción de la tabla
comment: "firewall del dispositivo"
chains:
# nombre de la cadena respectiva
input:
# nombre de la variable de nftables_rules
# que te gustaría poner en esta cadena
- input_hook
- valid_connections
- ...
# otra tabla con la misma estructura
# las familias válidas son cosas como inet, inet6, netdev, e inet,
# ver la documentación de nftables para la referencia completa
"inet foo":
# las reglas potenciales se definen bajo `nftables_rules`
# cada regla tiene dos atributos:
# -> def: la definición de las reglas o conjunto de reglas en una sintaxis válida de nftables
# -> depends_on: lista opcional de dependencias de variables de nftables_variables
# ver molecule/default/vars/test.yaml para un ejemplo
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
# estas son las definiciones de variables, que se incluyen con depends_on
# asegúrate de que las claves coincidan
# ver molecule/default/vars/test.yaml para un ejemplo
nftables_variables:
tcp_ports:
comment: configuración de puertos 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 +%}
...
El playbook de Ansible validará si se pasan las variables correctas al rol utilizando un argument_spec.
Ejemplo de playbook
Mínimo (suponiendo que pasaste variables en otro lugar):
hosts:
- foo
roles:
- pimvh.nftables
Resumen - Qué sucederá si ejecuto esto
- validar si las reglas / algunas otras variables están definidas
- instalar nftables y la interfaz de python
- crear las tablas nftables requeridas
- crear tablas dinámicas como tablas vacías
- crear una lista de bloqueos vacía
- copiar una plantilla de nftables al directorio de nftables
- editar el servicio de nftables para que apunte a nuestro nuevo archivo principal
- crear un script para recargar el firewall, que extrae tablas que están fuera de nuestro control a archivos, y recarga el firewall después
- cuando nftables_abuseip_api_key esté definido, agregar un script para obtener la lista de bloqueos usando su API, y convertir eso en un servicio systemd
- habilitar el servicio de nftables cuando se solicite
- desinstalar iptables cuando se solicite
Mejoras Futuras
- Simplificar la estructura de reglas que deben pasarse
- Mejorar argument_specs para
nftables_variables
ynftables_ruleset
Instalar
ansible-galaxy install pimvh.nftables
Licencia
gpl-3.0
Descargas
110
Propietario