Налагодження пошти на Ubuntu Server 24.04 можна виконати різними способами, залежно від твоїх цілей: чи це тільки надсилання листів із сайту, чи повноцінний поштовий сервер для прийому/відправки пошти (SMTP, IMAP/POP3), з вебінтерфейсом, захистом, DNS-записами тощо.
Я розділю на два основні сценарії:
1. Тільки надсилання пошти (наприклад, з сайту):
Мінімально необхідне:
Встановити Postfix в режимі "Internet Site"
Указати правильний домен
Додати SPF, DKIM, DMARC записи у DNS
Можливо, використовувати SMTP-реле (SendGrid, Mailgun, Gmail SMTP, тощо)
Приклад:
sudo apt update
sudo apt install postfix mailutils -yПри установці вибери: "Internet Site", а як "System mail name" — твій домен (напр.,
example.com)
Після цього можна перевірити надсилання:
echo "Test message" | mail -s "Test subject" you@example.com2. Повноцінний поштовий сервер (вхідна та вихідна пошта):
Це складніший сценарій. Потрібні наступні компоненти:
Основні пакети:
postfix— SMTP сервер для відправки/прийому поштиdovecot— IMAP/POP3 сервер (щоб читати пошту)spamassassin+clamav— захист від спаму/вірусівopendkim— підпис DKIMcertbot— SSL (обов'язково!)вебінтерфейс (optional): Roundcube, RainLoop, Mailcow (Docker), тощо
Кроки налагодження вручну (Postfix + Dovecot):
1. Postfix:
sudo apt install postfix -yОбрати "Internet Site", mail name = твій домен (наприклад,
mail.example.com)
Після встановлення, редагуй конфіг:
sudo nano /etc/postfix/main.cfПеревір, щоб були такі рядки:
myhostname = mail.example.com
mydomain = example.com
myorigin = /etc/mailname
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8
home_mailbox = Maildir/
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_use_tls=yes2. Dovecot:
sudo apt install dovecot-core dovecot-imapd dovecot-pop3d -yНайпростіше використовувати пошту у форматі Maildir у домашній папці:
sudo nano /etc/dovecot/conf.d/10-mail.confЗнайди та встанови:
mail_location = maildir:~/MaildirУвімкни ім'я користувача/пароль:
sudo nano /etc/dovecot/conf.d/10-auth.confУбери # з:
disable_plaintext_auth = yesУвімкни IMAP/POP3 протоколи:
sudo nano /etc/dovecot/dovecot.confДодай:
protocols = imap pop3 lmtp3. Сертифікат SSL (через Let's Encrypt):
sudo apt install certbot python3-certbot-apache -y
sudo certbot certonly --standalone -d mail.example.comПісля отримання сертифікату, додай його в конфіги Postfix та Dovecot (приклад вище).
4. DNS-записи (на твоєму DNS-хостингу):
A-запис:
mail A <твій IP>MX-запис:
@ MX 10 mail.example.com.SPF:
example.com. TXT "v=spf1 mx ~all"DKIM + DMARC:
Потрібно налаштовувати додатково через opendkim та створити відповідні TXT записи.
5. Перевірка роботи:
Після перезапуску сервісів:
sudo systemctl restart postfix dovecotПеревірка портів:
ss -tuln | grep -E '25|587|993|995'Альтернатива — Готові рішення:
Якщо не хочеш морочитися з конфігами вручну:
Mailcow (на Docker) — повноцінний поштовий сервер з сучасним інтерфейсом
iRedMail — встановлює одразу все (Postfix, Dovecot, SpamAssassin, вебінтерфейс і панель)
Уявімо, я все необхідне зробив вручну. Як додати користувача (поштову скриньку)?
Добре! Якщо ти налаштував поштовий сервер вручну (Postfix + Dovecot), і використовуєш системні акаунти з поштою у форматі Maildir, то створення нової поштової скриньки — це фактично створення системного користувача, а пошта буде зберігатися у ~/Maildir.
✅ Як додати поштову скриньку (системного користувача):
1. Створи користувача:
sudo adduser usernameПриклад:
sudo adduser aliceЦе створить:
користувача
aliceдомашню директорію
/home/aliceпароль для входу (використовується також для пошти, якщо Dovecot аутентифікує через PAM)
2. Створи структуру Maildir (якщо ще нема):
sudo mkdir /home/alice/Maildir
sudo maildirmake.dovecot /home/alice/Maildir
sudo maildirmake.dovecot /home/alice/Maildir/.Drafts
sudo maildirmake.dovecot /home/alice/Maildir/.Sent
sudo maildirmake.dovecot /home/alice/Maildir/.Trash
sudo chown -R alice:alice /home/alice/MaildirАбо просто авторизуйся IMAP-клієнтом (наприклад, Thunderbird), і Dovecot сам створить
Maildir.
3. Перевір:
Вхідна пошта має зберігатися у
/home/alice/Maildir/newIMAP/POP3 клієнт може підключитися до сервера з логіном
aliceі встановленим паролем
📥 Приклади адреси:
Якщо в тебе домен
example.com, то пошта буде: alice@example.com
У цьому випадку Postfix автоматично обробляє адресу
alice@example.comяк локального користувачаalice.
🛠 Якщо хочеш створити скриньку не як системного користувача, а віртуального:
Це вже складніше:
потрібно налаштовувати віртуальні домени/користувачі в Postfix і Dovecot
зберігати користувачів у MySQL, або у файлах
налаштовувати
virtual_mailbox_domains,virtual_mailbox_maps,virtual_uid_maps,virtual_gid_maps, тощо
Але для простого сервера з кількома ящиками достатньо системних користувачів.
Хочеш, щоб я показала також приклад конфігурації з віртуальними поштовими скриньками — без створення системних юзерів?
Не треба, це, мабуть значно складніше.
Так, правильно — віртуальні скриньки дають більше гнучкості (наприклад, десятки доменів без окремих системних юзерів), але ціна — складність: потрібно заводити 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перенаправлення:
alice@example.com alice_example
alice@second.org alice_secondАле це костиль, який не масштабується і ускладнює все далі.
Підсумок
Один домен
Системні користувачі
Багато доменів
Віртуальні скриньки
Потрібно гнучке управління
Віртуальні скриньки + 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/)
📦 Компоненти, які потрібні
sudo apt install postfix dovecot-core dovecot-imapd dovecot-pop3d dovecot-mysql mariadb-server -y📁 Структура директорій (приклад)
/var/vmail/
├── example.com/
│ └── alice/
│ └── Maildir/
├── second.org/
└── bob/
└── Maildir/🧩 База MySQL
Приклад бази mailserver із трьома таблицями:
Таблиця virtual_domains:
virtual_domains:CREATE TABLE virtual_domains (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);Таблиця virtual_users:
virtual_users: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
);Таблиця virtual_aliases:
virtual_aliases: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');Паролі бажано зберігати у вигляді SHA512-CRYPT або bcrypt, не
ENCRYPT.
⚙️ Конфігурація Postfix
У main.cf додати:
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-users.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-aliases.cf
virtual_mailbox_base = /var/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000UID/GID — створюєш користувача
vmail:
sudo useradd -r -u 5000 -g mail -d /var/vmail -m -s /sbin/nologin vmailФайл /etc/postfix/mysql-virtual-domains.cf:
user = mailuser
password = mailpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'І подібні — для users та aliases.
⚙️ Конфігурація Dovecot
У dovecot.conf:
!include conf.d/*.conf
!include_try local.confУ 10-mail.conf:
mail_location = maildir:/var/vmail/%d/%n/MaildirУ 10-auth.conf:
disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-sql.conf.extУ auth-sql.conf.ext:
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=mail home=/var/vmail/%d/%n
}І dovecot-sql.conf.ext:
driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailpass
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';✅ Готово! Перевір:
Додай користувача до бази
Створи йому каталог:
mkdir -p /var/vmail/example.com/alice/Maildir
chown -R vmail:mail /var/vmailПерезапусти:
systemctl restart postfix dovecotПідключися через IMAP (
993) Thunderbird чи будь-яким клієнтом
Last updated