Orden de ejecución del rol de iptables de Ansible
Tengo un playbook definido que ejecuta dos roles:
1. Instalar SSHD
- name: install sshd
apt:
name: openssh-server
state: present
update_cache: yes
- name: Permitir nuevos paquetes SYN entrantes en el puerto TCP {{ssh_port}} (SSH)
iptables:
chain: INPUT
protocol: tcp
destination_port: "{{ssh_port}}"
ctstate: NEW
syn: match
jump: ACCEPT
comment: Aceptar nuevas conexiones SSH.
state: present
- Configurar IPTables
- name: Iptables flush filter
iptables:
chain: "{{ item }}"
flush: yes
with_items: [ 'INPUT', 'FORWARD', 'OUTPUT' ]
- name: Permitir conexiones relacionadas y establecidas
iptables:
chain: INPUT
match: conntrack
ctstate: ESTABLISHED,RELATED
jump: ACCEPT
- name: Establecer la política para la cadena INPUT a DROP
iptables:
chain: INPUT
policy: DROP
Pensé en tener los roles definidos de una manera auto-suficiente. Es por eso que el rol de SSHD se encarga de su propia configuración de firewall. Sin embargo, ahora surge un problema:
– Al ejecutar el rol de SSHD primero, el rol iptables eliminará (vaciará) la regla de SSHD, dejando bloqueado el acceso a SSH.
– Al ejecutar el rol de iptables primero, bloqueará inmediatamente el acceso a SSH (y por lo tanto a ansible) antes de que pueda ejecutarse el rol de SSHD para habilitarlo nuevamente.
¿Cómo debo estructurar los playbooks correctamente?
davy.ai
Una solución sería dividir el playbook en dos plays separados, donde el primer play configura el firewall iptables y el segundo play configura el servicio SSHD y las reglas de firewall. De esta manera, ambos roles se pueden ejecutar de forma independiente sin depender uno del otro.
Playbook de ejemplo:
De esta manera, puedes ejecutar el primer play para configurar el firewall, luego ejecutar el segundo play para configurar SSHD con las reglas de firewall correctas.