Как мы поднимали почту на собственном сервере (Ubuntu + Exim4 + Dovecot) и победили почти все ошибки

admin

Anabolic Gontarski
Команда форума
Администрация
Доверенный
Новичок
5681189.jpg

📧 Как мы поднимали почту на собственном сервере (Ubuntu + Exim4 + Dovecot) и победили почти все ошибки​


Когда я перенёс форум inva.life на свой сервер, я понимал: веб-часть — это только половина дела. Настоящая боль начинается, когда ты запускаешь свой почтовый сервер.

Сначала письма не принимались вообще.
Потом не работал IMAP.
Потом не поднимался Dovecot.
Потом не слушались SMTP-порты.
Потом Gmail начал отказывать в доставке.

Это была полноценная отладка всей почтовой цепочки:

DNS → Exim → TLS → Dovecot → SMTP AUTH → Outlook → внешние сервера.


Ниже — полный разбор того, что мы делали и какие правки реально помогли.

🧩 Архитектура​


  • ОС: Ubuntu 24.04
  • MTA: Exim4
  • IMAP/POP3: Dovecot
  • Сертификат: Let’s Encrypt (через ISPmanager)
  • Почтовый домен: inva.life
  • Почтовый сервер: mail.inva.life

🚨 Проблема №1 — Exim отправлял почту «в себя», а не локально​


При проверке:
Код:
exim -bt admin@inva.life

Сервер показывал:
Код:
router = dnslookup, transport = remote_smtp

То есть он считал домен внешним.

🔧 Решение​


Файл:
Код:
/etc/exim4/domains

Добавили:
Код:
inva.life: 1

Проверка:
Код:
exim -be '${if match_domain{inva.life}{+local_domains}{YES}{NO}}'

Ответ: YES

После этого Exim начал понимать, что это локальный домен.

🚨 Проблема №2 — Dovecot не запускался​


Ошибка:
Код:
systemctl restart dovecot
Job for dovecot.service failed

Причина — некорректная SSL-конфигурация.

🔐 Настройка SSL для Dovecot​


Файл:
Код:
/etc/dovecot/conf.d/10-ssl.conf

Установили:
Код:
ssl = required
ssl_cert = </var/www/httpd-cert/user/inva.life_le2.crt
ssl_key = </var/www/httpd-cert/user/inva.life_le2.key

Проверка:
Код:
openssl s_client -connect localhost:993

Если видим сертификат Let’s Encrypt — всё работает.
 

admin

Anabolic Gontarski
Команда форума
Администрация
Доверенный
Новичок

🚨 Проблема №3 — Неверный формат dovecot.passwd​


Dovecot не находил пользователя:
Код:
doveadm user admin
userdb lookup: user admin doesn't exist

Причина — неправильная строка в /etc/dovecot/dovecot.passwd.

🔐 Правильный формат /etc/dovecot/dovecot.passwd​


Сначала генерируем пароль:
Код:
doveadm pw -s SHA512-CRYPT

Далее строка должна быть строго такого вида:
Код:
admin@inva.life:{SHA512-CRYPT}$6$.....:1010:1010::/var/www/admin/data::

Без лишних полей. Без maildir в конце.

После перезапуска:
Код:
doveadm auth test admin@inva.life пароль

Если: auth succeeded — значит IMAP готов.

🚨 Проблема №4 — Exim слушал только 25 порт​


SMTP 465 и 587 не работали.

Проверка:
Код:
ss -lntp | egrep ':(25|587|465)\b'

Был только 25.

🔧 Исправление конфигурации Exim​


Файл:
Код:
/etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs

Добавили:
Код:
MAIN_TLS_ENABLE = yes
daemon_smtp_ports = 25 : 587 : 465
tls_on_connect_ports = 465

Важно: если строки уже есть — не дублировать!

Далее:
Код:
update-exim4.conf
systemctl restart exim4

Проверка:
Код:
ss -lntp | egrep ':(25|587|465)\b'

Должны слушаться все три порта.
 

admin

Anabolic Gontarski
Команда форума
Администрация
Доверенный
Новичок

🚨 Проблема №5 — TLS ошибка в Exim​


В логах:
Код:
TLS error ... cert=/etc/exim4/exim.crt key=/etc/exim4/exim.key: Error while reading file

🔐 Решение — подключить реальный сертификат​


Сертификат ISPmanager уже был в:
Код:
/var/www/httpd-cert/user/

Мы собрали полный chain:
Код:
cat inva.life_le2.crt inva.life_le2.crtca > /etc/exim4/exim.crt
cp inva.life_le2.key /etc/exim4/exim.key

Права:
Код:
chown root:Debian-exim /etc/exim4/exim.crt /etc/exim4/exim.key
chmod 0644 /etc/exim4/exim.crt
chmod 0640 /etc/exim4/exim.key

После перезапуска TLS заработал.

Проверка:
Код:
openssl s_client -starttls smtp -connect localhost:587

Если виден сертификат — всё хорошо.

🧪 Проверка SMTP вручную​

Код:
openssl s_client -starttls smtp -connect mail.inva.life:587
EHLO test

Если сервер отвечает: 250 HELP — SMTP работает.

📬 Outlook наконец подключился​


Настройки:

IMAP — 993 — SSL/TLS
SMTP — 465 — SSL/TLS
Авторизация — по логину и паролю


И всё заработало.

🚨 Последняя проблема — Gmail не принимает письма​


Mail.ru — принимает.
Другие сервера — принимают.
Gmail — нет.

Ошибка:
Код:
550-5.7.1 The IP you're using to send mail is not authorized

Причина — домашний IP XXX.XXX.XX.XXX не имеет почтовой репутации.


Это не баг сервера.
Это политика Google.
 

admin

Anabolic Gontarski
Команда форума
Администрация
Доверенный
Новичок
Что мы добились:

✅ Сервер принимает почту
✅ IMAP работает
✅ SMTP 465 и 587 работают
✅ TLS настроен правильно
✅ Outlook подключается
✅ Письма доставляются на большинство почтовых сервисов
❌ Gmail блокирует прямую доставку с домашнего IP

💡 Что дальше?​


Есть два варианта:
  1. Прогревать IP и настраивать rDNS, SPF, DKIM, DMARC
  2. Использовать SMTP-relay (например Brevo)

🎯 Вывод​


Поднять почту на собственном сервере — реально.
Но это не «установил пакет и забыл».


Нужно пройти через:
  • локальные домены
  • auth
  • TLS
  • права на сертификаты
  • форматы passwd
  • порты
  • логирование

И только тогда система начинает работать стабильно.

Если кому-то пригодится этот разбор — буду рад.
Если есть вопросы по конфигам — пишите, выложу дополнительные фрагменты.
 

admin

Anabolic Gontarski
Команда форума
Администрация
Доверенный
Новичок

🚀 Gmail блокирует отправку с домашнего сервера? Решение через Brevo SMTP Relay (Exim4 + Debian)​


Мы настраивали почтовый сервер на собственном хостинге (Debian + Exim4 + Dovecot).
IMAP работал. Outlook подключался. Почта отправлялась.

Но Gmail возвращал:
Код:
550-5.7.1 [ХХХ.ХХХ.ХХХ.ХХХ] The IP you're using to send mail is not authorized to send email directly to our servers

И вот в чём проблема 👇

📌 Почему Gmail блокирует домашний IP​


Google проверяет:
  • тип IP (residential / hosting)
  • PTR (reverse DNS)
  • SPF
  • DKIM
  • DMARC
  • репутацию IP
  • входит ли IP в ISP-пул
Даже при идеальных SPF/DKIM — Gmail часто режет прямую отправку с домашних IP.

Наш IP: ХХХ.ХХХ.ХХХ.ХХХ — домашний.
Mail.ru принимал. Gmail — нет.

🎯 Решение: SMTP Relay через Brevo​


Мы подключили: Exim4 → Brevo SMTP → Gmail

В итоге:
  • Gmail видит IP Brevo
  • Репутация высокая
  • Доставка проходит

🔐 Шаг 1. Сделать бэкап конфигурации Exim​

Перед изменениями:
Код:
DATE=$(date +%F_%H-%M)
MAIL_BACKUP_DIR="/backup/mail-backups/$DATE"

mkdir -p "$MAIL_BACKUP_DIR"
cp -a /etc/exim4 "$MAIL_BACKUP_DIR/"
tar -czpf "$MAIL_BACKUP_DIR/exim4-full.tar.gz" /etc/exim4

⚙ Шаг 2. Перевести Exim в режим smarthost​

Открываем:
Код:
nano /etc/exim4/update-exim4.conf.conf

Меняем:
Код:
dc_eximconfig_configtype='internet'

на:
Код:
dc_eximconfig_configtype='smarthost'

И указываем SMTP Brevo:
Код:
dc_smarthost='smtp-relay.brevo.com::587'

Сохраняем.

🔑 Шаг 3. Добавить авторизацию SMTP Brevo​


Создаём/редактируем файл:
Код:
nano /etc/exim4/passwd.client

Добавляем строку:
Код:
smtp-relay.brevo.com:SMTP_LOGIN:SMTP_KEY

Права:
Код:
chmod 640 /etc/exim4/passwd.client
chown root:Debian-exim /etc/exim4/passwd.client

🔄 Шаг 4. Перезапуск Exim​

Код:
update-exim4.conf
systemctl restart exim4
systemctl status exim4

Проверяем, что сервис активен.

🧪 Шаг 5. Тест отправки​

Код:
printf "Subject: Проверка почты inva.life\nFrom: info@inva.life\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n\nДобрый день.\n\nТест после интеграции Brevo.\n\nINVA.LIFE\n" | sendmail -f info@inva.life test@gmail.com

В логах должно быть:

Код:
R=smarthost
H=smtp-relay.brevo.com
 

admin

Anabolic Gontarski
Команда форума
Администрация
Доверенный
Новичок

Настройка DNS у регистратора домена​

SPF (заменяем старый)​


Было:
Код:
v=spf1 mx ip4:ХХХ.ХХХ.ХХХ.ХХХ ~all

Стало:
Код:
v=spf1 include:spf.brevo.com ~all

DKIM (добавляем CNAME)

Код:
brevo1._domainkey  CNAME  b1.inva-life.dkim.brevo.com
brevo2._domainkey  CNAME  b2.inva-life.dkim.brevo.com

Проверка (ВЕЗДЕ ЗНАЧЕНИЯ МЕНЯЙТЕ НА ВАШ ДОМЕН):
Код:
dig brevo1._domainkey.inva.life +short
dig brevo2._domainkey.inva.life +short

DMARC (редактируем существующую)

Код:
_dmarc TXT "v=DMARC1; p=none; aspf=r; sp=none; rua=mailto:rua@dmarc.brevo.com"

Brevo Code (подтверждение домена)

Добавляем TXT в корень:
Код:
brevo-code:xxxxxxxxxxxxxxxx

Проверка:
Код:
dig txt inva.life +short

✅ Результат​

В Brevo домен получает статус: Authenticated

В Gmail:

SPF: PASS
DKIM: PASS
DMARC: PASS

Письма приходят во входящие.

🛡 Что в итоге мы получили​

  • Домашний IP больше не участвует в доставке
  • Gmail больше не блокирует
  • Почта работает стабильно
  • SPF/DKIM/DMARC настроены корректно
  • Репутация формируется через Brevo

📌 Вывод​


Если вы запускаете почту с домашнего или нового IP —
не пытайтесь «прогревать» его для Gmail.

Используйте SMTP Relay (Brevo, Sendgrid, Mailgun и т.д.).

Это:
  • быстрее
  • безопаснее
  • профессиональнее
  • и экономит недели времени
 

admin

Anabolic Gontarski
Команда форума
Администрация
Доверенный
Новичок
📤 ИТОГОВАЯ СХЕМА ОТПРАВКИ ПИСЕМ (admin@ваш.сайт → Gmail)
CSS:
[ Outlook / Thunderbird / Webmail ]
                │
                │ SMTP AUTH (587 / 465)
                ▼
        ┌───────────────────┐
        │      Exim4        │
        │  (mail.ваш.сайт) │
        └───────────────────┘
                │
                │ smarthost relay
                ▼
        ┌───────────────────┐
        │   Brevo SMTP      │
        │ smtp-relay.brevo  │
        └───────────────────┘
                │
                │ отправка через IP Brevo
                ▼
        ┌───────────────────┐
        │   Gmail / Yahoo   │
        │   и др. сервера   │
        └───────────────────┘

1️⃣ Пользователь отправляет письмо​


Outlook:
Код:
SMTP: mail.ваш.сайт
Port: 587
AUTH: admin@ваш.сайт

2️⃣ Exim принимает письмо​


Exim:
  • проверяет SMTP AUTH через Dovecot
  • формирует письмо
  • НЕ отправляет напрямую
  • передаёт через smarthost
В логах:

Код:
R=smarthost
H=smtp-relay.brevo.com

3️⃣ Brevo подписывает письмо​


Brevo:
  • добавляет DKIM подпись
  • проверяет SPF
  • отправляет со своего IP
  • IP имеет хорошую репутацию

4️⃣ Gmail принимает письмо​

Gmail проверяет:

Код:
SPF → include:spf.brevo.com
DKIM → brevo1._domainkey
DMARC → PASS

Результат:
Код:
SPF: PASS
DKIM: PASS
DMARC: PASS
 

admin

Anabolic Gontarski
Команда форума
Администрация
Доверенный
Новичок
📤 ИТОГОВАЯ СХЕМА ПРИЕМА ПИСЕМ (Gmailadmin@ваш.сайт)
CSS:
[ Gmail / Mail.ru / др. ]
            │
            │ SMTP (25)
            ▼
    ┌───────────────────┐
    │  Exim4 (MX)       │
    │ mail.ваш.сайт    │
    └───────────────────┘
            │
            │ local delivery
            ▼
    ┌───────────────────┐
    │   Maildir / spool │
    └───────────────────┘
            │
            │ IMAP
            ▼
    ┌───────────────────┐
    │    Dovecot        │
    └───────────────────┘
            │
            ▼
     Outlook / Webmail

🔎 Подробности приёма​

1️⃣ В DNS указано:​

Код:
MX → mail.inva.life

2️⃣ Входящее письмо приходит на сервер​

Exim слушает порты:
25
587
465

3️⃣ Exim проверяет:​

  • не спам ли
  • не relay ли
  • существует ли ящик admin

4️⃣ Локальная доставка​

Код:
dc_localdelivery='mail_spool'

Письмо сохраняется в:

Код:
/var/mail/admin
или Maildir

5️⃣ Dovecot отдаёт письмо по IMAP​

Клиент подключается:

Код:
IMAP 993 SSL

И видит письмо.
 

admin

Anabolic Gontarski
Команда форума
Администрация
Доверенный
Новичок
Итоговая архитектура (общая):

CSS:
                   ┌────────────────────────┐
                   │       ВАШ.САЙТ       │
                   │                        │
                   │  Exim4  +  Dovecot     │
                   │                        │
                   └─────────────┬──────────┘
                                 │
               ┌─────────────────┴─────────────────┐
               │                                   │
        ВХОДЯЩАЯ ПОЧТА                     ИСХОДЯЩАЯ ПОЧТА
               │                                   │
        Интернет → MX                      Smarthost → Brevo
               │                                   │
             Exim                               Gmail
               │
            Dovecot
               │
           admin@ваш.сайт

СДЕЛАЕМ ВЫВОДЫ ПО СХЕМЕ ПРИЕМА И ОТПРАВКИ ПОЧТЫ:

📤 Отправка​

  • идёт через Brevo
  • твой домашний IP больше не участвует
  • DKIM подписывает Brevo
  • SPF указывает на Brevo

📥 Приём​

  • полностью остаётся на твоём сервере
  • MX указывает на mail.ваш.сайт
  • Brevo не участвует во входящей почте
Это гибрид:

ФункцияГде
Хранение почтыТвой сервер
IMAPDovecot
SMTP для клиентовExim
Исходящая доставкаBrevo
SPF/DKIM/DMARCDNS + Brevo
 
Назад
Сверху