אבטחה
רשימת בדיקה להתקנת שרת Antimatter: מה לחשוף, הגבלות והגדרות פרטיות לבדיקה, השירותים החיצוניים שהשרת מתקשר אליהם, ואופן הדיווח על בעיית אבטחה.
מה לחשוף
| פורט | שירות | חשיפה |
|---|---|---|
| 443/tcp, 443/udp, 80/tcp | פרוקסי HTTPS (Caddy או nginx) | ציבורי: כך הגולשים מגיעים ל-Antimatter. |
| 8443/udp ו-8443/tcp | מדיה לשיחות | ציבורי, אם משתמשים משתמשים בשיחות מחוץ לרשת שלך. |
| 8065/tcp | שרת ה-Web של Antimatter | לפרוקסי בלבד: פרסמו אותו על 127.0.0.1 (HTTP_PORT=127.0.0.1:8065). |
| 8067/tcp | מדידות | רשת פרטית בלבד, כאשר מופעל. אין התחברות. |
| 8074/tcp ו-udp | Gossip של קלאסטר | בין צמדי הקלאסטר בלבד. |
| 5432, 9000, 8080, 8066 | PostgreSQL, אחסון קבצים, שירות GIF, פרוקסי דחיפה | לעולם לא. קבצי ה-compose שומרים אותם על רשתות פנימיות בלי פורט מפורסם. |
קובץ ה-compose של האתר מפעיל גם כל קונטיינר עם no-new-privileges, מפעיל את Antimatter כמשתמש ללא הרשאות על镜像 distroless, ומפעיל את שירות GIF עם מערכת קבצים בלבד לקריאה. המסד הנתונים, האחסון ושירות GIF נמצאים על רשת בלי גישה לאינטרנט.
רשימת בדיקה לאחר התקנה
- צרו חשבון מנהל ראשון לפני שמישהו אחר יכול להגיע לשרת (התקנה).
- השגיחו Antimatter רק דרך HTTPS, והגדירו את כתובת האתר לכתובת
https://(דומיין ו-HTTPS). - השאירו את
.env,config.jsonומפתחות TLS קריאים על ידי root (או משתמש השרת) בלבד:chmod 600 .env. - קבעו谁能 יצור חשבונות, השאירו את הפעלת שרת פתוח כבוי אלא אם הקהילה ציבורית, והפעילו את דרישת אימות כתובת דוא״ל ברגע שהדוא״ל עובד (התחברות וחשבונות).
- הפעילו אימות רב-גורמי, והטילו אותו לפחות על חשבונות המנהלים, או השתמשו בזה של ספק הזהות שלכם.
- בדקו את החיבורים החיצוניים להלן, ובפרט שרת STUN ששיחות משתמשות בו כברירת מחדל.
- לפני הוספת חיבורי מודלים, הגדירו את מפתח ההצפנה של AI (
AM_AI_ENCRYPTION_KEY) ושמרו עותק נפרד מגיבויי הבסיס (AI). - בצעו גיבוי ובדקו שחזור (גיבויים ושדרוגים).
- שמרו על עדכניות של התמונות או החבילות: תיקוני אבטחה מגיעים עם גרסאות חדשות.
הגבלת קצב
השרת יכול להגביל את מספר בקשות ה-API שכל לקוח שולח. ההגדרה כבויה כברירת מחדל. בקונסולת מערכת › סביבה › הגבלת קצב:
| הגדרה | מפתח | ברירת מחדל |
|---|---|---|
| הפעלת הגבלת קצב | RateLimitSettings.Enable | כבוי |
| מספר שאילתות מקסימלי לשנייה | RateLimitSettings.PerSec | 10 |
| גודל Burst מקסימלי | RateLimitSettings.MaxBurst | 100 |
| גודל מאגר זיכרון | RateLimitSettings.MemoryStoreSize | 10000 לקוחות נעקבים |
| מגוון הגבלת קצב לפי כתובת רחוקה | RateLimitSettings.VaryByRemoteAddr | דלוק |
| מגוון הגבלת קצב לפי משתמש | RateLimitSettings.VaryByUser | כבוי |
| מגוון הגבלת קצב לפי HTTP header | RateLimitSettings.VaryByHeader | ריק |
מאחורי פרוקסי, הגבלות לפי כתובת עובדות רק אם השרת יודע את כתובת כל לקוח (ServiceSettings.TrustedProxyIPHeader ו-ServiceSettings.TrustedProxyIPs, ראו כתובות לקוחות מאחורי פרוקסי). אחרת, כל הבקשות נראות כאילו הן מגיעות מהפרוקסי, וכולם משתפים הגבלה אחת. הדבר נכון גם לגבי סינון IP ולגבי הכתובות ביומני הביקורת.
ניסיונות התחברות מוגבלים בנפרד: מספר ניסיונות התחברות מקסימלי (10) נעלאת חשבון לאחר מספר כשלונות זה.
סינון IP
קונסולת מערכת › הגדרות האתר › סינון כתובות IP מגביל גישה לשרת לפי כתובת IP, עם כללי אישור ודחייה (כתובת או טווח CIDR לכל אחד). כאשר הפעלת סינון IP מופעל, אנשים שכתובתם תואמת לכלל דחייה, או שאין להם כלל אישור כאשר קיימים כללי אישור, לא יכולים להגיע לשרת. העמוד דוחה כללים שיחסמו את כתובתכם. מאחורי פרוקסי, הגדירו תחילה כתובות לקוח (כתובות לקוח מאחורי פרוקסי): אחרת כל הבקשה נראית כאילו מגיעה מהפרוקסי.
העלאות ושיתוף קבצים
| הגדרה | מיקום | ברירת מחדל |
|---|---|---|
גודל קובץ מקסימלי (FileSettings.MaxFileSize) | סביבה › אחסון קבצים | 100 MB. יש לשמור את הגבלת גודל הבקשה של הפרוקסי לפחות בגודל זה. |
גודל מטען מרבי (בתים) (ServiceSettings.MaximumPayloadSizeBytes) | סביבה › שרת אינטרנט | 300000: בקשת ה-API הגדולה ביותר שאינה העלאת קבצים |
אפשרות שיתוף קבצים (FileSettings.EnableFileAttachments) | תצורת האתר › שיתוף קבצים והורדות | דלוק |
| אפשרות העלאת קבצים במובייל, אפשרות הורדת קבצים במכשירים ניידים | תצורת האתר › שיתוף קבצים והורדות | דלוק |
הפעלת קישורי קבצים ציבוריים (FileSettings.EnablePublicLink) | תצורת האתר › קישורים ציבוריים | כבוי: כאשר מופעל, אנשים יכולים לשתף קובץ עם קישור שפועל ללא התחברות |
הפעלת SVGs (ServiceSettings.EnableSVGs) | תצורת האתר › פוסטים | כבוי בשרת חדש: כאשר מופעל, תמונות SVG מוצגות בתוך הטקסט |
Antimatter אינו סורק העלאות לחיפוש תוכנות זדוניות.
הגדרות פרטיות
בקונסולת מערכת › הגדרות האתר › משתמשים וצוותים:
| הגדרה | מפתח | ברירת מחדל | מה היא עושה |
|---|---|---|---|
| הצגת כתובת דוא"ל | PrivacySettings.ShowEmailAddress | דלוק | כשכבוי, כתובות האימייל של החברים מוסתרות מכולם מלבד מנהלים. כווה זאת בשרתים ציבוריים. |
| הצגת שם מלא | PrivacySettings.ShowFullName | דלוק | כשכבוי, שמות מלאים מוסתרים ומוצגים במקומם שמרי משתמש. |
| הפעלת התעלמות, חסימה ובקשות הודעה | PrivacySettings.EnableUserBlocking | דלוק | ראו להלן. |
| אפשרות למשתמשים לפתוח ערוצי הודעות ישירות עם | TeamSettings.RestrictDirectMessage | כל משתמש בשרת Antimatter | או כל חבר בצוות: רק אנשים ששוכרים קהילה. |
התעלמות, חסימה ובקשות הודעה
כשהפעלת התעלמות, חסימה ובקשות הודעה פעיל (הברירת המחדל), אנשים יכולים להתעלם זה מזה ולחסום, ובחירה לקבל הודעות ישירות מאנשים שאינם מכירים כבקשות הודעה, שאינן מודיעות עליהן עד שהן מתקבלות. זה מתאים לקהילות ציבוריות. במקום עבודה שבו עמיתים חייבים תמיד להיות יכולים להגיע זה לזה, כווה זאת (AM_PRIVACYSETTINGS_ENABLEUSERBLOCKING=false): אף אחד מהכללים לא אכוף יותר, אבל הרשימות והבחירות שהאנשים עשו נשמרות, ויחולו שוב אם תחזיר את ההגדרה לפעילה.
מסעות ותוקנים
- אורכי מסעות ותזמון יציאה מסיבה: ראו התחברות וחשבונות. מסעות קצרים יותר אומרים שהמחשב או הטלפון האבוד נשאר מחובר למשך זמן קצר יותר.
- הפעל אסימוני גישה אישיים (
ServiceSettings.EnableUserAccessTokens, כבוי) מאפשר לאנשים ליצור טוקנים של API; משך חיים מקסימלי לטוקן גישה אישי (ימים) מגביל אותם. שניהם נמצאים בקונסולת מערכת › אינטגרציות › ניהול אינטגרציות. - כדי להסיר את כל המשתמשים מהמערכת בבת אחת, למשל לאחר חשד לפרצה: ביטול כל ההתחברות בקונסולת מערכת › ניהול משתמשים › משתמשים.
חיבורים לשירותים חיצוניים
Antimatter אינו מתקשר עם שירות כלשהו שמופעל על ידי Mattermost, Inc. הוא אינו שולח טלמטריה, דוחות תקלות או בדיקות עדכוני אבטחה, ואינו מושך הודעות מוצר. תצורה שהועברה מ-Mattermost שעדיין מזכירה אחד משירותי Mattermost (שירותי ההדחפה שלו, שוק האפליקציות שלו, ההודעות שלו או שרת STUN שלו לשיחות) אינה גורמת לשרת להתקשר אליהם: הכתובות האלה מותעלמות.
השרת והאפליקציות מתקשרים עם שירותים חיצוניים אחרים רק עבור התכונות שדורשות זאת, ועם השירותים שאתה מתקין:
| תכונה | מתקשר עם | בברירת המחדל |
|---|---|---|
| שיחות: מציאת כתובות ציבוריות באמצעות STUN. השרת וכל אדם המצטרף לשיחה שולחים בקשה, המציגה לשרת STUN את כתובת ה-IP ואת הפורט שלו. | שרת STUN הציבורי של Cloudflare, stun.cloudflare.com | פעיל, כל עוד אפליקציית השיחות מופעלת. כדי לשנות זאת, ראו שיחות. |
תצוגות מקדימות לקישורים: השרת מוריד את העמודים המצוינים בהודעות (הפעלת תצוגות מקדימות לקישורי אתרים, ServiceSettings.EnableLinkPreviews) | האתרים אליהם משתמשים מקשרים | פעיל. ניתן לכבות עם AM_SERVICESETTINGS_ENABLELINKPREVIEWS=false. |
| התראות דחוף לאפליקציה המובייל | פרוקסי ההתראות שלך (התראות דחוף) | כבוי עד שאתה מגדיר את הכתובת שלו |
שוק האפליקציות הרחוק (PluginSettings.EnableRemoteMarketplace) | כתובת (URL) של שוק התוספים שגדרת | כבוי, ואין כתובת |
| דואל | שרת SMTP שלך | השרת ברירת המחדל הוא localhost |
| חיבורי מודלים (כתיבה מחדש, סיכומים, תרגום, קריאה בקול ואפליקציות), חיבורי המודלים של מנהלי הקהילה | ספקי ה־AI שנוספו בקונסולת מערכת › AI › חיבורי מודלים או בהגדרות של קהילה (AI) | אין, עד שמישהו יוסיף |
| התחברות מאוחדת (SSO), שירותי ה־AI של אפליקציית Agents, תמלול וקול, תרגום, Webhooks יוצאים, ואפליקציות כמו Mail, Calendar, GitHub, GitLab או Jira | השירותים שאתה מציב | כבויים עד שאתה מציב אותם |
ברירת המחדל, השרת מסרב להתחבר לכתובות פרטיות ולכתובות loopback עבור אלה (תצוגות מקדימות, Webhooks, אפליקציות, חיבורי מודלים של קהילות), כך שהודעה או אינטגרציה לא יכולות לשמש להגעה לרשת הפנימית שלך. יש לרשום את המארחים הפנימיים אליהם מותר להגיע באפשרות חיבורים פנימיים לא אמורים אל (ServiceSettings.AllowedUntrustedInternalConnections, בקונסולת מערכת › סביבה › מפתח); קובץ ה־compose של האתר מרשם שם את gifs.
דיווח על פגיעות
יש לדווח על בעיות אבטחה בסתר, כמתואר במדיניות האבטחה של Antimatter, ולא בטיקים ציבוריים.