Налагодження пошти на Ubuntu Server 24.04 можна виконати різними способами, залежно від твоїх цілей: чи це тільки надсилання листів із сайту, чи повноцінний поштовий сервер для прийому/відправки пошти (SMTP, IMAP/POP3), з вебінтерфейсом, захистом, DNS-записами тощо.
Я розділю на два основні сценарії:
1. Тільки надсилання пошти (наприклад, з сайту):
Мінімально необхідне:
Встановити Postfix в режимі "Internet Site"
Указати правильний домен
Додати SPF, DKIM, DMARC записи у DNS
Можливо, використовувати SMTP-реле (SendGrid, Mailgun, Gmail SMTP, тощо)
Приклад:
sudoaptupdatesudoaptinstallpostfixmailutils-y
При установці вибери: "Internet Site", а як "System mail name" — твій домен (напр., example.com)
Обрати "Internet Site", mail name = твій домен (наприклад, mail.example.com)
Після встановлення, редагуй конфіг:
Перевір, щоб були такі рядки:
2. Dovecot:
Найпростіше використовувати пошту у форматі Maildir у домашній папці:
Знайди та встанови:
Увімкни ім'я користувача/пароль:
Убери # з:
Увімкни IMAP/POP3 протоколи:
Додай:
3. Сертифікат SSL (через Let's Encrypt):
УВАГА!
Не створюй сертифікат зі "--standalone":
Тому що потім будуть проблеми з автоматичним оновленням сертифікату!
Після отримання сертифікату, додай його в конфіги Postfix та Dovecot (приклад вище).
4. DNS-записи (на твоєму DNS-хостингу):
A-запис:
MX-запис:
SPF:
DKIM + DMARC:
Потрібно налаштовувати додатково через opendkim та створити відповідні TXT записи.
5. Перевірка роботи:
Після перезапуску сервісів:
Перевірка портів:
Альтернатива — Готові рішення:
Якщо не хочеш морочитися з конфігами вручну:
Mailcow (на Docker) — повноцінний поштовий сервер з сучасним інтерфейсом
iRedMail — встановлює одразу все (Postfix, Dovecot, SpamAssassin, вебінтерфейс і панель)
Уявімо, я все необхідне зробив вручну. Як додати користувача (поштову скриньку)?
Добре! Якщо ти налаштував поштовий сервер вручну (Postfix + Dovecot), і використовуєш системні акаунти з поштою у форматі Maildir, то створення нової поштової скриньки — це фактично створення системного користувача, а пошта буде зберігатися у ~/Maildir.
✅ Як додати поштову скриньку (системного користувача):
1. Створи користувача:
Приклад:
Це створить:
користувача alice
домашню директорію /home/alice
пароль для входу (використовується також для пошти, якщо Dovecot аутентифікує через PAM)
2. Створи структуру Maildir (якщо ще нема):
Або просто авторизуйся IMAP-клієнтом (наприклад, Thunderbird), і Dovecot сам створить Maildir.
3. Перевір:
Вхідна пошта має зберігатися у /home/alice/Maildir/new
IMAP/POP3 клієнт може підключитися до сервера з логіном alice і встановленим паролем
Але для простого сервера з кількома ящиками достатньо системних користувачів.
Хочеш, щоб я показала також приклад конфігурації з віртуальними поштовими скриньками — без створення системних юзерів?
Не треба, це, мабуть значно складніше.
Так, правильно — віртуальні скриньки дають більше гнучкості (наприклад, десятки доменів без окремих системних юзерів), але ціна — складність: потрібно заводити MySQL або файли-карти, писати virtual_alias_maps, virtual_mailbox_maps, UID/GID вручну тощо.
Для домашнього сервера або простої корпоративної пошти на кілька користувачів — системні обліковки + Maildir повністю достатньо й надійно.
Якщо буде потрібно:
веб-інтерфейс (наприклад, Roundcube)
фільтрація пошти
або прийом пошти з alias-адрес (наприклад, info@example.com → real_user)
— усе це можна поступово додавати на існуючу базу.
Можу допомогти з наступними кроками, якщо захочеш:
дозвіл IMAP через клієнт (Thunderbird, K-9 Mail, etc.)
налаштування SPF/DKIM/DMARC у DNS
налаштування TLS на портах 587 і 993
встановлення вебінтерфейсу (Roundcube)
Пиши, куди далі рухаємося.
я правильно розумію, що якщо треба два поштових домена, то це вже через віртуальні скриньки?
Так, ти правильно розумієш:
якщо ти хочеш обслуговувати два або більше поштових доменів (наприклад, @example.com і @second.org) на одному сервері, то стандартна система з локальними (системними) користувачами вже не підходить.
Чому?
Postfix (і Dovecot), коли працюють з системними користувачами, не знають нічого про домени — для них user це просто ім’я локального облікового запису.
Тобто:
alice@example.com і alice@second.org → для системи це один і той самий alice
Відповідно:
не можна створити двох різних користувачів alice у двох доменах.
не можна мати bob@example.com і bob@second.org, якщо потрібно, щоб це були різні скриньки
Тому у випадку кількох доменів — потрібно:
❗ Використовувати віртуальні домени та віртуальні скриньки
Тоді:
користувачі й домени зберігаються в okремому джерелі (файл, база MySQL, LDAP)
пошта кожного користувача зберігається у визначеній структурі (наприклад, /var/vmail/second.org/bob/Maildir/)
немає потреби створювати системного юзера
Альтернатива: окремі системи або ізоляція
Теоретично, можна:
створити віртуальні машини або контейнери для кожного домену (наприклад, example.com на одному LXC, second.org на іншому)
або використовувати Docker і той самий Mailcow, де мультидомен підтримується "з коробки"
Якщо дуже хочеться уникнути віртуальних скриньок...
...і кількість користувачів мала — можна змоделювати мультидоменність вручну, наприклад:
створити системного користувача alice_example, alice_second
прописати в virtual_alias_maps перенаправлення:
Але це костиль, який не масштабується і ускладнює все далі.
Підсумок
Завдання
Рішення
Один домен
Системні користувачі
Багато доменів
Віртуальні скриньки
Потрібно гнучке управління
Віртуальні скриньки + MySQL
Автоматизація, web UI
Mailcow / iRedMail / Modoboa
Якщо хочеш — можу показати приклад базової конфігурації Postfix із віртуальними скриньками, або порадити готовий стек з мультидоменністю.
Розкажи про Віртуальні скриньки + MySQL
Добре, поясню детально й поступово.
📬 Віртуальні скриньки + MySQL у Postfix/Dovecot
Цей підхід дозволяє:
обслуговувати декілька доменів
створювати поштові адреси без системних обліковок
зберігати паролі та поштові адреси в базі MySQL
масштабувати сервер і керувати ним централізовано
📌 Основна ідея
1. Postfix:
приймає пошту
перевіряє, чи існує адреса у базі (MySQL)
віддає її віртуальному користувачу
2. Dovecot:
дозволяє клієнтам (Thunderbird, Roundcube, K-9 тощо) підключитися до скриньки
аутентифікує користувача за паролем з MySQL
надає доступ до Maildir (наприклад, /var/vmail/example.com/alice/)
📦 Компоненти, які потрібні
📁 Структура директорій (приклад)
🧩 База MySQL
Приклад бази mailserver із трьома таблицями:
Таблиця virtual_domains:
Таблиця virtual_users:
Таблиця virtual_aliases:
🔐 Додавання користувача (приклад)
Паролі бажано зберігати у вигляді SHA512-CRYPT або bcrypt, не ENCRYPT.
⚙️ Конфігурація Postfix
У main.cf додати:
UID/GID — створюєш користувача vmail:
Файл /etc/postfix/mysql-virtual-domains.cf:
І подібні — для users та aliases.
⚙️ Конфігурація Dovecot
У dovecot.conf:
У 10-mail.conf:
У 10-auth.conf:
У auth-sql.conf.ext:
І dovecot-sql.conf.ext:
✅ Готово! Перевір:
Додай користувача до бази
Створи йому каталог:
Перезапусти:
Підключися через IMAP (993) Thunderbird чи будь-яким клієнтом
CREATE TABLE virtual_domains (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE virtual_users (
id INT NOT NULL AUTO_INCREMENT,
domain_id INT NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY email (email),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
);
CREATE TABLE virtual_aliases (
id INT NOT NULL AUTO_INCREMENT,
domain_id INT NOT NULL,
source VARCHAR(100) NOT NULL,
destination VARCHAR(100) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
);
-- Додати домен
INSERT INTO virtual_domains (name) VALUES ('example.com');
-- Отримати domain_id
SELECT id FROM virtual_domains WHERE name='example.com';
-- Додати користувача
INSERT INTO virtual_users (domain_id, password, email)
VALUES (1, ENCRYPT('пароль'), 'alice@example.com');