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.
| Tjenester | Eksponering | Notater |
|---|---|---|
web | Offentlig, bak HTTPS-proxyen | Den eneste tjenesten nettlesere trenger. Dens nginx videresender app API og sanntidstrafikk til api internt. |
public-api | Valgfritt, offentlig | Publiser det bare for integrasjoner, API-referansen eller AI-agenten OAuth. |
mcp | Valgfritt, offentlig | Publiser det bare hvis eksterne AI-klienter skal koble til. |
api | Kun internt | Gi aldri hoved-API-en sin egen offentlige domene. |
worker | Kun internt | Kjører planleggere og utgående levering. |
postgres | Bare verts-tilbakekobling | Bundet til 127.0.0.1:5433 som standard (POSTGRES_BIND_PORT). Bruk en SSH-tunnel for ekstern tilgang. |
valkey | Kun internt | Ingen publisert port. Den kjører uten passord på Compose-nettverket, så publiser den aldri. |
admin-api | Av som standard | Starter bare med COMPOSE_PROFILES=admin. Sett det på sitt eget domene hvis du aktiverer det. |
| Overvåking | Av som standard | Med 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ørWEB_ORIGINogCOOKIE_DOMAINPasser til offentlig HTTPS-adresse. - Nettcontaineren sender
Strict-Transport-SecuritymedincludeSubDomainsog 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 restriktivPermissions-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:
| Innstilling | Skriv standard | Sett til true når |
|---|---|---|
API_TRUST_PROXY | false | Appen sitter bak en proxy som setter den virkelige klienten IP. |
PUBLIC_API_TRUST_PROXY | false | Det samme gjelder for offentlig API. |
MCP_TRUST_PROXY | true | La det være true bare når MCP kan nås utelukkende gjennom en slik proxy. |
ADMIN_TRUST_PROXY | true | La 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.
| Hemmelig | Beskytter | Hvis du endrer det |
|---|---|---|
POSTGRES_PASSWORD | Databasen logg inn | Oppdater den løpende databasebrukeren også. |
JWT_SECRET | App-økter | Dette er den raskeste måten å avslutte hver økt etter en mistenkt lekkasje. |
MFA_ENCRYPTION_KEY | Autentiseringshemmeligheter og gjenopprettingskoder | Alle registrerte autentiseringsenheter slutter å fungere. |
MEDIA_SIGNING_SECRET | Signerte medieadresser | Eksisterende medielinker slutter å løse seg. |
SECRETS_ENCRYPTION_KEY | Lagret SMTP, lagring, webhook, chat destinasjon og GitHub App legitimasjon | Lagrede legitimasjon kan ikke lenger dekrypteres og må legges inn på nytt. |
MCP_INTERNAL_SECRET | Privat utveksling mellom mcp og public-api | Angi samme nye verdi på begge tjenestene. MCP-forespørsler under flyvning kan mislykkes. |
ADMIN_JWT_SECRET | Ledelsesportal økter | Portal admins er logget ut. |
METRICS_TOKEN | /metrics skraping | Oppdater Prometheus for å matche. |
DB_BACKUP_ENCRYPTION_PASSPHRASE | Krypterte sikkerhetskopier | Sikkerhetskopier 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_URLfor 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_ENABLEDstandardverdier tiltrueDet 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_URLogPUBLIC_API_OAUTH_ISSUEROAuth-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.