Guia de Despliegue en Produccion¶
Esta guia cubre el despliegue de mcp-scan en entornos de produccion con requisitos de alta disponibilidad y seguridad.
Vista General de la Arquitectura¶
┌─────────────────────────────────────────────────────────────┐
│ Stack de Produccion │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ mcp-scan │ │ Ollama │ │ CodeQL │ │
│ │ (escaner) │───▶│ (local) │ │ (binario) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │
│ │ ┌──────────────┐ │ │
│ └───────────▶│ Servidores │◀──────────┘ │
│ │ LSP │ │
│ │ (pyright, │ │
│ │ gopls) │ │
│ └──────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ APIs Externas │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Claude │ │ OpenAI │ │ LLM │ │ │
│ │ │ API │ │ API │ │ Custom │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Requisitos del Sistema¶
Requisitos Minimos¶
| Componente | Requisito |
|---|---|
| CPU | 4 nucleos |
| RAM | 8 GB |
| Disco | 20 GB SSD |
| SO | Linux (Ubuntu 22.04+, RHEL 8+) |
Recomendado para Produccion¶
| Componente | Requisito |
|---|---|
| CPU | 8+ nucleos |
| RAM | 32 GB |
| Disco | 100 GB NVMe SSD |
| GPU | GPU NVIDIA (para Ollama local) |
| SO | Linux (Ubuntu 22.04 LTS) |
Instalacion¶
1. Instalar mcp-scan¶
# Desde codigo fuente
git clone https://github.com/mcphub/mcp-scan.git
cd mcp-scan
make build
sudo mv bin/mcp-scan /usr/local/bin/
# O mediante go install
go install github.com/mcphub/mcp-scan/cmd/mcp-scan@latest
2. Instalar CodeQL¶
# Descargar CodeQL CLI
CODEQL_VERSION=2.16.0
curl -L -o codeql.tar.gz \
"https://github.com/github/codeql-cli-binaries/releases/download/v${CODEQL_VERSION}/codeql-linux64.tar.gz"
# Instalar
sudo tar xzf codeql.tar.gz -C /opt/
sudo ln -sf /opt/codeql/codeql /usr/local/bin/codeql
# Descargar paquetes de lenguaje
codeql pack download codeql/python-queries
codeql pack download codeql/javascript-queries
codeql pack download codeql/go-queries
# Verificar
codeql version
codeql resolve languages
3. Instalar Servidores de Lenguaje¶
# Servidores de lenguaje Node.js
npm install -g pyright typescript typescript-language-server
# Servidor de lenguaje Python (alternativa)
pip3 install python-lsp-server[all]
# Servidor de lenguaje Go
go install golang.org/x/tools/gopls@latest
# Verificar
./scripts/check-lsp.sh
4. Instalar Ollama (Opcional)¶
# Instalar Ollama
curl -fsSL https://ollama.ai/install.sh | sh
# Configurar servicio systemd
sudo systemctl enable ollama
sudo systemctl start ollama
# Descargar modelos
ollama pull llama3.2:3b
# Verificar
curl http://localhost:11434/api/tags
Configuracion¶
Configuracion del Sistema¶
Crear /etc/mcp-scan/config.yaml:
version: "1"
# Configuracion de analisis
mode: deep
timeout: 30m
workers: 0 # Auto-detectar
fail_on: high
# Patrones de archivos
include:
- "**/*.py"
- "**/*.ts"
- "**/*.js"
- "**/*.go"
exclude:
- "**/node_modules/**"
- "**/venv/**"
- "**/vendor/**"
- "**/dist/**"
- "**/build/**"
- "**/*.min.js"
- "**/*_test.*"
- "**/test/**"
# Configuracion LLM
llm:
enabled: true
provider: "" # Auto-detectar
url: "http://localhost:11434"
threshold: 0.7
timeout: "60s"
max_length: 5000
# Configuracion CodeQL
codeql:
enabled: true
path: "/usr/local/bin/codeql"
timeout: "30m"
queries_dir: "/opt/mcp-scan/codeql-queries/mcp"
min_severity: 5.0
languages:
- python
- javascript
- go
# Configuracion LSP
lsp:
enabled: true
languages:
- python
- typescript
- go
# Configuracion ML
ml:
enabled: true
threshold: 0.3
model_path: "/opt/mcp-scan/ml_weights.json"
# Configuracion de salida
output:
format: sarif
include_trace: true
redact_snippets: false
Variables de Entorno¶
Crear /etc/mcp-scan/env:
# Claves API de LLM
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
# Sobreescribir valores por defecto
MCP_SCAN_LLM_PROVIDER=claude
MCP_SCAN_CODEQL_TIMEOUT=1h
Servicio Systemd¶
Crear /etc/systemd/system/mcp-scan.service:
[Unit]
Description=MCP-SCAN Escaner de Seguridad
After=network.target ollama.service
[Service]
Type=oneshot
EnvironmentFile=/etc/mcp-scan/env
ExecStart=/usr/local/bin/mcp-scan scan /var/lib/mcp-scan/workspace --config /etc/mcp-scan/config.yaml
WorkingDirectory=/var/lib/mcp-scan
User=mcp-scan
Group=mcp-scan
# Hardening de seguridad
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/mcp-scan
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Hardening de Seguridad¶
Gestion de Claves API¶
# Usar administrador de secretos
export ANTHROPIC_API_KEY=$(aws secretsmanager get-secret-value \
--secret-id mcp-scan/anthropic-key \
--query SecretString --output text)
# O usar HashiCorp Vault
export ANTHROPIC_API_KEY=$(vault kv get -field=api_key secret/mcp-scan/anthropic)
Seguridad de Red¶
# Restringir Ollama a localhost
# En /etc/ollama/config
OLLAMA_HOST=127.0.0.1:11434
# Reglas de firewall
sudo ufw allow from 127.0.0.1 to any port 11434
sudo ufw deny 11434
Permisos de Archivos¶
# Crear usuario de servicio
sudo useradd -r -s /bin/false mcp-scan
# Establecer propiedad
sudo chown -R mcp-scan:mcp-scan /var/lib/mcp-scan
sudo chown -R mcp-scan:mcp-scan /opt/mcp-scan
# Restringir archivo de configuracion
sudo chmod 600 /etc/mcp-scan/env
sudo chown root:mcp-scan /etc/mcp-scan/env
Alta Disponibilidad¶
Balanceo de Carga¶
Para escaneo a escala, desplegar multiples instancias detras de un balanceador de carga:
# docker-compose.ha.yml
version: '3.8'
services:
scanner-1:
image: mcp-scan:latest
environment:
- ANTHROPIC_API_KEY
deploy:
replicas: 3
resources:
limits:
cpus: '4'
memory: 8G
ollama:
image: ollama/ollama:latest
deploy:
replicas: 2
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
Cache¶
Habilitar cache de resultados para mejorar el rendimiento:
Monitoreo¶
Metricas Prometheus¶
# prometheus.yml
scrape_configs:
- job_name: 'mcp-scan'
static_configs:
- targets: ['localhost:9090']
metrics_path: /metrics
Dashboard Grafana¶
Metricas clave a monitorear:
mcp_scan_duration_seconds- Duracion del escaneomcp_scan_findings_total- Total de hallazgosmcp_scan_llm_requests_total- Llamadas a API de LLMmcp_scan_llm_latency_seconds- Tiempo de respuesta del LLMmcp_scan_errors_total- Cantidad de errores
Alertas¶
# alertmanager.yml
groups:
- name: mcp-scan
rules:
- alert: HallazgoSeveridadAlta
expr: mcp_scan_findings_total{severity="critical"} > 0
labels:
severity: critical
annotations:
summary: Vulnerabilidad critica detectada
- alert: LatenciaLLMAlta
expr: mcp_scan_llm_latency_seconds > 30
labels:
severity: warning
annotations:
summary: El tiempo de respuesta del LLM es alto
Respaldo y Recuperacion¶
Estrategia de Respaldo¶
# Respaldar modelo ML y configuracion
tar czf mcp-scan-backup.tar.gz \
/etc/mcp-scan/ \
/opt/mcp-scan/ml_weights.json \
/opt/mcp-scan/codeql-queries/
# Almacenar en S3
aws s3 cp mcp-scan-backup.tar.gz s3://backups/mcp-scan/
Recuperacion¶
# Restaurar desde respaldo
aws s3 cp s3://backups/mcp-scan/mcp-scan-backup.tar.gz .
tar xzf mcp-scan-backup.tar.gz -C /
# Reiniciar servicios
sudo systemctl restart mcp-scan ollama
Solucion de Problemas¶
Problemas Comunes¶
Sin Memoria¶
Escaneos Lentos¶
# Reducir timeout de CodeQL
mcp-scan scan . --codeql-timeout 10m
# Limitar lenguajes
mcp-scan scan . --codeql-languages python
# Aumentar paralelismo
mcp-scan scan . --workers 8
Limitacion de Tasa del LLM¶
# Reducir umbral para evitar llamadas innecesarias
mcp-scan scan . --llm-threshold 0.9
# Usar Ollama local en lugar de la nube
mcp-scan scan . --llm-provider ollama
Modo Debug¶
# Habilitar logging verboso
mcp-scan scan . --verbose 2>&1 | tee scan.log
# Verificar componente especifico
MCP_SCAN_DEBUG=llm mcp-scan scan .
MCP_SCAN_DEBUG=codeql mcp-scan scan .
Mantenimiento¶
Tareas Regulares¶
| Tarea | Frecuencia | Comando |
|---|---|---|
| Actualizar mcp-scan | Semanal | go install github.com/mcphub/mcp-scan/cmd/mcp-scan@latest |
| Actualizar CodeQL | Mensual | codeql pack upgrade |
| Re-entrenar modelo ML | Mensual | python scripts/train_ml.py |
| Limpiar cache | Semanal | rm -rf /var/cache/mcp-scan/* |
| Actualizar modelos Ollama | Mensual | ollama pull llama3.2:3b |