es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
  1. 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?

Tags:  ,

Answer

  1. Avatar for 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:

    ---
    - name: Configurar el firewall
      hosts: all
      become: true
      tasks:
        - name: Vaciar el filtro de iptables
          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 de la cadena INPUT en DROP
          iptables:
            chain: INPUT
            policy: DROP
    
    - name: Configurar SSHD
      hosts: all
      become: true
      tasks:
        - name: Instalar 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
    

    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.

Comments are closed.