oakazanin/content/posts/mailserver-part-3-security/index.md

1086 lines
28 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Почтовый сервер на Debian 12: полное руководство от установки до production. Часть 3 - Защита от спама и вирусов"
date: 2026-03-16
draft: false
description: "Настройка Amavis, ClamAV, SpamAssassin и Postgrey для защиты от вирусов и спама. Fail2ban для защиты от брутфорса SMTP/IMAP. Обучение антиспама, белые списки, мониторинг."
tags: ["amavis", "clamav", "spamassassin", "postgrey", "fail2ban"]
categories: ["Системное администрирование", "Электронная почта"]
series: ["Почтовый сервер на Debian 12"]
series_order: 3
---
# Защита от спама и вирусов
Почтовый сервер без защиты - это открытые ворота для спама и вирусов. Сейчас настроим многоуровневую оборону, которая отсечет 90%+ мусора еще до попадания в ящики.
Четыре уровня защиты:
1. **Postgrey** - отбрасывает спам-ботов на входе (greylisting)
2. **ClamAV** - проверяет вложения на вирусы
3. **SpamAssassin** - анализирует содержимое писем
4. **Fail2ban** - блокирует IP при брутфорсе паролей
## Перед началом
У тебя должно быть:
- Рабочий Postfix + Dovecot из предыдущей части
{{< article link="/posts/mailserver-part-2-postfix-dovecot/">}}
- Минимум **2GB RAM** (ClamAV прожорлив)
- Дисковое пространство для базы вирусов (~500MB)
Проверь что Postfix работает:
```bash
sudo systemctl status postfix
```
## Установка компонентов
### Ставим все сразу
```bash
sudo apt install -y \
amavisd-new \
clamav \
clamav-daemon \
clamav-freshclam \
spamassassin \
postgrey
```
**Что установили:**
- `amavisd-new` - прослойка между Postfix и антивирусом/антиспамом
- `clamav` - антивирусный движок
- `clamav-daemon` - демон ClamAV для фоновой работы
- `clamav-freshclam` - автообновление вирусных баз
- `spamassassin` - антиспам фильтр
- `postgrey` - greylisting демон
### Создание необходимых файлов и директорий
Создаем mailname (используется Amavis)
```bash
echo "mail.example.com" | sudo tee /etc/mailname
```
Создаем директорию для PID файла Amavis
```bash
sudo mkdir -p /var/run/amavis
sudo chown amavis:amavis /var/run/amavis
sudo chmod 755 /var/run/amavis
```
Создаем tmpfiles конфиг для автоматического создания директории
```bash
sudo nano /etc/tmpfiles.d/amavis.conf
```
Добавь:
```
d /run/amavis 0755 amavis amavis -
```
Примени конфиг:
```bash
sudo systemd-tmpfiles --create
```
**Замени** `mail.example.com` на свое полное имя хоста.
### Обновляем базу вирусов
ClamAV нужна актуальная база вирусов:
```bash
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl start clamav-freshclam
```
Это займет 2-5 минут. Freshclam скачает ~200-300MB данных.
Проверь статус:
```bash
sudo systemctl status clamav-freshclam
```
Должен быть `active (running)`.
## Настройка ClamAV
### Проверяем что демон запущен
```bash
sudo systemctl status clamav-daemon
```
Если не запущен(что скорее всего):
```bash
sudo systemctl enable clamav-daemon
sudo systemctl start clamav-daemon
```
### Настройка сокета
ClamAV слушает через UNIX-сокет. Проверь:
```bash
ls -la /var/run/clamav/clamd.ctl
```
Должен быть сокет с правами для группы `clamav`.
Добавь пользователя `amavis` в группу `clamav`:
```bash
sudo adduser clamav amavis
sudo adduser amavis clamav
```
Перезапусти ClamAV:
```bash
sudo systemctl restart clamav-daemon
```
## Настройка Amavis
Amavis - это диспетчер, который принимает письма от Postfix, прогоняет через ClamAV и SpamAssassin, и возвращает обратно.
### Основной конфиг
Открой:
```bash
sudo nano /etc/amavis/conf.d/15-content_filter_mode
```
Раскомментируй:
```perl
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
```
**Что сделали:** Включили проверку на вирусы и спам.
### Настройка интеграции
Открой:
```bash
sudo nano /etc/amavis/conf.d/50-user
```
Добавь в конец:
```perl
# Домен
$mydomain = 'example.com';
$myhostname = 'mail.example.com';
# Интерфейс
$inet_socket_bind = '127.0.0.1';
# Порты
$inet_socket_port = 10024;
# Политика для локальных доменов
$policy_bank{'MYNETS'} = {
originating => 1,
os_fingerprint_method => undef,
};
# Антиспам
$sa_tag_level_deflt = -999; # Всегда добавлять заголовки
$sa_tag2_level_deflt = 5.0; # Помечать как спам при 5+ баллах
$sa_kill_level_deflt = 10.0; # Отклонять при 10+ баллах
# Антивирус
$virus_admin = "postmaster\@$mydomain";
# Уведомления
$virus_quarantine_to = "virus-quarantine\@$mydomain";
$spam_quarantine_to = "spam-quarantine\@$mydomain";
# Обязательно в конце (по умолчанию уже присутствует)
1;
```
**Замени:**
- `example.com` на свой домен
- `mail.example.com` на свое имя хоста
**Что настроили:**
**Основные параметры:**
- Слушаем на localhost:10024
- Домен и hostname для заголовков
**Антиспам:**
- `-999` - всегда добавлять X-Spam заголовки
- `5.0` - при 5+ баллах помечать как спам (X-Spam-Flag: YES)
- `10.0` - при 10+ баллах отклонять письмо
**Антивирус:**
- Всегда проверять через ClamAV
- Карантин для вирусов и спама
### Права на директории
```bash
sudo chown -R amavis:amavis /var/lib/amavis
sudo chmod 750 /var/lib/amavis
```
### Запуск Amavis
```bash
sudo systemctl enable amavis
sudo systemctl start amavis
sudo systemctl status amavis
```
Должен быть `active (running)`.
Проверь порт:
```bash
sudo ss -tulnp | grep 10024
```
Должно быть:
```bash
tcp LISTEN 0 4096 127.0.0.1:10024 0.0.0.0:* users:(("/usr/sbin/amavi",pid=43480,fd=5),("/usr/sbin/amavi",pid=43479,fd=5),("/usr/sbin/amavi",pid=43456,fd=5))
```
## Настройка SpamAssassin
SpamAssassin работает через Amavis, но нужно настроить его правила.
### Основной конфиг
Открой:
```bash
sudo nano /etc/spamassassin/local.cf
```
Добавь в самый конец:
```
# Требуемый балл для спама
required_score 5.0
# Использовать Bayesian фильтр
use_bayes 1
bayes_auto_learn 1
# DNSBL проверки
use_razor2 0
use_pyzor 0
# Сетевые проверки (SPF, DKIM)
use_dcc 0
# Автообучение
bayes_auto_learn_threshold_nonspam -0.1
bayes_auto_learn_threshold_spam 6.0
# Путь к базе Bayes
bayes_path /var/lib/amavis/.spamassassin/bayes
# Язык
ok_languages en ru
ok_locales en ru
# Размер письма для проверки (500KB)
report_safe 0
```
**Что настроили:**
**required_score 5.0:**
- Порог для пометки спама
**Bayesian фильтр:**
- Обучаемая модель на основе примеров
- Автообучение включено
**DNSBL:**
- Razor/Pyzor/DCC отключены (используем встроенные DNSBL)
**Автообучение:**
- Письма с баллами < -0.1 учатся как не-спам
- Письма с баллами > 6.0 учатся как спам
### Создаем директорию для Bayes
```bash
sudo mkdir -p /var/lib/amavis/.spamassassin
sudo chown -R amavis:amavis /var/lib/amavis/.spamassassin
sudo chmod 700 /var/lib/amavis/.spamassassin
```
### Запуск SpamAssassin
```bash
sudo systemctl enable spamassassin
sudo systemctl start spamassassin
sudo systemctl status spamassassin
```
Должен быть `active (running)`.
### Перезапуск Amavis
```bash
sudo systemctl restart amavis
```
## Настройка Postgrey
Postgrey - это greylisting("временная задержка"). Принцип: первое письмо от нового отправителя откладывается на 5 минут. Легальные серверы повторят попытку, спам-боты - нет.
### Конфигурация
Открой:
```bash
sudo nano /etc/default/postgrey
```
Найди и измени:
```bash
POSTGREY_OPTS="--inet=127.0.0.1:10023 --delay=300"
```
**Что настроили:**
- `--inet=127.0.0.1:10023` - слушать на localhost:10023
- `--delay=300` - задержка 5 минут (300 секунд)
### Белые списки
Postgrey имеет встроенные белые списки для крупных отправителей (Google, Microsoft, и т.д.).
Посмотреть:
```bash
cat /etc/postgrey/whitelist_clients
```
Добавить свои (опционально):
```bash
sudo nano /etc/postgrey/whitelist_clients.local
```
Формат:
```
/^.*\.trusted-domain\.com$/
192.168.1.0/24
specific-server.example.com
```
На примере Yandex:
```
/^.*\.yandex\.ru$/
/^.*\.ya\.ru$/
```
### Запуск
```bash
sudo systemctl enable postgrey
sudo systemctl start postgrey
sudo systemctl status postgrey
```
Должен быть `active (running)`.
Проверь порт:
```bash
sudo ss -tulnp | grep 10023
```
Должно быть:
```
tcp LISTEN 0 5 127.0.0.1:10023 ...
```
## Интеграция с Postfix
Сейчас настроим Postfix для прогона всех писем через Amavis и Postgrey.
### Настройка content_filter
Открой:
```bash
sudo nano /etc/postfix/main.cf
```
В конце секции `smtpd_recipient_restrictions`, созданную на предыдущих этапах, добавь строку:
```
# Postgrey для greylisting
check_policy_service inet:127.0.0.1:10023
```
И добавь в конец файла:
```
# Content filter через Amavis
content_filter = smtp-amavis:[127.0.0.1]:10024
```
**Что добавили:**
**content_filter:**
- Все письма идут через Amavis на порт 10024
- Amavis проверяет через ClamAV и SpamAssassin
- Возвращает обратно в Postfix на порт 10025
**smtpd_recipient_restrictions:**
- Добавили `check_policy_service inet:127.0.0.1:10023` - проверка через Postgrey
### Настройка master.cf
Открой:
```bash
sudo nano /etc/postfix/master.cf
```
Добавь в конец:
```
# Отправка в Amavis
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
# Прием из Amavis обратно
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o smtpd_restriction_classes=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
-o local_header_rewrite_clients=
```
**Что настроили:**
**smtp-amavis:**
- Транспорт для отправки в Amavis
- Таймаут 1200 секунд (для больших писем)
- Максимум 20 использований соединения
**127.0.0.1:10025:**
- Прием обратно из Amavis
- Отключаем повторные проверки (content_filter пустой)
- Пропускаем только с localhost
### Перезапуск Postfix
Проверь конфиг:
```bash
sudo postfix check
```
Если ошибок нет - перезапускай:
```bash
sudo postfix reload
```
Проверь статус:
```bash
sudo systemctl status postfix
```
## Тестирование защиты
### Тест 1: Проверка антивируса
Отправь тестовый вирус EICAR (безопасная тестовая сигнатура):
```bash
telnet localhost 25
```
```
EHLO test.local
MAIL FROM:<test@example.com>
RCPT TO:<admin@example.com>
DATA
Subject: Virus test
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
.
QUIT
```
Проверь логи:
```bash
sudo grep -i "eicar\|infected\|virus" /var/log/mail.log | tail -20
```
Должно быть:
```
... mail amavis[44437]: (44437-01) Blocked INFECTED (Eicar-Signature) {DiscardedOutbound,Quarantined}, MYNETS LOCAL [127.0.0.1]:6674 <test@example.com> -> <admin@example.com>, quarantine: virus-quarantine@example.com, Queue-ID: 6B6C425808, Message-ID: <20260317085556.6B6C425808@mail.example.com>, mail_id: fqAsJO87JdbS, Hits: -, size: 375, 454 ms
... mail postfix/smtp[47529]: 6B6C425808: to=<admin@example.com>, relay=127.0.0.1[127.0.0.1]:10024, delay=24, delays=24/0.02/0.09/0.39, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=44437-01 - INFECTED: Eicar-Signature)
... mail postfix/lmtp[47533]: B34582580B: to=<virus-quarantine@example.com>, relay=mail.example.com[private/dovecot-lmtp], delay=0.12, delays=0.01/0.02/0.04/0.06, dsn=5.1.1, status=bounced (host mail.example.com[private/dovecot-lmtp] said: 550 5.1.1 <virus-quarantine@example.com> User doesn't exist: virus-quarantine@example.com (in reply to RCPT TO command))
```
Письмо **отклонено** - антивирус работает.
### Тест 2: Проверка антиспама
Отправь письмо с внешнего почтового ящика (Gmail, Yandex) на свой сервер с текстом:
```
Subject: BUY CHEAP VIAGRA NOW!!!
Body:
CLICK HERE FOR AMAZING DEALS!!!
FREE MONEY! ACT NOW!
BUY VIAGRA CIALIS CHEAP!
100% GUARANTEED! NO PRESCRIPTION!
MAKE MONEY FAST! LIMITED TIME!
```
**Важно:** Тест через `telnet localhost 25` **не покажет** X-Spam заголовки, т.к. письмо будет считаться исходящим от своих (`MYNETS`).
Проверь логи:
```bash
sudo grep "amavis" /var/log/mail.log | tail -5
```
Должна приблизительно быть строка:
```
... mail amavis[51765]: (51765-01) Passed SPAMMY {RelayedOutbound}, MYNETS LOCAL [127.0.0.1]:45220 <spam@spam.com> -> <admin@example.com>, Queue-ID: 526902584D, Message-ID: <20260317101453.526902584D@mail.example.com>, mail_id: yUPoX6uzzm6f, Hits: 6.549, size: 375, queued_as: 9DA0D2584F, 1259 ms
```
- `Passed CLEAN` — не спам (баллов < 5.0)
- `Passed SPAMMY` спам (баллов >= 5.0)
- `Hits: X.XX` — количество баллов SpamAssassin
Если баллов >= 5.0, письмо помечено как спам и в заголовках будет:
```
X-Spam-Flag: YES
X-Spam-Score: 15.2
X-Spam-Status: Yes, score=15.2
```
Проверь письмо:
```bash
sudo ls -t /var/mail/example.com/admin/new/ | head -1 | xargs -I {} sudo cat /var/mail/example.com/admin/new/{} | grep X-Spam
```
**Если баллов мало (< 5.0):**
Это нормально — письмо от доверенного провайдера (Yandex, Gmail) с валидной DKIM подписью получает мало баллов. SpamAssassin работает правильно, отличая легитимную почту от спама.
**Уточнение:** В качестве спам рассылки я использовал почту Yandex.
Логи испытания:
```
... mail amavis[51765]: (51765-01) Passed SPAMMY {RelayedOutbound}, MYNETS LOCAL [127.0.0.1]:45220 <spam@spam.com> -> <admin@example.com>, Queue-ID: 526902584D, Message-ID: <20260317101453.526902584D@mail.example.com>, mail_id: yUPoX6uzzm6f, Hits: 6.549, size: 375, queued_as: 9DA0D2584F, 1259 ms
... mail amavis[51766]: (51766-01) Passed CLEAN {RelayedOpenRelay}, [178.154.239.223]:36200 [2a02:6b8:c42:e720:0:640:3001:0] <oakazanin@ya.ru> -> <admin@example.com>, Queue-ID: AA84721409, Message-ID: <121751773743278@mail.yandex.ru>, mail_id: V5iYivtYPpbe, Hits: 1.567, size: 1912, queued_as: 948F02584F, 853 ms
```
Из логов видно, что в начале письмо получает Passed SPAMMY, а затем Passed CLEAN, Hits: 1.567(колличество баллов, что < 5.0).
Причины:
- Отправитель - Yandex (доверенный провайдер)
- Валидная DKIM подпись:
```
DKIM-Signature: v=1; a=rsa-sha256; d=ya.ru; s=mail;
```
- IP не в блэклистах
### Тест 3: Проверка Postgrey
Отправь письмо с другого IP (запрос с внешнего сервера):
```bash
telnet mail.example.com 25
```
где, mail.example.com - полное доменное имя или IP твоего почтового сервера.
```
EHLO mail.google.com
MAIL FROM:<test@newdomain.com>
RCPT TO:<admin@example.com>
DATA
Subject: Greylisting test
.
QUIT
```
При первой попытке должен получить:
```
450 4.2.0 <admin@example.com>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/example.com.html
```
Подожди 5 минут и повтори - письмо пройдет.
Проверь статус Postgrey:
```bash
sudo grep "postgrey" /var/log/mail.log | tail -10
```
Должна быть запись о Greylisted.
## Обучение SpamAssassin
Чем больше примеров спама и не-спама покажешь SpamAssassin, тем точнее он работает.
### Ручное обучение
**Пометить письмо как спам:**
```bash
sudo sa-learn --spam /var/mail/example.com/admin/.Spam/cur/*
```
**Пометить как не-спам:**
```bash
sudo sa-learn --ham /var/mail/example.com/admin/cur/*
```
### Проверить статистику обучения
```bash
sudo sa-learn --dump magic
```
Вывод:
```
0.000 0 3 0 non-token data: bayes db version
0.000 0 150 0 non-token data: nspam
0.000 0 450 0 non-token data: nham
```
**nspam** - количество спам-писем в базе
**nham** - количество не-спам писем в базе
**После обучения перезапусти Amavis:**
```bash
sudo systemctl restart amavis
```
### Автообучение
SpamAssassin автоматически учится на письмах с четкими признаками (настроили в `local.cf`):
- Баллы < -0.1 автоматически не-спам
- Баллы > 6.0 → автоматически спам
Через неделю-две база накопится, точность вырастет.
## Fail2ban для почтовых сервисов
Защита от брутфорса паролей SMTP/IMAP.
### Проверка установки
Fail2ban должен быть установлен из статьи по базовой настройке сервера:
{{< article link="/posts/tips-debian-12-hardening/">}}
Проверь:
```bash
sudo systemctl status fail2ban
```
### Настройка jail для почты
Открой:
```bash
sudo nano /etc/fail2ban/jail.local
```
Добавь в конец:
```ini
[postfix-sasl]
enabled = true
port = smtp,submission,smtps
filter = postfix[mode=auth]
logpath = /var/log/mail.log
maxretry = 3
bantime = 600
[dovecot]
enabled = true
port = imap,imaps,pop3,pop3s
filter = dovecot
logpath = /var/log/mail.log
maxretry = 3
bantime = 600
```
**Что настроили:**
**postfix-sasl:**
- Защита SMTP AUTH (порты 25, 587, 465)
- Максимум 3 неудачных попытки
- Бан на 10 минут
**dovecot:**
- Защита IMAP/POP3 (порты 143, 993, 110, 995)
- Максимум 3 неудачных попытки
- Бан на 10 минут
### Перезапуск Fail2ban
```bash
sudo systemctl reload fail2ban
```
Проверь тюрьмы:
```bash
sudo fail2ban-client status
```
Должно быть:
```
Status
|- Number of jail: 3
`- Jail list: dovecot, postfix-sasl, sshd
```
### Тест Fail2ban
Попробуй подключиться с неправильным паролем 3 раза:
```bash
telnet localhost 587
```
```
EHLO test.local
AUTH PLAIN dGVzdEBleGFtcGxlLmNvbQB3cm9uZ3Bhc3N3b3Jk
AUTH PLAIN dGVzdEBleGFtcGxlLmNvbQB3cm9uZ3Bhc3N3b3Jk
AUTH PLAIN dGVzdEBleGFtcGxlLmNvbQB3cm9uZ3Bhc3N3b3Jk
```
После 3-й попытки твой IP должен быть забанен.
Проверь:
```bash
sudo fail2ban-client status postfix-sasl
```
Должен появиться IP в `Banned IP list`.
## Мониторинг защиты
### Статистика Amavis
```bash
sudo amavisd-nanny
```
Команда выводит состояние worker-процессов в реальном времени.
Точки (.) — процесс idle, звездочки (*) — обрабатывает письмо.
### Статистика ClamAV
```bash
sudo clamdscan --version
sudo freshclam --version
```
Проверь обновление баз:
```bash
sudo cat /var/log/clamav/freshclam.log | tail -20
```
### Статистика SpamAssassin
```bash
sudo sa-learn --dump magic
```
**Вывод:**
```
0.000 0 3 0 non-token data: bayes db version
0.000 0 234 0 non-token data: nspam
0.000 0 789 0 non-token data: nham
0.000 0 45123 0 non-token data: ntokens
0.000 0 1773745892 0 non-token data: oldest atime
0.000 0 1773831245 0 non-token data: newest atime
0.000 0 0 0 non-token data: last journal sync atime
0.000 0 0 0 non-token data: last expiry atime
0.000 0 0 0 non-token data: last expire atime delta
0.000 0 0 0 non-token data: last expire reduction count
```
**Где:**
nspam: 234 — количество спам-писем в обучающей базе
nham: 789 — количество не-спам писем в обучающей базе
ntokens: 45123 — количество токенов (слов) в базе
### Логи
Все логи почты в одном месте:
```bash
sudo tail -f /var/log/mail.log
```
Фильтруй по ключевым словам:
```bash
# Вирусы
sudo grep "Blocked INFECTED" /var/log/mail.log
# Спам
sudo grep "Passed SPAM" /var/log/mail.log
# Greylisting
sudo grep "Greylisted" /var/log/mail.log
# Fail2ban баны
sudo grep "Ban" /var/log/fail2ban.log
```
## Тонкая настройка
### Увеличить порог спама
Если много ложных срабатываний, увеличь `required_score`:
```bash
sudo nano /etc/spamassassin/local.cf
```
Измени:
```
required_score 7.0
```
Перезапусти:
```bash
sudo systemctl restart amavis
```
### Добавить домен в белый список Postgrey
```bash
sudo nano /etc/postgrey/whitelist_clients.local
```
Добавь:
```
/^.*\.important-partner\.com$/
```
Перезапусти:
```bash
sudo systemctl restart postgrey
```
### Отключить greylisting для авторизованных
Если не хочешь задержек для своих пользователей, в Postfix измени:
```bash
sudo nano /etc/postfix/main.cf
```
В `smtpd_recipient_restrictions` **перед** `check_policy_service` добавь:
```
permit_sasl_authenticated,
```
Чтобы получилось:
```
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:10023
```
Перезагрузи:
```bash
sudo postfix reload
```
## Типичные проблемы
### ClamAV жрет всю память
ClamAV требует ~500-700MB RAM. Если сервер слабый:
Открой:
```bash
sudo nano /etc/clamav/clamd.conf
```
Уменьши:
```
MaxThreads 10
MaxConnectionQueueLength 15
```
Перезапусти:
```bash
sudo systemctl restart clamav-daemon
```
### Письма застревают в очереди
Проверь очередь:
```bash
sudo postqueue -p
```
Причина может быть в медленной проверке. Увеличь таймаут:
```bash
sudo nano /etc/postfix/master.cf
```
Найди `smtp-amavis` и увеличь:
```
smtp_data_done_timeout=1800
```
Перезагрузи:
```bash
sudo postfix reload
```
### SpamAssassin не учится
Проверь права на базу Bayes:
```bash
ls -la /var/lib/amavis/.spamassassin/
```
Должен быть владелец `amavis:amavis`.
Исправь:
```bash
sudo chown -R amavis:amavis /var/lib/amavis/.spamassassin
sudo chmod 700 /var/lib/amavis/.spamassassin
```
### Postgrey блокирует легальную почту
Добавь отправителя в белый список:
```bash
sudo nano /etc/postgrey/whitelist_clients.local
```
```
sender-domain.com
```
Перезапусти:
```bash
sudo systemctl restart postgrey
```
## Что получилось
Сейчас у тебя:
**Работает:**
- Антивирусная проверка всех входящих писем (ClamAV)
- Антиспам с обучением (SpamAssassin + Bayes)
- Greylisting для новых отправителей (Postgrey)
- Защита от брутфорса SMTP/IMAP (Fail2ban)
**Потребление ресурсов:**
- ClamAV: ~500-700 MB RAM
- SpamAssassin: ~200-300 MB на процесс
- Amavis: ~50-100 MB
- Postgrey: ~10-20 MB
- **Итого:** +800MB-1.2GB RAM
**Проблемы:**
- Пароли все еще передаются открытым текстом (нет TLS)
- Нет DKIM подписей (письма могут улетать в спам)
- Нет веб-интерфейса
Это **защищенный сервер**, но еще не production-ready.
## Следующий шаг
В следующей части настроим шифрование и репутацию:
- TLS через Let's Encrypt (шифрование соединений)
- DKIM подписи (доверие к твоим письмам)
- SPF и DMARC записи (защита от подделки домена)
После этого письма перестанут улетать в спам у Gmail/Outlook.