#!/usr/bin/env bash # ============================================================================= # Rafraichissement des rangs d'IP Cloudflare # ============================================================================= # Cloudflare fait evoluer ses rangs. Deux endroits en dependent : # - terraform/firewall.tf (qui peut atteindre 80/443 sur app-01) # - la configuration Traefik (quelles IP ont le droit d'ecrire X-Forwarded-For) # # Une liste perimee produit deux pannes distinctes et peu evidentes : # - du trafic legitime rejete par le firewall Hetzner ; # - une IP client mal identifiee, donc une limitation de debit qui frappe # tout le monde et des audit_logs faux. # # A relancer tous les trimestres, et systematiquement avant un `terraform apply`. # # bash scripts/refresh-cloudflare-ips.sh # compare et affiche # bash scripts/refresh-cloudflare-ips.sh --write # met a jour firewall.tf set -euo pipefail HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" TF_FILE="${HERE}/../terraform/firewall.tf" WRITE=false [[ "${1:-}" == "--write" ]] && WRITE=true echo ">>> Recuperation des rangs officiels Cloudflare" V4="$(curl -fsS --max-time 15 https://www.cloudflare.com/ips-v4)" V6="$(curl -fsS --max-time 15 https://www.cloudflare.com/ips-v6)" [[ -n "$V4" && -n "$V6" ]] || { echo "Reponse vide de Cloudflare, abandon." >&2; exit 1; } echo echo "IPv4 ($(echo "$V4" | wc -l | tr -d ' ') rangs) :" echo "$V4" | sed 's/^/ /' echo echo "IPv6 ($(echo "$V6" | wc -l | tr -d ' ') rangs) :" echo "$V6" | sed 's/^/ /' echo echo ">>> Rangs actuellement declares dans firewall.tf :" grep -oE '"[0-9a-f:.]+/[0-9]+"' "$TF_FILE" | tr -d '"' | sort -u | sed 's/^/ /' DIFF=$(diff <(printf '%s\n%s\n' "$V4" "$V6" | sort -u) \ <(grep -oE '"[0-9a-f:.]+/[0-9]+"' "$TF_FILE" | tr -d '"' | sort -u) || true) if [[ -z "$DIFF" ]]; then echo echo ">>> Aucune difference : rien a faire." exit 0 fi echo echo ">>> DIFFERENCES DETECTEES :" echo "$DIFF" if ! $WRITE; then cat <<'MSG' Relancez avec --write pour mettre a jour terraform/firewall.tf, puis : cd terraform && terraform plan && terraform apply Pensez aussi a reporter la liste dans la configuration Traefik : /var/lib/rancher/k3s/server/manifests/traefik-config.yaml (sur app-01) puis : sudo systemctl restart k3s MSG exit 2 fi BLOCK_V4=$(echo "$V4" | sed 's/^/ "/; s/$/",/') BLOCK_V6=$(echo "$V6" | sed 's/^/ "/; s/$/",/') python3 - "$TF_FILE" <>> Verifiez le diff avant d'appliquer :" echo " git diff infra/prod/terraform/firewall.tf" echo " cd infra/prod/terraform && terraform plan"