Налагодження пошти на 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.com
2. Повноцінний поштовий сервер (вхідна та вихідна пошта):
Це складніший сценарій. Потрібні наступні компоненти:
Основні пакети:
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=yes
2. 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 lmtp
3. Сертифікат 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/new
IMAP/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:5000
UID/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