Безопасность
Чек-лист для укрепления сервера Antimatter: что открывать, какие лимиты и настройки конфиденциальности проверить, с какими внешними сервисами взаимодействует сервер и как сообщить о проблеме безопасности.
Что открывать
| Порт | Служба | Доступность |
|---|---|---|
| 443/tcp, 443/udp, 80/tcp | Ваш HTTPS-прокси (Caddy или nginx) | Публичный: так пользователи получают доступ к Antimatter. |
| 8443/udp и 8443/tcp | Медиа для звонков | Публичный, если звонки используются извне вашей сети. |
| 8065/tcp | Веб-сервер Antimatter | Только для прокси: опубликуйте его на 127.0.0.1 (HTTP_PORT=127.0.0.1:8065). |
| 8067/tcp | Метрики | Только в закрытой сети, если включено. Без входа. |
| 8074/tcp и udp | Gossip-протокол кластера | Только между узлами кластера. |
| 5432, 9000, 8080, 8066 | PostgreSQL, файловое хранилище, GIF-сервис, push-прокси | Никогда. Файлы compose оставляют их на внутренних сетях без опубликованных портов. |
Файл compose сайта также запускает каждый контейнер с no-new-privileges, запускает Antimatter от непривилегированного пользователя на образе distroless, а GIF-сервис — с файловой системой только для чтения. База данных, хранилище и GIF-сервис находятся в сети без доступа в Интернет.
Чек-лист после установки
- Создайте первую учетную запись администратора до того, как кто-либо сможет получить доступ к серверу (Установка).
- Предоставляйте Antimatter только по HTTPS и установите URL сайта на адрес
https://(Домен и HTTPS). - Обеспечьте, чтобы файлы
.env,config.jsonи TLS-ключи были доступны только для чтения root (или пользователем сервера):chmod 600 .env. - Определите, кто может создавать аккаунты. Оставьте Открытый сервер выключенным, если сообщество не является публичным, и включите Требовать подтверждение адреса электронной почты, когда почта заработает (Вход и аккаунты).
- Включите многофакторную аутентификацию и, как минимум, принудительно применяйте ее для учетных записей администраторов, либо используйте ее в вашем поставщике идентификации.
- Проверьте внешние соединения ниже, в частности STUN-сервер, который по умолчанию используется для звонков.
- Перед добавлением подключений к моделям задайте ключ шифрования ИИ (
AM_AI_ENCRYPTION_KEY) и храните его копию отдельно от резервных копий базы данных (ИИ). - Сделайте резервную копию и протестируйте восстановление (Резервные копии и обновления).
- Держите образы или пакеты в актуальном состоянии: исправления уязвимостей приходят с новыми версиями.
Ограничение частоты запросов
Сервер может ограничивать количество запросов к API, которые делает каждый клиент. По умолчанию эта функция выключена. В Системная консоль › Окружение › Ограничение скорости:
| Параметр | Ключ | Значение по умолчанию |
|---|---|---|
| Включить ограничение скорости | RateLimitSettings.Enable | выключено |
| Максимальное количество запросов в секунду | RateLimitSettings.PerSec | 10 |
| Максимальное превышение размера пакета | RateLimitSettings.MaxBurst | 100 |
| Размер хранилища памяти | RateLimitSettings.MemoryStoreSize | 10000 отслеживаемых клиентов |
| Изменять ограничение скорости по удаленному адресу | RateLimitSettings.VaryByRemoteAddr | вкл |
| Изменение ограничения скорости пользователя | RateLimitSettings.VaryByUser | выключено |
| Изменять ограничение скорости по HTTP заголовку | RateLimitSettings.VaryByHeader | пусто |
За прокси-сервером ограничения по адресу работают только в том случае, если сервер знает адрес каждого клиента (ServiceSettings.TrustedProxyIPHeader и ServiceSettings.TrustedProxyIPs, см. Адреса клиентов за прокси). Иначе все запросы выглядят как исходящие от прокси, и все пользователи делят один лимит. То же самое касается фильтрации по IP и адресов в журналах аудита.
Попытки входа ограничиваются отдельно: Максимальное количество попыток входа (10) блокирует аккаунт после такого количества неудачных попыток ввода пароля.
Фильтрация по IP
Системная консоль › Настройки сайта › IP-фильтрация ограничивает доступ к серверу по IP-адресу с помощью правил разрешения и запрета (адрес или диапазон CIDR). Если Включить фильтрацию IP-адресов включено, пользователи, чей адрес соответствует правилу запрета, или которым не соответствует ни одно правило разрешения (если такие правила есть), не могут получить доступ к серверу. Страница отклоняет правила, которые блокируют ваш собственный адрес. Если вы используете прокси, сначала настройте адреса клиентов (Адреса клиентов за прокси), иначе все запросы будут казаться исходящими от прокси.
Загрузка и обмен файлами
| Параметр | Где | Значение по умолчанию |
|---|---|---|
Максимальный размер файла (FileSettings.MaxFileSize) | Environment › File Storage | 100 МБ. Убедитесь, что лимит размера запросов прокси-сервера не меньше этого значения. |
Максимальный размер полезной нагрузки (байты) (ServiceSettings.MaximumPayloadSizeBytes) | Environment › Web Server | 300000: максимальный размер запроса к API, за исключением загрузки файлов |
Разрешить общий доступ к файлам (FileSettings.EnableFileAttachments) | Site Configuration › File Sharing and Downloads | вкл |
| Разрешить загрузку файлов на телефонах, Разрешить скачивать файлы на мобильных | Site Configuration › File Sharing and Downloads | вкл |
Включить публичные ссылки на файлы (FileSettings.EnablePublicLink) | Site Configuration › Public Links | выключено: при включении пользователи могут делиться файлом по ссылке, которая работает без входа в систему |
Включить SVG (ServiceSettings.EnableSVGs) | Site Configuration › Posts | выключено на новом сервере: при включении изображения SVG отображаются в тексте |
Antimatter не сканирует загруженные файлы на наличие вредоносного ПО.
Параметры конфиденциальности
В Системная консоль › Настройки сайта › Пользователи и команды:
| Параметр | Ключ | Значение по умолчанию | Назначение |
|---|---|---|---|
| Показать Email | PrivacySettings.ShowEmailAddress | вкл | Выкл. Адреса электронной почты участников скрыты от всех, кроме администраторов. Отключите этот параметр на публичных серверах. |
| Показать полное имя | PrivacySettings.ShowFullName | вкл | Выкл. Полные имена скрыты, вместо них отображаются имена пользователей. |
| Включить игнорирование, блокировку и запросы сообщений | PrivacySettings.EnableUserBlocking | вкл | См. ниже. |
| Разрешить пользователям писать личные сообщения с | TeamSettings.RestrictDirectMessage | Любым пользователем на сервере Antimatter | Или Все участники команды: только те, кто принадлежит к одному сообществу. |
Игнорирование, блокировка и запросы на сообщения
Если Включить игнорирование, блокировку и запросы сообщений включено (по умолчанию), пользователи могут игнорировать и блокировать друг друга, а также могут настроить получение личных сообщений от незнакомых людей в виде запросов, которые не отправляют уведомлений до их принятия. Это подходит для публичных сообществ. На рабочем месте, где коллеги должны всегда иметь возможность связаться друг с другом, отключите эту функцию (AM_PRIVACYSETTINGS_ENABLEUSERBLOCKING=false): ни одно из этих правил больше не будет применяться, но списки и сделанные пользователем выбор сохранятся и снова вступят в силу, если вы включите функцию обратно.
Сессии и токены
- Длительность сессий и тайм-аут бездействия: см. Вход и учетные записи. Более короткие сессии означают, что украденный ноутбук или телефон останется в состоянии входа меньшее время.
- Включить Персональные токены доступа (
ServiceSettings.EnableUserAccessTokens, выключено) позволяет пользователям создавать токены API; Максимальный срок действия персонального токена доступа (дней) ограничивает их срок действия. Обе настройки находятся в Системная консоль › Интеграции › Управление интеграцией. - Чтобы разом завершить все сеансы, например после предполагаемого нарушения безопасности: Сбросить все сеансы в Системная консоль › Управление пользователями › Пользователи.
Соединения с внешними службами
Antimatter не связывается ни с одной службой, управляемой Mattermost, Inc. Он не отправляет телеметрию, отчеты об ошибках или запросы проверки обновлений безопасности, а также не получает уведомления о продукте. Конфигурация, перенесенная из Mattermost, которая все еще содержит ссылки на службы Mattermost (службы push-уведомлений, маркетплейс приложений, уведомления или STUN-сервер для звонков), не приводит к тому, что сервер будет с ними связываться: эти адреса игнорируются.
Сервер и приложения связываются с другими внешними службами только для тех функций, которые этого требуют, а также с теми службами, которые вы настроили:
| Функция | Связи | По умолчанию |
|---|---|---|
| Звонки: поиск публичных адресов с помощью STUN. Сервер и каждый участник звонка отправляют запрос, который показывает STUN-серверу их IP-адрес и порт. | Публичный STUN-сервер Cloudflare, stun.cloudflare.com | включён, если приложение «Звонки» активно. Чтобы изменить это, см. Звонки. |
Предпросмотр ссылок: сервер запрашивает страницы, на которые ссылаются сообщения (Включить предпросмотр веб-ссылок, ServiceSettings.EnableLinkPreviews) | веб-сайты, на которые ссылаются пользователи | включён. Отключите с помощью AM_SERVICESETTINGS_ENABLELINKPREVIEWS=false. |
| Push-уведомления в мобильное приложение | ваш собственный push-прокси (Push-уведомления) | выключен, пока вы не укажете его адрес |
Удалённый маркетплейс приложений (PluginSettings.EnableRemoteMarketplace) | указанный вами URL магазина плагинов | выключен, адрес не задан |
| Электронная почта | ваш SMTP-сервер | по умолчанию используется сервер localhost |
| Подключения к моделям (переписывание, краткие изложения, перевод, озвучивание и приложения), собственные подключения к моделям администраторов сообществ | провайдеры ИИ, добавленные в Системная консоль › ИИ › Подключения к моделям или в настройках сообщества (ИИ) | пока никто не добавит |
| Единый вход, службы ИИ приложения «Агенты», распознавание речи и перевод, исходящие вебхуки, а также приложения, такие как Почта, Календарь, GitHub, GitLab или Jira | услуги, которые вы настроите | выключены, пока вы их не настроите |
По умолчанию сервер отказывается устанавливать соединения с внутренними и loopback-адресами для этих целей (предпросмотр ссылок, вебхуки, приложения, подключения к моделям сообществ), чтобы сообщение или интеграция не могли быть использованы для доступа к вашей внутренней сети. Перечислите внутренние хосты, к которым разрешено подключение, в Разрешить недоверенные внутренние соединения для (ServiceSettings.AllowedUntrustedInternalConnections, в Системная консоль › Окружение › Разработчик); в compose-файле сайта там указан gifs.
Сообщение об уязвимости
Сообщайте о проблемах безопасности конфиденциально, как описано в политике безопасности Antimatter, а не в публичных issues.