Files
PythagorasGoal/docker-compose.yml
T
Adriano Dal Pastro f81c783ea7 fix(sicurezza): dashboard 8787 solo su 127.0.0.1, era raggiungibile da internet
La riga era "8787:8787", cioe' pubblicata su tutte le interfacce. ufw non la
fermava: il DNAT che Docker installa in nat/PREROUTING devia il pacchetto prima
della catena INPUT su cui ufw lavora, e in FORWARD la catena DOCKER lo accetta
prima delle catene ufw-*-forward (DOCKER-USER era vuota). Verificato: da IP
pubblico la dashboard rispondeva HTTP 200.

Dietro c'erano conto e posizioni reali (monta .env.mainnet per lo Shadow live),
senza autenticazione, su http.server della stdlib, processo root.

Svista e non scelta: la riga sotto lega gia' il gateway IB a 127.0.0.1 con il
commento "raggiungibile solo da localhost dell'host".

Dopo il fix: DNAT con -d 127.0.0.1/32, listener solo su 127.0.0.1:8787, da IP
pubblico connessione rifiutata. pythagoras-ibgw non toccato.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 09:35:49 +00:00

38 lines
1.8 KiB
YAML

# Solo MONITOR (dashboard paper) del portafoglio attivo. Niente runner/esecuzione reale
# (archiviati in Old/). v2.0.0+.
services:
dashboard:
build: .
container_name: pythagoras-dashboard
restart: unless-stopped
command: ["uv", "run", "python", "-m", "src.live.dashboard", "--port", "8787"]
ports:
# Bind SOLO su 127.0.0.1: la dashboard non ha autenticazione e mostra conto e
# posizioni reali (Shadow live). Fino al 2026-08-04 era "8787:8787", cioe' pubblicata
# su tutte le interfacce e raggiungibile da internet: ufw NON protegge le porte
# pubblicate da Docker (il DNAT scavalca la catena INPUT). La consuma AI-OS da
# localhost per le risposte via Telegram.
- "127.0.0.1:8787:8787"
volumes:
- ./data:/app/data:ro
# token mainnet (sola lettura) per lo "Shadow live": conto/posizioni reali sulla dashboard.
# Montato a runtime (NON nell'immagine: .env.mainnet e' dockerignored). Solo letture, nessun ordine.
- ./.env.mainnet:/app/.env.mainnet:ro
# IB Gateway (PAPER) per la RICERCA DATI Interactive Brokers — replica il setup provato di BuzWay
# (scout). IBC fa login automatico headless; nessuna GUI desktop. API READ-ONLY (solo dati storici,
# MAI ordini). Bind SOLO su 127.0.0.1 -> non esposto in rete. Credenziali in .env.ibgw (gitignored).
# host 4002 -> container 4004 (socat paper), esattamente come nel connect("127.0.0.1", 4002).
ib-gateway:
image: ghcr.io/gnzsnz/ib-gateway:stable
container_name: pythagoras-ibgw
restart: unless-stopped
env_file: .env.ibgw
environment:
TRADING_MODE: paper
READ_ONLY_API: "yes" # SOLO dati: nessun ordine possibile via API
TWOFA_TIMEOUT_ACTION: restart
TIME_ZONE: Europe/Rome
ports:
- "127.0.0.1:4002:4004" # gateway paper (socat) raggiungibile solo da localhost dell'host