#!/usr/bin/env bash set -euo pipefail # ============================================================ # CrowdSec Setup Script # ============================================================ # Este script prepara los directorios, genera la clave del # bouncer y despliega la configuracion dinamica de Traefik. # ============================================================ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ENV_FILE="${SCRIPT_DIR}/.env" echo "=== CrowdSec Setup ===" # 1. Cargar .env if [ ! -f "${ENV_FILE}" ]; then echo "ERROR: No se encontro ${ENV_FILE}" echo "Crea ${ENV_FILE} con las variables reales y editalo:" echo " nano ${ENV_FILE}" exit 1 fi set -a source "${ENV_FILE}" set +a # 2. Generar clave del bouncer si no esta definida if [ "${CROWDSEC_BOUNCER_API_KEY}" = "change-me-to-a-random-64-char-hex" ] || [ -z "${CROWDSEC_BOUNCER_API_KEY}" ]; then CROWDSEC_BOUNCER_API_KEY=$(openssl rand -hex 32) echo "INFO: Generada nueva CROWDSEC_BOUNCER_API_KEY" sed -i "s/^CROWDSEC_BOUNCER_API_KEY=.*/CROWDSEC_BOUNCER_API_KEY=${CROWDSEC_BOUNCER_API_KEY}/" "${ENV_FILE}" fi # 3. Crear directorios necesarios sudo mkdir -p "${CROWDSEC_CONFIG_PATH}" sudo mkdir -p "${CROWDSEC_DATA_PATH}" sudo mkdir -p "${TRAEFIK_LOG_PATH}" # 4. Ajustar permisos para SELinux if command -v selinuxenabled &>/dev/null && selinuxenabled; then sudo chcon -Rt svirt_sandbox_file_t "${CROWDSEC_CONFIG_PATH}" 2>/dev/null || true sudo chcon -Rt svirt_sandbox_file_t "${CROWDSEC_DATA_PATH}" 2>/dev/null || true sudo chcon -Rt svirt_sandbox_file_t "${TRAEFIK_LOG_PATH}" 2>/dev/null || true fi # 5. Generar Traefik dynamic config con la key del bouncer TRAEFIK_DYNAMIC_DIR="/opt/traefik/dynamic" TEMPLATE="${SCRIPT_DIR}/traefik-crowdsec-bouncer.yml" OUTPUT="${TRAEFIK_DYNAMIC_DIR}/crowdsec-bouncer.yml" if [ -f "${TEMPLATE}" ]; then sudo mkdir -p "${TRAEFIK_DYNAMIC_DIR}" sed "s/{{CROWDSEC_BOUNCER_API_KEY}}/${CROWDSEC_BOUNCER_API_KEY}/g" "${TEMPLATE}" | sudo tee "${OUTPUT}" > /dev/null echo "INFO: Traefik dynamic config generado en ${OUTPUT}" else echo "WARN: No se encontro ${TEMPLATE}, la config dinamica de Traefik debe crearse manualmente" fi # 6. Generar acquis.yaml para CrowdSec (lee logs de Traefik) ACQUIS_FILE="${CROWDSEC_CONFIG_PATH}/acquis.yaml" if [ ! -f "${ACQUIS_FILE}" ]; then sudo tee "${ACQUIS_FILE}" > /dev/null < /dev/null <.middlewares: "crowdsec-bouncer@file"' echo "" echo "Dashboard Grafana (requiere Authentik): https://${CROWDSEC_GRAFANA_DOMAIN}"