# đŸŒČ Alliance BorĂ©ale - Ansible Automation Infrastructure as Code pour L'Alliance BorĂ©ale - Membre: **Chezlepro Inc.** ## 📋 Table des matiĂšres - [PrĂ©requis](#prĂ©requis) - [Structure du projet](#structure-du-projet) - [Configuration initiale](#configuration-initiale) - [Phase 1 : DNS FĂ©dĂ©rĂ©](#phase-1--dns-fĂ©dĂ©rĂ©) - [Gestion des secrets](#gestion-des-secrets) - [Commandes utiles](#commandes-utiles) - [DĂ©pannage](#dĂ©pannage) --- ## 🔧 PrĂ©requis ### Sur votre machine de contrĂŽle ```bash # Ubuntu/Debian sudo apt update sudo apt install ansible python3-pip sshpass # OU via pip (recommandĂ© pour derniĂšre version) pip3 install ansible ansible-lint # Collections Ansible requises ansible-galaxy collection install community.general ansible-galaxy collection install community.postgresql ansible-galaxy collection install ansible.posix ``` ### Sur les serveurs cibles (VMs) - Ubuntu 22.04 LTS ou Debian 12 - AccĂšs root temporaire (sera dĂ©sactivĂ© aprĂšs) - Connexion SSH fonctionnelle --- ## 📁 Structure du projet ``` ansible/ ├── ansible.cfg # Configuration Ansible ├── README.md # Ce fichier │ ├── inventories/ │ └── production/ │ ├── hosts.yml # Inventaire des serveurs │ └── group_vars/ │ ├── all.yml # Variables globales │ └── dns_servers.yml # Variables DNS │ ├── roles/ │ ├── common/ # Hardening de base │ ├── postgresql/ # Base de donnĂ©es │ └── powerdns-authoritative/ # DNS autoritaire │ ├── playbooks/ │ └── phase1-dns-deploy.yml # DĂ©ploiement Phase 1 │ └── vault/ └── production.yml # Secrets chiffrĂ©s (Ă  crĂ©er) ``` --- ## ⚙ Configuration initiale ### 1. GĂ©nĂ©rer clĂ©s SSH ```bash # GĂ©nĂ©rer une paire de clĂ©s pour Ansible ssh-keygen -t ed25519 -f ~/.ssh/alliance_boreale_ed25519 -C "ansible@chezlepro.ca" # Copier la clĂ© publique sur les serveurs (temporairement en root) ssh-copy-id -i ~/.ssh/alliance_boreale_ed25519.pub root@10.0.2.10 ssh-copy-id -i ~/.ssh/alliance_boreale_ed25519.pub root@10.0.2.11 ``` ### 2. Configurer l'inventaire Éditer `inventories/production/hosts.yml` : ```yaml # Remplacer les IPs par vos IPs publiques/internes ns1.infra.chezlepro.ca: ansible_host: # ← MODIFIER ICI ns2.infra.chezlepro.ca: ansible_host: # ← MODIFIER ICI ``` Éditer `inventories/production/group_vars/all.yml` : ```yaml # Ajouter vos clĂ©s SSH publiques ssh: authorized_keys: - "ssh-ed25519 AAAAC3... votre-email@example.com" # ← AJOUTER ICI ``` ### 3. CrĂ©er le vault de secrets ```bash # CrĂ©er un mot de passe pour le vault ansible-vault create vault/production.yml ``` Contenu du vault : ```yaml --- # Secrets pour Phase 1 vault_pdns_api_key: "changeme-api-key-secure-random" vault_postgresql_pdns_password: "changeme-db-password-secure-random" ``` **Sauvegarder le mot de passe vault dans un gestionnaire de mots de passe !** ### 4. Tester la connectivitĂ© ```bash # Ping tous les hĂŽtes ansible all -m ping # Devrait afficher: # ns1.infra.chezlepro.ca | SUCCESS => { "ping": "pong" } # ns2.infra.chezlepro.ca | SUCCESS => { "ping": "pong" } ``` --- ## 🚀 Phase 1 : DNS FĂ©dĂ©rĂ© ### DĂ©ploiement complet ```bash # DĂ©ployer Phase 1 complĂšte ansible-playbook playbooks/phase1-dns-deploy.yml --ask-vault-pass # OU avec fichier mot de passe echo "votre-mot-de-passe-vault" > .vault_pass chmod 600 .vault_pass ansible-playbook playbooks/phase1-dns-deploy.yml --vault-password-file .vault_pass ``` ### DĂ©ploiement par Ă©tapes (tags) ```bash # Seulement hardening (common) ansible-playbook playbooks/phase1-dns-deploy.yml --tags common # Seulement PostgreSQL ansible-playbook playbooks/phase1-dns-deploy.yml --tags postgresql # Seulement PowerDNS ansible-playbook playbooks/phase1-dns-deploy.yml --tags powerdns # Mode dry-run (vĂ©rifier sans appliquer) ansible-playbook playbooks/phase1-dns-deploy.yml --check --diff ``` ### DĂ©ploiement sur un seul serveur ```bash # Seulement ns1 ansible-playbook playbooks/phase1-dns-deploy.yml --limit ns1.infra.chezlepro.ca # Seulement ns2 ansible-playbook playbooks/phase1-dns-deploy.yml --limit ns2.infra.chezlepro.ca ``` --- ## 🔐 Gestion des secrets ### Éditer le vault ```bash # Éditer secrets ansible-vault edit vault/production.yml # Voir contenu (sans Ă©diter) ansible-vault view vault/production.yml # Changer mot de passe vault ansible-vault rekey vault/production.yml ``` ### GĂ©nĂ©rer mots de passe sĂ©curisĂ©s ```bash # API Key PowerDNS (32 caractĂšres alphanumĂ©riques) openssl rand -base64 32 # Mot de passe PostgreSQL openssl rand -base64 24 ``` --- ## đŸ§Ș Validation post-dĂ©ploiement ### Tests DNS ```bash # RĂ©solution SOA dig @10.0.2.10 chezlepro.ca SOA +short # RĂ©solution NS dig @10.0.2.10 chezlepro.ca NS +short # Test DNSSEC dig @10.0.2.10 chezlepro.ca DNSKEY +dnssec # Test depuis Internet (aprĂšs propagation) dig @8.8.8.8 chezlepro.ca SOA +short ``` ### Export DS Records (DNSSEC) ```bash # Se connecter au DNS master ssh ansible@10.0.2.10 # Exporter DS records sudo pdnsutil show-zone chezlepro.ca | grep DS # Exemple output: # chezlepro.ca IN DS 12345 13 2 abc123... ``` **Ajouter ces DS records chez votre registraire de domaine !** ### Validation DNSSEC publique ```bash # Avec DNSViz (aprĂšs ajout DS records) # https://dnsviz.net/d/chezlepro.ca/dnssec/ # Ou en ligne de commande delv @8.8.8.8 chezlepro.ca SOA # Devrait afficher: "fully validated" ``` ### VĂ©rifier services ```bash # SSH sur serveur ssh ansible@10.0.2.10 # Status PowerDNS sudo systemctl status pdns # Status PostgreSQL sudo systemctl status postgresql # Logs PowerDNS sudo journalctl -u pdns -f # Firewall rules sudo nft list ruleset # API PowerDNS (depuis le serveur) curl -H "X-API-Key: " http://127.0.0.1:8081/api/v1/servers/localhost ``` --- ## đŸ› ïž Commandes utiles ### Ansible ad-hoc ```bash # Mettre Ă  jour tous les packages ansible all -b -m apt -a "upgrade=dist update_cache=yes" # RedĂ©marrer un service ansible dns_servers -b -m systemd -a "name=pdns state=restarted" # Collecter facts ansible all -m setup # ExĂ©cuter commande shell ansible all -b -a "uptime" ``` ### Gestion PowerDNS ```bash # Lister zones pdnsutil list-all-zones # Ajouter un record pdnsutil add-record chezlepro.ca www A 203.0.113.10 3600 # Supprimer un record pdnsutil delete-rrset chezlepro.ca www A # Rectifier zone (aprĂšs modifications) pdnsutil rectify-zone chezlepro.ca # Augmenter serial SOA pdnsutil increase-serial chezlepro.ca # VĂ©rifier zone pdnsutil check-zone chezlepro.ca ``` --- ## 🐛 DĂ©pannage ### Erreur: "Failed to connect to the host" ```bash # VĂ©rifier connectivitĂ© ping 10.0.2.10 # VĂ©rifier SSH manuel ssh -i ~/.ssh/alliance_boreale_ed25519 ansible@10.0.2.10 # VĂ©rifier port SSH nmap -p 22 10.0.2.10 ``` ### Erreur: "Permission denied (publickey)" ```bash # VĂ©rifier que la clĂ© est chargĂ©e ssh-add -l # Ajouter la clĂ© si nĂ©cessaire ssh-add ~/.ssh/alliance_boreale_ed25519 # VĂ©rifier authorized_keys sur le serveur ssh root@10.0.2.10 "cat /home/ansible/.ssh/authorized_keys" ``` ### Erreur: "Vault password required" ```bash # Option 1: Demander interactivement --ask-vault-pass # Option 2: Fichier --vault-password-file .vault_pass # Option 3: Variable d'environnement export ANSIBLE_VAULT_PASSWORD_FILE=.vault_pass ``` ### PowerDNS ne dĂ©marre pas ```bash # Voir logs dĂ©taillĂ©s sudo journalctl -u pdns -n 100 --no-pager # VĂ©rifier config sudo pdns_server --config-check # Tester connexion PostgreSQL sudo -u postgres psql powerdns -c "SELECT * FROM domains;" ``` ### DNS ne rĂ©pond pas ```bash # VĂ©rifier que le port est ouvert sudo ss -tulnp | grep :53 # VĂ©rifier firewall sudo nft list ruleset | grep "53" # Tester en local d'abord dig @127.0.0.1 chezlepro.ca SOA # Ensuite depuis l'extĂ©rieur dig @ chezlepro.ca SOA ``` --- ## 📚 Documentation de rĂ©fĂ©rence - [Nomenclature v4 (CRB-2)](../00_Nomenclature_biomimetique_autopoietique_v4_CRB2.md) - [Document 05: OpĂ©ration DNS FĂ©dĂ©rĂ©e](/mnt/project/05_Operation_DNS_Federee.md) - [Document 14: Structure YAML Registraire](/mnt/project/14_Structure_YAML_Registraire.md) - [PowerDNS Documentation](https://doc.powerdns.com/authoritative/) - [Ansible Documentation](https://docs.ansible.com/) --- ## 🆘 Support Pour questions ou problĂšmes : 1. Consulter les logs : `sudo journalctl -u pdns -f` 2. VĂ©rifier la documentation dans `/mnt/project/` 3. Contacter Cercle OpĂ©rationnel via Matrix --- **Version:** 1.0 **Date:** 2025-10-31 **Membre:** Chezlepro Inc. **Phase:** 1 (DNS FĂ©dĂ©rĂ© - C1-C2)