# Власний спам-фільтр

Spam Scanner працює на вашому сервері й залишає пошту там. Модель класифікатора входить до пакета, немає ні телеметрії, ні перевірки оновлень, а за замовчуванням він надсилає лише DNS-запит про ім'я хоста кожного посилання.


## Що залишає сервер

За замовчуванням лише імена хостів із посилань у листі. Їх перевіряють на фільтрувальних резолверах Cloudflare (1.1.1.2 і 1.1.1.3) звичайними DNS-запитами, і жодна частина листа чи його адрес не надсилається. `--no-cloudflare` вимикає й це.

Будь-яка інша перевірка, що використовує мережу, вимкнена, доки ви її не ввімкнете:

| Перевірка             | Вмикається           | Що надсилає                                        |
| --------------------- | -------------------- | -------------------------------------------------- |
| SPF, DKIM, DMARC, ARC | `--auth`             | DNS-запити про записи відправника                  |
| DNS-списки блокування | `--dnsbl`, `--uribl` | IP-адресу клієнта й домени посилань, як DNS-запити |
| ClamAV                | `--clamav`           | Вкладення, вашому власному clamd                   |
| Мовна модель          | `--llm`              | Короткий зміст листа, на вказаний вами сервер      |

Перевірки не записуються в журнал і не зберігаються. [Безпека та конфіденційність](https://spamscanner.net/uk/docs/security/)


## Встановлення на сервер

```sh
npm install --global spamscanner
```

Або окремий виконуваний файл із вбудованими Node.js і моделлю:

```sh
curl -fsSL https://github.com/spamscanner/spamscanner/releases/latest/download/install.sh | bash
```

Скрипт встановлення перед встановленням звіряє файл із `SHA256SUMS` релізу, а кожен файл має підписану атестацію походження збірки, яку перевіряє `gh attestation verify`. Файли є для Linux (x64 і arm64), macOS і Windows. Файлам для Linux потрібна glibc, тож на Alpine встановлюйте через npm. [Початок роботи](https://spamscanner.net/uk/docs/getting-started/)

Перевірки оновлень немає. Щоб оновитися, знову запустіть команду встановлення: обидві команди ставлять останній реліз.


## Запуск як служба

Сервери milter, HTTP, TCP і spamd слухають 127.0.0.1, якщо `--host` не вказує інше. Запускайте їх від непривілейованого користувача, наприклад під systemd:

```ini
[Service]
ExecStart=/usr/local/bin/spamscanner milter --port 7831 --auth --subject-tag [SPAM]
User=spamscanner
Group=spamscanner
Restart=on-failure
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=yes
PrivateTmp=yes
```

[Повний юніт і його налаштування](https://spamscanner.net/uk/docs/postfix/#1-run-the-milter) наведено в посібнику з Postfix. Жоден із серверів не підтримує TLS, тож для доступу з іншої машини використовуйте приватну мережу, SSH-тунель або зворотний проксі з TLS.


## Під'єднання поштового сервера

| Поштовий сервер                     | Команда                                 | Порт  |
| ----------------------------------- | --------------------------------------- | ----- |
| Postfix або Sendmail                | `spamscanner milter`                    | 7831  |
| Postfix, ніколи не відхиляючи пошту | `spamscanner filter`, контентний фільтр | немає |
| Exim, Haraka або spamc              | `spamscanner spamd`                     | 783   |
| Усе, що вміє HTTP                   | `spamscanner http`                      | 7832  |
| Простий TCP-клієнт                  | `spamscanner server`                    | 7830  |
| Поштовий сервер на Node.js          | `import SpamScanner from 'spamscanner'` | немає |

Сервери можуть додавати до листа заголовки `X-Spam-Flag`, `X-Spam-Score` і `X-Spam-Status`, а бібліотека повертає оцінку й кожен тест, що спрацював. Посібники: [спам-фільтр для Postfix](https://spamscanner.net/uk/postfix-spam-filter/), [інші поштові сервери](https://spamscanner.net/uk/docs/mail-servers/) і [HTTP API](https://spamscanner.net/uk/docs/http-api/).


## Мовні моделі локально

Мовна модель необов'язкова й читає лише спірні випадки: явний спам і явний ham до неї не доходять. З Ollama вона працює на тому самому сервері, тож жоден лист його не залишає:

```sh
ollama pull qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4b
```

`qwen3.5:4b` працює на CPU. З хмарним провайдером персональні дані видаляються з листа перед надсиланням. [Мовні моделі](https://spamscanner.net/uk/docs/llm/)


## Навчання на власній пошті

Вбудовану модель навчено на відкритих наборах даних. Модель, навчена на пошті, яку отримує ваш сервер, працює краще й залишається на цьому сервері:

```sh
spamscanner train --spam ~/Maildir/.Junk --ham ~/Maildir/cur --out /var/lib/spamscanner/model.json
SPAMSCANNER_MODEL=/var/lib/spamscanner/model.json spamscanner milter
```

Файл моделі зберігає хешовані лічильники ознак, а не слова чи текст листів. [Навчання](https://spamscanner.net/uk/docs/training/)


## Вимоги

Node.js 18 або новіший на Linux, macOS чи Windows, а з окремим виконуваним файлом нічого. ClamAV і Ollama необов'язкові й працюють як окремі служби.
