# firewall Role Ansible pour déployer un pare-feu iptables/ip6tables via un script shell et un service systemd. ## Prérequis - Distribution Debian/Ubuntu (gestion des paquets via apt) - Privilèges root (become: true) - Fact gathering activé (utilisé pour l'interface réseau par défaut) ## Comportement - Installe iptables - Déploie le script [templates/firewall.j2](templates/firewall.j2) - Déploie le service systemd [files/firewall.service](files/firewall.service) - Active et démarre le service firewall ## Variables Variables par défaut dans [defaults/main.yml](defaults/main.yml). - firewall_public_interface: interface publique pour les logs optionnels. Si null, utilise ansible_default_ipv4.interface. - firewall_docker_safe: préserve les chaînes Docker lors d'un restart du firewall. - firewall_admin_sources: liste des CIDR autorisés sur les services admin. - firewall_admin_rules_ipv4: liste des règles IPv4 limitées aux sources admin. - firewall_public_tcp_ports_ipv4: ports TCP IPv4 ouverts publiquement. - firewall_public_tcp_ports_ipv6: ports TCP IPv6 ouverts publiquement. ## Exemple d'inventaire ```yaml firewall_admin_sources: - cidr: "203.0.113.10/32" comment: "bastion" firewall_docker_safe: true firewall_admin_rules_ipv4: - proto: "udp" dport: 51820 comment: "wireguard" - proto: "tcp" dport: 22 comment: "ssh admin" firewall_public_tcp_ports_ipv4: - 22 - 80 - 443 firewall_public_tcp_ports_ipv6: - 80 - 443 ``` ## Exemple de playbook ```yaml - name: Configure firewall hosts: all become: true roles: - role: firewall ``` ## Notes - Le script applique une politique restrictive (DROP sur INPUT/OUTPUT/FORWARD) puis ouvre explicitement les flux requis. - Toute erreur de syntaxe shell du template est validée avant déploiement via /bin/sh -n. - En mode docker-safe, les chaînes Docker existantes sont préservées pour éviter de casser la connectivité des conteneurs au restart. - Après un start/reload du firewall, fail2ban est relancé s'il est présent afin de réappliquer les chaînes f2b.