- name: Ensure marker directory exists ansible.builtin.file: path: /run/tuxflotte/agent/applied state: directory mode: "0755" # ufw (Uncomplicated Firewall) - regulaeres Debian/Ubuntu-Paket. Default- # Politik bewusst "eingehend verweigern, ausgehend erlauben" (Standard- # Empfehlung fuer Client-Geraete, kein Server-Dienst zu schuetzen) - reine # Installation ohne Aktivierung waere wirkungslos, deshalb hier explizit # "ufw enable" mit ausgefuehrt. SSH bleibt bewusst erlaubt (Fernwartung/ # IT-Zugriff bleibt sonst nach dem ersten Lauf ausgesperrt - live beim # Testen selbst fast passiert). # # WICHTIG, noch offen (Konflikt-/Gruppen-Handling, siehe Roadmap-Doc): # andere Merkmale, die eingehende Verbindungen brauchen (z.B. veyon, siehe # roles/veyon/), muessen ihre eigene ufw-Freigabe SELBST mitbringen - # diese Rolle kennt andere Merkmale nicht und kann das nicht automatisch # koordinieren. - name: ufw installieren ansible.builtin.apt: name: ufw state: present update_cache: true cache_valid_time: 3600 when: tuxflotte_state == "present" - name: Default-Politik setzen (eingehend verweigern, ausgehend erlauben) community.general.ufw: direction: "{{ item.direction }}" policy: "{{ item.policy }}" loop: - { direction: incoming, policy: deny } - { direction: outgoing, policy: allow } when: tuxflotte_state == "present" - name: SSH weiterhin erlauben (Fernwartung) community.general.ufw: rule: allow name: OpenSSH when: tuxflotte_state == "present" - name: ufw aktivieren community.general.ufw: state: enabled when: tuxflotte_state == "present" - name: Record that the firewall role ran ansible.builtin.copy: dest: /run/tuxflotte/agent/applied/firewall.marker content: "{{ ansible_date_time.iso8601 }}\n" mode: "0644" when: tuxflotte_state == "present" - name: ufw deaktivieren (Auftrag abgewählt) community.general.ufw: state: disabled when: tuxflotte_state == "absent" # Live beim Testen gefunden (10.09.2026): "deaktivieren" allein liess das # Paket installiert stehen - inkonsistent zum Rest des Katalogs, wo # "absent" immer eine vollstaendige Rueckabwicklung bedeutet. - name: ufw entfernen (Auftrag abgewählt) ansible.builtin.apt: name: ufw state: absent when: tuxflotte_state == "absent" - name: firewall-Marker entfernen (Auftrag abgewählt) ansible.builtin.file: path: /run/tuxflotte/agent/applied/firewall.marker state: absent when: tuxflotte_state == "absent"