Hopp til hovedinnholdet

Sikkerhet og herding

Denne siden samler sikkerhetsbeslutningene for en selvbetjent Kanera-distribusjon. Den dekker hva som står overfor internett, hvilke hemmeligheter som betyr noe, hva serveren kontakter, og hvilke innstillinger som skal strammes når stakken kjører.

Les det etterpå Komme i gang. De detaljerte innstillingene lever på de andre selv-host sidene, som er koblet fra hver seksjon.

Hva som møter internett​

Den sammenpakkede docker-compose.yml publiserer ingen av applikasjonstjenestene. Du bestemmer hva du skal publisere, vanligvis gjennom en compose.override.yml og en omvendt proxy. Se Tjenester og rute.

TjenesterEksponeringNotater
webOffentlig, bak HTTPS-proxyenDen eneste tjenesten nettlesere trenger. Dens nginx videresender app API og sanntidstrafikk til api internt.
public-apiValgfritt, offentligPubliser det bare for integrasjoner, API-referansen eller AI-agenten OAuth.
mcpValgfritt, offentligPubliser det bare hvis eksterne AI-klienter skal koble til.
apiKun interntGi aldri hoved-API-en sin egen offentlige domene.
workerKun interntKjører planleggere og utgående levering.
postgresBare verts-tilbakekoblingBundet til 127.0.0.1:5433 som standard (POSTGRES_BIND_PORT). Bruk en SSH-tunnel for ekstern tilgang.
valkeyKun interntIngen publisert port. Den kjører uten passord på Compose-nettverket, så publiser den aldri.
admin-apiAv som standardStarter bare med COMPOSE_PROFILES=admin. Sett det på sitt eget domene hvis du aktiverer det.
OvervåkingAv som standardMed monitoring Profil, Prometheus og Grafana binder seg til 127.0.0.1 Med mindre du setter MONITORING_BIND_IP, for eksempel til en VPN-adresse. Aldri binde dem til 0.0.0.0.

Jo færre tjenester du publiserer, desto mindre er det å angripe. En distribusjon som bare bruker webappen, trenger et enkelt offentlig domene.

TLS og omvendt proxy​

Kanera's containere snakker vanlig HTTP. Avslutt TLS på din omvendt proxy eller lastbalanser (Caddy, Traefik, nginx eller en skylastbalanser), og tjene alle offentlige domener over HTTPS.

  • Sett COOKIE_SECURE=trueog gjør WEB_ORIGIN og COOKIE_DOMAIN Passer til offentlig HTTPS-adresse.
  • Nettcontaineren sender Strict-Transport-Security med includeSubDomains og ett års levetid. Nettlesere vil da insistere på HTTPS for underdomener av appdomenet også, så hold API, MCP og admin underdomener på HTTPS.
  • Det er også en sikkerhetspolicy for innhold. X-Frame-Options: SAMEORIGIN, X-Content-Type-Options: nosniffog en restriktiv Permissions-PolicyIkke ta dem av ved proxyen.

Rate limits og påloggings struper bruke klienten IP. At IP er bare pålitelig når en proxy overskriver videresending overskrifter:

InnstillingSkriv standardSett til true når
API_TRUST_PROXYfalseAppen sitter bak en proxy som setter den virkelige klienten IP.
PUBLIC_API_TRUST_PROXYfalseDet samme gjelder for offentlig API.
MCP_TRUST_PROXYtrueLa det være true bare når MCP kan nås utelukkende gjennom en slik proxy.
ADMIN_TRUST_PROXYtrueLa det være true bare mens admin API er tilgjengelig utelukkende gjennom en slik proxy.

Hvis en tjeneste stoler på proxy-headere, men klienter kan nå det direkte, kan de smi sin IP og komme seg rundt per IP-grenser.

Hemmeligheter​

Generer hver hemmelighet separat, for eksempel med openssl rand -hex 32og oppbevare dem i en hemmelig butikk utenfor serveren, så vel som i .env. I produksjon, API nekter å starte mens kjente utvikling plassholdere er fortsatt i bruk. Det nekter også å starte når SECRETS_ENCRYPTION_KEY mangler eller er lik JWT_SECRETeller når MCP_INTERNAL_SECRET eller ADMIN_JWT_SECRET lik JWT_SECRET.

HemmeligBeskytterHvis du endrer det
POSTGRES_PASSWORDDatabasen logg innOppdater den løpende databasebrukeren også.
JWT_SECRETApp-økterDette er den raskeste måten å avslutte hver økt etter en mistenkt lekkasje.
MFA_ENCRYPTION_KEYAutentiseringshemmeligheter og gjenopprettingskoderAlle registrerte autentiseringsenheter slutter å fungere.
MEDIA_SIGNING_SECRETSignerte medieadresserEksisterende medielinker slutter å løse seg.
SECRETS_ENCRYPTION_KEYLagret SMTP, lagring, webhook, chat destinasjon og GitHub App legitimasjonLagrede legitimasjon kan ikke lenger dekrypteres og må legges inn på nytt.
MCP_INTERNAL_SECRETPrivat utveksling mellom mcp og public-apiAngi samme nye verdi på begge tjenestene. MCP-forespørsler under flyvning kan mislykkes.
ADMIN_JWT_SECRETLedelsesportal økterPortal admins er logget ut.
METRICS_TOKEN/metrics skrapingOppdater Prometheus for å matche.
DB_BACKUP_ENCRYPTION_PASSPHRASEKrypterte sikkerhetskopierSikkerhetskopier laget med den gamle passordfrasen trenger fortsatt den gamle passordfrasen.

Kanera har ingen innebygd måte å re-kryptere lagrede data under en ny nøkkel. Treat MFA_ENCRYPTION_KEY og SECRETS_ENCRYPTION_KEY som langlivet, og planlegg en rotasjon før du trenger en. Se Hemmeligheter verdt å holde.

Målestokken er som standard, men /metrics returer 404 til METRICS_TOKEN er satt. Overvåkingsprofilen nekter å starte uten METRICS_TOKEN og GRAFANA_ADMIN_PASSWORD.

Utgående trafikk​

Kanera har ingen oppdateringssjekk. Produktanalyse er avslått som standard og er kun beregnet for Kanera Cloud. Serveren kontakter bare destinasjoner som du, administratorene eller brukerne dine konfigurerer:

  • Din SMTP-server, S3-kompatibel lagring og backup bøtte.
  • Push-tjenester for nettlesere, når en organisasjonsadministrator aktiverer push.
  • Arbeidsområde webhooks og chat destinasjoner (Slack, Discord, Telegram, Zulip) satt opp av arbeidsområde administratorer.
  • Personlige ntfy, Gotify eller webhook-kanaler satt opp av brukere.
  • ALERT_WEBHOOK_URL for driftsvarsler, hvis de er satt.
  • Trello, under en import som kopierer vedlegg med TRELLO_API_KEY, og GitHub, når en GitHub App er konfigurert for forhåndsvisning av koblinger.
  • Cloudflare Turnstile, bare når tastene er satt. La dem være uinnstilt for normal selvhosting.

Ett mål er ikke operatørkonfigurert. Når en AI-klient ringer MCP search.docs MCP-tjenesten laster ned den offentlige dokumentasjonsindeksen fra https://www.kanera.app/docs-search.json og søker den lokalt. Søkeforespørselen sendes ikke.

Private nettverk​

Arbeidsområde webhooks og chat destinasjoner må bruke offentlige HTTPS-adresser. Kanera nekter loopback, privat, CGNAT, link-lokal og sky metadata, og andre reserverte adresser. Det sjekker adressen igjen ved leveringstid og følger ikke viderekoblinger. Det stopper en webhook eller chat destinasjon fra å bli pekt på tjenester i nettverket.

Personlige varslingskanaler følger samme regel med mindre du melder deg på:

KANERA_ALLOW_PRIVATE_NOTIFICATION_DESTINATIONS=true

Dette lar brukerne sende ntfy, Gotify og personlige webhook-varsler til http:// og private nettverksmottakere. Link-lokale og metadataadresser, multicast og andre reserverte områder forblir blokkert. Det slapper ikke av regelen for arbeidsområde webhooks eller chat-destinasjoner. Slå den på bare hvis du godtar at en bruker kan få serveren til å sende forespørsler til verter på ditt interne nettverk. Se E-post og varsler.

Sikkerhetskopier​

Den valgfrie db-backup tjenesten krypterer hver PostgreSQL-dump med GPG-symmetrisk AES-256 før den lastes opp til S3-kompatibel lagring. pg_dump er ikke kryptert, så krypter den selv før den forlater serveren. kanera_uploads Volumet dekkes ikke av db-backup og trenger sin egen sikkerhetskopi. Hold sikkerhetskopier og sikkerhetskopipassordet av serverens primære disk. Se Lagring og sikkerhetskopiering.

Oppdateringer​

Sikkerhetsrettelser er gitt for den nyeste taggede utgivelsen. Kjør en tagget utgave i stedet for den main gren, oppdatere når en ny sendes, les utgivelsesnotatene, og sikkerhetskopier før du oppdaterer. Tredjepartsbilder i komponere-filen er festet til eksakte versjoner, slik at en rutinemessig omdistribuering ikke endrer PostgreSQL eller Valkey uten en gjennomgått endring. Se Oppdateringer og skalering.

Kontoer og pålogging​

  • Lukk offentlig signup. Etter at du har opprettet organisasjonen, angir SIGNUPS_ENABLED=false. Invitasjonskoblinger fortsetter å fungere.
  • Bekreft e-postadresser. Når utgående e-post fungerer, angi EMAIL_VERIFICATION_ENABLED=true.
  • Fortsett å strupe. AUTH_RATE_LIMIT_ENABLED standardverdier til trueDet er mulig å utføre 10 forsøk per minutt per IP.
  • Krever MFA. Organisasjonsadministratorer kan kreve en autentiseringsfunksjon for alle under Innstillinger -> Organisasjon -> Sikkerhet. Se Profil og sikkerhet.
  • Sessions levetid. App tilgang tokens siste 5 minutter og oppdatere økter 10 dager (JWT_ACCESS_TTL, JWT_REFRESH_TTL_DAYS).
  • Forvaltningsportal. Den er avslått som standard og bruker sine egne kontoer og hemmelighet. Hvis du aktiverer den, fungerer støtteøktene som eier av en målorganisasjon. Hver enkelt er registrert i en revisjonslogg og utløper på egen hånd, etter 60 minutter som standard (SUPPORT_SESSION_TTL_MINUTES, på det meste 480).

AI agent tilgang​

Expose mcp og OAuth-rutene på public-api bare hvis du vil ha eksterne AI-klienter. Plan gating gjelder ikke for selvbetjente distribusjoner, så når MCP er tilgjengelig, kan ethvert medlem koble til en agent som fungerer med det medlemmets tillatelser.

  • Sett MCP_SERVER_PUBLIC_URL og PUBLIC_API_OAUTH_ISSUER OAuth-tokens er bundet til den MCP-adressen og avvist av /api/v1.
  • Alle kunder kan registrere seg /oauth/register. Registrering gir ingenting før en innlogget bruker godkjenner tilkoblingen på samtykkeskjermen.
  • Autentiserte offentlige API- og MCP-forespørsler er som standard begrenset til 400 per minutt per legitimasjon. Feilslåtte nøkkelforsøk er begrenset til 10 per minutt per IP. Se Miljøreferanse.
  • MCP-tjenesten logger navnet på hvert verktøyanrop, varighet og utfall, men ikke argumentene.

Se Integrasjoner og APIer for oppsett og Agent tillatelser og sikkerhet Hva en agent kan gjøre.

Rapporter et sikkerhetsproblem​

Ikke åpne et offentlig problem for et sikkerhetsproblem. [email protected] med en beskrivelse, reproduksjonstrinn, den berørte komponenten, og om det påvirker standard selvbetjent konfigurasjon. Rapporter bekreftes innen fem virkedager. Se SIKKERHET.md i Kanera-depotet for omfang og avsløring.