Quickstart · Prima scansione in 2 minuti

Ottieni oggi il tuo primo risultato di scansione WAFPass.

Installa la CLI WAFPass open source, scarica i controlli WAF++ e scansiona un file Terraform di esempio. Nessuna credenziale cloud, nessuna scatola nera — solo analisi statica sul tuo Infrastructure-as-Code.

v1.1.0
WAFPass CLI
8
Pilastri
83+
Controlli
Docker
Pronto per Compose
Apache 2.0
Licenza del codice

Preferisci un comando solo? L’installer configura la CLI e i controlli per te.

macOS / Linux curl -fsSL https://waf2p.dev/install.sh | sh
Windows irm https://waf2p.dev/install.ps1 | iex
SCEGLI IL TUO PERCORSO

Un percorso chiaro per ogni esigenza.

Inizia con il quickstart CLI di 2 minuti. Passa alle altre schede quando sei pronto per la dashboard, CI o la configurazione manuale.

Ottieni il tuo primo risultato in 2 minuti

Segui i quattro passaggi qui sotto. Ogni comando è pensato per darti un risultato leggibile e garantito al primo tentativo.

1

Installa la CLI

WAFPass è pubblicato su PyPI come wafpass-core. Si consiglia Python 3.11+.

bash
$ pip install wafpass-core
$ wafpass --version
2

Scarica i controlli

Il catalogo dei controlli WAF++ contiene le 83+ regole che WAFPass usa per valutare il tuo codice.

bash
$ git clone https://github.com/WAF2p/framework.git controls-src
$ cp -r controls-src/modules/controls/controls ./controls

Consigliato: clona il repo dei controlli. Alternativa: scarica lo zip dei controlli dalla pagina WAFPass ed estrailo in controls/.

3

Salva un file Terraform di esempio

Crea un main.tf minimale. Questo esempio lascia deliberatamente un bucket S3 pubblico in modo che WAFPass abbia qualcosa da segnalare.

provider "aws" {
  region = "eu-central-1"
}

resource "aws_s3_bucket" "public" {
  bucket = "wafpp-first-check-demo"
}

resource "aws_s3_bucket_public_access_block" "public" {
  bucket                  = aws_s3_bucket.public.id
  block_public_acls       = false
  block_public_policy     = false
  ignore_public_acls      = false
  restrict_public_buckets = false
}
4

Esegui il tuo primo controllo

Punta WAFPass sulla directory corrente e stampa il riepilogo JSON.

bash
$ wafpass check . --output json | jq '.summary'

Dovresti vedere un output come questo:

{
  "total_controls": 83,
  "passed": 81,
  "failed": 2,
  "pillars": {
    "security": { "passed": 18, "failed": 2 }
  }
}
81 passed — le risorse soddisfano il controllo
2 failed — le risorse violano un controllo (qui, il bucket S3 pubblico)
83 controls — regole totali valutate sui 8 pilastri WAF++

Esegui la dashboard completa in locale

Il monorepo WAF2p/pass include un docker-compose.yml unificato. Avvia CLI, server, dashboard, PostgreSQL e Keycloak con un solo comando.

bash
$ git clone https://github.com/WAF2p/pass.git
$ cd pass
$ cp .env.example .env
$ # Edit .env — set POSTGRES_PASSWORD, WAFPASS_JWT_SECRET, etc.
$ docker compose up -d
ServizioURLDescrizione
wafpass-dashboardhttp://localhost:3000Dashboard React
wafpass-serverhttp://localhost:8000API REST FastAPI
Keycloak (SSO)http://localhost:8080Provider di identità (admin / admin)
postgreslocalhost:5432Database PostgreSQL

Quando i container sono pronti, popola la tua prima vista della dashboard con il comando demo o inviando un risultato di scansione:

bash
$ wafpass demo # crea dati di esempio e apre la dashboard
$ open http://localhost:3000
Visualizza il docker-compose.yml completo
services:

  # ── PostgreSQL ────────────────────────────────────────────
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER:     ${POSTGRES_USER:-wafpass}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-wafpass}
      POSTGRES_DB:       ${POSTGRES_DB:-wafpass}
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./keycloak/init.sql:/docker-entrypoint-initdb.d/01-keycloak-db.sql:ro
    ports:
      - "${POSTGRES_PORT:-5432}:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-wafpass} -d ${POSTGRES_DB:-wafpass}"]
      interval: 5s
      timeout: 5s
      retries: 10

  # ── wafpass-server ────────────────────────────────────────
  wafpass-server:
    build:
      context: .
      dockerfile: wafpass-server/Dockerfile
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      DATABASE_URL:               postgresql+asyncpg://${POSTGRES_USER:-wafpass}:${POSTGRES_PASSWORD:-wafpass}@postgres:5432/${POSTGRES_DB:-wafpass}
      WAFPASS_ENV:                ${WAFPASS_ENV:-local}
      CORS_ORIGINS:               ${API_URL:-http://localhost:3000},http://wafpass-dashboard,http://cloud.waf2p
      WAFPASS_CONTROLS_DIR:       ${WAFPASS_CONTROLS_DIR:-/app/controls}
      WAFPASS_JWT_SECRET:         ${WAFPASS_JWT_SECRET:-change-me-in-production}
      WAFPASS_JWT_EXPIRE_MINUTES: ${WAFPASS_JWT_EXPIRE_MINUTES:-60}
      WAFPASS_JWT_REFRESH_DAYS:   ${WAFPASS_JWT_REFRESH_DAYS:-7}
      WAFPASS_ADMIN_USERNAME:     ${WAFPASS_ADMIN_USERNAME:-admin}
      WAFPASS_ADMIN_PASSWORD:     ${WAFPASS_ADMIN_PASSWORD:-admin}
      WAFPASS_ADMIN_ROLE:         ${WAFPASS_ADMIN_ROLE:-admin}
      WAFPASS_API_KEY:            ${WAFPASS_API_KEY:-key}
    ports:
      - "8000:8000"

  # ── Keycloak (SSO / IdP — dev mode) ──────────────────────
  keycloak:
    image: quay.io/keycloak/keycloak:26.1
    command: start-dev
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      KC_DB:                   postgres
      KC_DB_URL:               jdbc:postgresql://postgres:5432/${KEYCLOAK_DB:-keycloak}
      KC_DB_USERNAME:          ${KEYCLOAK_DB_USER:-keycloak}
      KC_DB_PASSWORD:          ${KEYCLOAK_DB_PASSWORD:-keycloak}
      KEYCLOAK_ADMIN:          ${KEYCLOAK_ADMIN_USER:-admin}
      KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD:-admin}
      KC_HTTP_ENABLED:         "true"
      KC_HOSTNAME_STRICT:      "false"
      KC_HEALTH_ENABLED:       "true"
    ports:
      - "${KEYCLOAK_PORT:-8080}:8080"
    healthcheck:
      test: ["CMD-SHELL", "curl -sf http://localhost:8080/health/ready || exit 1"]
      interval: 15s
      timeout: 5s
      retries: 20
      start_period: 60s

  # ── wafpass-dashboard ─────────────────────────────────────
  wafpass-dashboard:
    build:
      context: ./wafpass-dashboard
      dockerfile: Dockerfile
    restart: unless-stopped
    depends_on:
      - wafpass-server
    ports:
      - "3000:80"

volumes:
  postgres_data:

Aggiungi a CI / pre-commit

Blocca l'infrastruttura non conforme prima che raggiunga il tuo branch principale. WAFPass gira interamente sui file del repo, quindi i controlli CI sono veloci e non richiedono segreti cloud.

1

Installa il hook pre-commit

Esegui lo script di installazione dal repository WAFPass una volta per clone. Dopo di che, ogni git commit viene verificato automaticamente.

bash
$ bash hooks/install.sh # macOS / Linux / Git Bash
$ .\hooks\install.ps1 # Windows PowerShell
2

Aggiungi WAFPass a GitHub Actions

Usa l'azione GitHub ufficiale di WAFPass per far fallire le pull request che introducono errori di configurazione. Funziona con repository pubblici e privati.

Configura l'azione WAFPass →

Configurazione avanzata / manuale

Installa solo i componenti di cui hai bisogno. Inizia con la CLI per CI/CD, poi aggiungi server e dashboard quando ti servono persistenza ed esplorazione visiva.

1
Installa la CLI wafpass

Motore di valutazione core — analizza IaC, valuta i controlli, genera report

Da PyPI (consigliato)

bash
$ pip install wafpass-core
$ uv add wafpass-core # consigliato per progetti Python

Dal codice sorgente

bash
$ git clone https://github.com/WAF2p/pass.git
$ cd pass
$ uv pip install -e . # consigliato
$ pip install -e ".[pdf]" # con supporto report PDF

macOS (serie Apple M)

bash
$ brew install git python uv
$ git clone https://github.com/WAF2p/pass.git && cd pass
$ uv pip install -e .
$ wafpass --version # verifica installazione
2
Installa wafpass-server

Layer di persistenza FastAPI — memorizza esecuzioni, deroghe, risultati sui segreti ed eventi di audit

Da PyPI (consigliato)

bash
$ pip install wafpass-server
$ uv add wafpass-server # consigliato per progetti Python

Configura e avvia

bash
$ cp .env.example .env # imposta DATABASE_URL e il segreto JWT
$ alembic upgrade head # applica le migrazioni del database
$ uvicorn wafpass_server.main:app --reload --port 8000

Documentazione API disponibile presso http://localhost:8000/api/docs

3
Installa wafpass-dashboard

Dashboard web React — 22+ viste di compliance, esportazione di evidenze, RBAC

bash
$ git clone https://github.com/WAF2p/wafpass-dashboard.git
$ cd wafpass-dashboard
$ npm install
$ cp .env.example .env.local # imposta VITE_API_URL
$ npm run dev # server dev all'indirizzo http://localhost:5173
RISOLUZIONE DEI PROBLEMI

Problemi comuni e soluzioni.

Risposte rapide se qualcosa non funziona al primo tentativo.

Controlli non trovati

Se wafpass check segnala "controls directory not found", la CLI mostrerà automaticamente le istruzioni per il download. Assicurati che la cartella controls/ si trovi accanto a dove esegui le scansioni.

Porta già in uso

Usa una porta diversa per il server o la dashboard:

$ uvicorn wafpass_server.main:app --port 8001
$ npm run dev -- --port 5174
Errori di connessione al database

Verifica che PostgreSQL sia in esecuzione e che il tuo DATABASE_URL sia corretto:

$ psql $DATABASE_URL -c "SELECT 1"
Build Docker fallisce

Assicurati che tutti e tre i repository siano clonati fianco a fianco nella stessa directory padre quando fai la build dal codice sorgente:

$ ls -1
pass/
wafpass-server/
wafpass-dashboard/