Безопасность и приватность
Spam Scanner читает почту, которая является личной, от отправителей, которые могут быть враждебны. На этой странице перечислено, что он куда-либо отправляет и как обращается с тем, что читает.
Что покидает машину#
По умолчанию — одно: имена хостов из ссылок в письме проверяются через фильтрующие резолверы Cloudflare: 1.1.1.2 и 1.0.0.2 (вредоносные программы и фишинг) и 1.1.1.3 и 1.0.0.3 (также контент для взрослых). Это обычные DNS-запросы для имён вроде example.com; никакая часть письма или его адресов не отправляется. Они отключаются через phishing: {cloudflare: false} или --no-cloudflare, а одна только проверка на контент для взрослых — через phishing: {adult: false}.
Всё остальное выключено, пока не настроено:
| Проверка | Что отправляет | Куда |
|---|---|---|
authentication | DNS-запросы записей SPF, DKIM, DMARC и ARC отправителя | Ваш резолвер или dnsServers |
dnsbl | IP-адрес клиента в обратном порядке и домены из ссылок в виде DNS-запросов | Серверы имён чёрных списков, через ваш резолвер или dns.servers |
llm | Сводку письма, из которой для удалённых провайдеров удалены персональные данные | Указанный вами сервер языковой модели (приватность) |
reputation.apiUrl | IP-адрес, домен и адрес отправителя | Указанный вами сервис |
clamav | Вложения | Ваш clamd, через его сокет |
Нет телеметрии, проверки обновлений и загрузок во время работы. Модель поставляется внутри пакета.
Что сохраняется#
Ничего, если не попросить. Проверки не записываются в журнал и не сохраняются. learn() меняет классификатор в памяти; на диск он записывается только через saveModel(), spamscanner learn или параметр серверов --out. Файл модели содержит хешированные счётчики признаков, а не слова или текст писем.
Ответы языковой модели кешируются в памяти по хешу отправленного, поэтому о повторяющихся копиях одного письма модель спрашивают один раз. Ответы DNS кешируются в памяти на десять минут.
Враждебные входные данные#
- Вложения определяются по байтам и никогда не исполняются и не открываются другой программой. ZIP-архивы читаются по центральному каталогу с ограничением на число записей; вложенные архивы не распаковываются.
- Текст письма читается до
maxLength(100 000 символов), а серверы принимают письма размером до 25 МБ. - У каждой сетевой проверки есть тайм-аут (
timeout, по умолчанию 10 секунд). Проверка, которая дала сбой или не уложилась в тайм-аут, пропускается, и проверка письма завершается без неё. - Заголовки
X-Spam-*, уже имеющиеся в письме, удаляются milterMail filter: протокол из Sendmail, который также использует Postfix; позволяет отдельной программе проверять каждое письмо во время SMTP-сессии., контент-фильтром и--headers, поэтому отправители не могут пометить собственную почту как чистую. - Заголовкам с вердиктом Microsoft о спаме доверяют, только если письмо пришло напрямую с серверов Microsoft, а заголовки Received никогда не используются, чтобы определить, откуда пришло письмо.
- Текст, обращённый к ИИ-фильтрам, оценивается как спам, а языковой модели сообщается, что письмо — это данные, а не инструкции. Внедрение инструкций
Серверы#
Серверы milter, HTTP, TCP и spamdДемон SpamAssassin. Его протокол используют spamc, Exim, Haraka и другие клиенты SpamAssassin. слушают 127.0.0.1, если в --host не указано иное. HTTP API сравнивает токен за постоянное время и без него отклоняет /learn. Ни один из них не поддерживает TLS: чтобы обращаться к ним по сети, используйте частную сеть, SSH-туннель или обратный прокси с TLS.
Запускайте их от непривилегированного пользователя. Модуль systemd из руководства по Postfix добавляет обычные меры усиления защиты.
Сообщение об уязвимости#
Сообщайте о проблемах безопасности конфиденциально через систему сообщений об уязвимостях GitHub, а не в публичных issues.