Prezentare generală
CRM-ul dvs. conține clienții, oportunitățile, e-mailurile și calendarul dvs. Atunci când o remediere de securitate este lansată într-o versiune Twenty, remedierea în sine le indică atacatorilor unde să caute, iar fiecare instanță care nu a fost încă actualizată este o țintă. Actualizarea rapidă este adevărata soluție, dar majoritatea instanțelor auto-găzduite rulează cu câteva versiuni în urmă. Cea mai bună protecție până când actualizați este simplă: asigurați-vă că nimeni de pe internet nu vă poate accesa instanța. Această pagină arată cum să faceți acest lucru cu Tailscale, Cloudflare sau propriul proxy invers.Privat în mod implicit
Împărțiți instanța în trei zone:
Fiecare cale acoperă tot ce se află sub ea. Deschideți zonele publice și AI în cloud numai dacă utilizați funcționalitățile din spatele acestora; consultați Căi publice. În caz contrar, păstrați întreaga instanță privată. Asistenții AI care rulează pe calculatoarele echipei dvs., precum Claude Code, nu necesită deschiderea niciunui acces; consultați Clienți AI.
La ce renunțați: instrumentele de automatizare găzduite care apelează API-ul Twenty din propriul cloud (Zapier, Make, n8n Cloud) nu pot accesa o instanță privată. Rulați-le în schimb în rețeaua dvs. (n8n auto-găzduit funcționează bine) sau utilizați fluxurile de lucru Twenty. Nu faceți publice
/graphql sau /rest pentru a ocoli acest lucru: aplicația însăși rulează pe acele endpointuri, deci expunerea lor expune totul.Alegeți o configurare
Eșecuri
Complet privat. Cea mai simplă configurare, ideală pentru echipe mici.Cloudflare
Fără porturi deschise, autentifică-te cu furnizorul tău de identitate, căi publice unde este necesar.Reverse proxy
Caddy sau Nginx cu permise IP. Fără servicii terțe.Opțiunea 1: Tailscale
Tailscale plasează serverul și dispozitivele echipei tale într-o rețea privată. Twenty primește o adresă HTTPS care funcționează numai pentru persoanele din acea rețea.1
Leagă Twenty la localhost
În
docker-compose.yml, modifică maparea portului pentru server, astfel încât containerul să fie accesibil numai de pe serverul însuși:2
Adaugă serverul la tailnet-ul tău
Instalează Tailscale pe server, apoi:
3
Servește Twenty prin HTTPS
https://twenty.\<your-tailnet>.ts.net, cu un certificat gestionat de Tailscale. Dacă ți se solicită prin comandă, activează certificatele HTTPS pentru tailnet-ul tău în consola de administrare.4
Actualizează SERVER_URL
docker compose up -d.Opțiunea 2: Cloudflare Tunnel și Access
Un Cloudflare Tunnel conectează serverul tău la Cloudflare printr-o conexiune de ieșire, astfel încât niciun port să nu fie deschis pe server. Cloudflare Access le solicită apoi membrilor echipei tale să se conecteze cu furnizorul tău de identitate înainte ca orice solicitare să ajungă la Twenty.1
Protejează numele de gazdă cu Access
Fă acest lucru înainte de a crea tunelul, astfel încât numele de gazdă să nu fie niciodată accesibil fără autentificare. Creează aplicații Access auto-găzduite. Access aplică cea mai specifică rută, astfel încât regulile de cale de mai jos au prioritate față de regula numelui de gazdă.
Creează o aplicație pentru fiecare cale. Adaugă regulile de ocolire numai pentru funcționalitățile pe care le folosești.Clienții AI locali precum Claude Code nu pot finaliza o autentificare în browser, așa că se bazează pe IP-urile biroului sau VPN-ului din ultima regulă. Dacă echipa ta lucrează de oriunde, adaugă în schimb o politică Permite pentru echipa ta la acea aplicație, activează autentificarea WARP în Access și cere-le să ruleze clientul Cloudflare WARP.
2
Creează un tunel
În tabloul de bord Cloudflare Zero Trust, creează un tunel, alege Docker ca mediu și copiază tokenul. Adaugă un nume de gazdă public,
crm.example.com, care indică spre http://server:3000.3
Rulează cloudflared alături de Twenty
Adaugă acest serviciu în Adaugă
docker-compose.yml și elimină secțiunea ports din server. cloudflared accesează Twenty prin rețeaua Docker, astfel încât serverul nu trebuie să publice niciun port.CLOUDFLARE_TUNNEL_TOKEN în .env.4
Actualizează SERVER_URL
docker compose up -d.Opțiunea 3: propriul proxy invers
Dacă rulezi deja un proxy invers, adaugă pe lista de permisiuni adresele IP ale biroului sau VPN-ului tău pentru aplicație și deschide numai căile publice. Leagă mai întâi Twenty la localhost, ca în opțiunea 1, astfel încât nimic să nu ocolească proxy-ul.- Caddy
- Nginx
203.0.113.0/24 cu adresele biroului sau VPN-ului tău. CHATGPT_CONNECTOR_IPS conține intervalele OpenAI, vezi clienți AI; lasă-l gol dacă nu folosești ChatGPT. Dacă proxy-ul tău se află în spatele unui echilibrator de încărcare, potrivește după IP-ul clientului pe care îl redirecționează (client_ip cu trusted_proxies în Caddy, set_real_ip_from în Nginx), nu după adresa echilibratorului de încărcare.
Căi publice
Acestea sunt căile apelate de serviciile din afara rețelei tale. Deschide numai cele de care ai nevoie.
În mod implicit, Twenty interoghează căsuțele poștale și calendarele, astfel încât Google și Microsoft nu apelează niciodată instanța ta. O fac numai dacă setezi
IS_CONNECTED_ACCOUNT_WEBHOOK_SUBSCRIPTION_ENABLED=true.
Cum este protejată fiecare cale publică:
- Webhook-urile fluxurilor de lucru verifică numai că spațiul de lucru și fluxul de lucru există. Oricine cunoaște URL-ul poate declanșa fluxul de lucru, așa că tratează URL-ul ca pe un secret și validează sarcina utilă în fluxul de lucru înainte de a acționa asupra ei.
- Rutele aplicațiilor și funcțiilor logice sunt publice, cu excepția cazului în care ruta necesită autentificare (
isAuthRequired). Pentru rutele publice, verifică apelantul în propriul cod, de exemplu cu semnătura serviciului expeditor. - Webhook-urile Google, Microsoft, SES și Resend sunt verificate de Twenty, folosind semnătura sau tokenul furnizorului.
- Linkurile de e-mail pot înregistra numai o deschidere, un clic sau o dezabonare pentru destinatarul căruia i-au fost trimise.
Clienți AI (MCP)
Asistenții AI reprezintă unul dintre principalele moduri în care echipa ta va folosi Twenty, prin serverul său MCP. Ce trebuie să deschizi depinde de locul în care rulează asistentul, nu de asistentul utilizat.Clienți locali: nimic de deschis
Claude Code, Codex CLI, Cursor și alte instrumente care rulează pe computerul tău se conectează la Twenty de pe acel computer. Dacă se află în tailnet-ul sau VPN-ul tău, acestea accesează/mcp în același mod în care browserul tău accesează aplicația. Aceasta este cea mai sigură configurare, așa că prefer-o atunci când poți.
Claude Desktop este excepția: conectorii adăugați în Setări → Conectori rulează în cloud-ul Anthropic, chiar și în aplicația desktop. Pentru a păstra conexiunea locală, adaugă în schimb Twenty ca server MCP local în claude_desktop_config.json:
Conectori cloud: deschide cu grijă
Claude (web, mobil și conectorii din aplicația desktop) și ChatGPT apelează serverul tău din infrastructura Anthropic și OpenAI, nu de pe dispozitivul tău. Nu pot accesa o instanță privată, deci trebuie să deschizi/mcp, /oauth și /.well-known pentru intervalele lor IP.
Autentificarea este cea care îi ține departe. Pentru a obține un token, un utilizator trebuie să se conecteze pe pagina /authorize a Twenty, care rămâne în zona privată. O persoană din afara rețelei tale poate începe fluxul de conectare, dar nu îl poate finaliza, iar /mcp respinge fiecare solicitare fără un token valid.
Ceea ce rămâne expus este codul care rulează înainte de autentificare: descoperirea OAuth, înregistrarea clientului (/oauth/register) și endpointul de token. Lista de permisiuni restrânge acest lucru: scanerele de pe întregul internet nu pot accesa direct aceste căi, iar solicitările trebuie să provină prin infrastructura Claude sau ChatGPT. Nu face acel cod sigur de unul singur, așa că actualizările rămân importante.
Dacă folosești conectori cloud:
- Deschide numai
/mcp,/oauthși/.well-known. Nu deschide niciodată/authorizesau restul aplicației. - Permite numai furnizorii pe care îi folosești:
-
Anthropic:
160.79.104.0/21, din pagina cu adresele IP Anthropic. -
OpenAI: lista din chatgpt-connectors.json. OpenAI o descrie ca fiind depusă cu bună-credință și se modifică în timp, așa că actualizeaz-o periodic:
-
Anthropic:
- Actualizează rapid când notele de lansare menționează remedieri MCP sau OAuth.
Verifică configurarea
Testează de pe ambele părți ale rețelei tale după orice modificare:https://crm.example.com/.well-known/.... Dacă afișează http:// sau 127.0.0.1, proxy-ul tău nu redirecționează antetele Host și X-Forwarded-Proto.
Listă de verificare de bază
Postgres și Redis nu sunt publicate. Fișierul implicit
docker-compose.yml nu le publică; păstrează această configurare dacă îl editezi.Nimic nu ocolește proxy-ul sau tunelul tău. Cu un proxy pe gazdă, portul Twenty este legat la
127.0.0.1. Cu cloudflared în Docker, serviciul server nu publică niciun port. Docker își scrie propriile reguli de firewall, astfel încât porturile pe care le publică ocolesc ufw și firewall-urile similare ale gazdei.Secretele sunt lungi și aleatorii și știi cum să le rotești.
Membrii spațiului de lucru folosesc SSO sau autentificare cu doi factori.
Baza de date este salvată conform unei planificări și ai testat o restaurare.
TAG este fixat la o versiune și faci actualizări în mod intenționat.Rămâi la zi
Niciunul dintre cele de mai sus nu înlocuiește actualizarea. Îți oferă timp.- Urmărește lansările pe GitHub: Urmărește → Personalizat → Lansări.
- Când o lansare include o remediere de securitate, actualizează imediat ce recomandarea aferentă indică acest lucru: în aceeași zi pentru problemele critice. Urmează ghidul de actualizare.
- Raportează vulnerabilitățile la security@twenty.com, nu în probleme publice.