bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward
eco Початковий Туторіал

Встановлення та налаштування Post

calendar_month Sep 03, 2026 schedule 25 хв. читання visibility 133 переглядів
Установка и настройка Postfix, Dovecot и Roundcube на VPS для собственного почтового сервера
info

Потрібен сервер для цього гайду? Ми пропонуємо виділені сервери та VPS у 50+ країнах з миттєвим налаштуванням.

Потрібен сервер для цього гайду?

Розгорніть VPS або виділений сервер за хвилини.

Встановлення та налаштування Postfix, Dovecot та Roundcube на VPS для власного поштового сервера

TL;DR

У цьому докладному посібнику ми крок за кроком налаштуємо повноцінний поштовий сервер на базі VPS, використовуючи Postfix для надсилання та отримання пошти, Dovecot для доступу за IMAP/POP3 та Roundcube як зручний веб-інтерфейс. Ви навчитеся встановлювати та конфігурувати всі компоненти, забезпечувати безпеку, налаштовувати DNS-записи для максимальної доставності листів та підтримувати сервер в актуальному стані, повністю контролюючи свою кореспонденцію.

  • Повний контроль над вашою поштою без залежності від сторонніх провайдерів.
  • Налаштування безпечного поштового сервера з використанням TLS/SSL, SPF, DKIM та DMARC.
  • Встановлення та інтеграція Postfix (SMTP), Dovecot (IMAP/POP3) та Roundcube (веб-пошта).
  • Забезпечення доставності листів та захист від спаму.
  • Рекомендації щодо вибору VPS, резервного копіювання та обслуговування системи.

Що ми налаштовуємо і навіщо

Схема: Що ми налаштовуємо і навіщо
Схема: Що ми налаштовуємо і навіщо

У сучасному світі електронна пошта залишається одним із найважливіших засобів комунікації. Хоча існує безліч безкоштовних та платних поштових сервісів, таких як Gmail, Outlook або Яндекс.Пошта, вони мають свої обмеження: відсутність повного контролю над даними, потенційна цензура, залежність від політики провайдера та іноді недостатня гнучкість у налаштуванні. Налаштування власного поштового сервера на VPS дозволяє повністю взяти контроль над вашою кореспонденцією у свої руки.

У цьому посібнику ми налаштуємо повноцінну поштову систему, що складається з трьох ключових компонентів:

  • Postfix: Це агент передачі пошти (MTA), який відповідатиме за надсилання та отримання електронної пошти за протоколом SMTP. Postfix відомий своєю безпекою, надійністю та продуктивністю.
  • Dovecot: Це агент доставки пошти (MDA) та IMAP/POP3 сервер. Dovecot дозволяє поштовим клієнтам (як настільним, так і мобільним) отримувати доступ до ваших поштових скриньок та керувати ними. Він підтримує безпечні з'єднання (SSL/TLS).
  • Roundcube: Це сучасний веб-клієнт для електронної пошти, який надасть вам та вашим користувачам зручний інтерфейс для роботи з поштою прямо з браузера. Він простий у використанні, має багатий функціонал та легко інтегрується з Postfix та Dovecot.

У підсумку ви отримаєте повністю функціональний, безпечний та масштабований поштовий сервер, який зможе обслуговувати домени та користувачів на ваш вибір. Це ідеальне рішення для розробників, яким потрібен власний поштовий сервіс для проєктів, solo-фаундерів SaaS, яким важлива незалежність, або будь-яких інших користувачів, які цінують приватність та повний контроль над своїми даними.

Альтернативи: Cloud-Managed vs. Self-Hosted

Існує два основні підходи до керування поштою:

  • Cloud-Managed (керовані хмарні сервіси): Це такі рішення, як Google Workspace, Microsoft 365, Zoho Mail або Proton Mail.
    • Плюси: Простота налаштування (часто "під ключ"), висока доступність, автоматичні оновлення та бекапи, професійна підтримка.
    • Мінуси: Висока вартість за користувача, відсутність повного контролю над даними, залежність від політики провайдера, обмежені можливості кастомізації.
  • Self-Hosted (власний сервер на VPS): Налаштування поштового сервера самостійно на орендованому VPS або виділеному сервері.
    • Плюси: Повний контроль над даними та конфігурацією, високий ступінь приватності, економія на масштабі (особливо для великої кількості користувачів), можливість інтеграції з іншими вашими сервісами.
    • Мінуси: Вимагає технічних знань та часу на налаштування/обслуговування, відповідальність за безпеку та бекапи лежить на вас, потенційні проблеми з доставністю листів, якщо не налаштувати все правильно.

Вибір self-hosted на VPS виправданий, якщо ви цінуєте повний контроль, готові інвестувати час у налаштування та обслуговування, а також хочете отримати максимально гнучке та приватне рішення для своїх потреб.

Який VPS-конфіг потрібен під це завдання

Схема: Який VPS-конфіг потрібен під це завдання
Схема: Який VPS-конфіг потрібен під це завдання

Вимоги до VPS для поштового сервера можуть варіюватися залежно від очікуваного навантаження (кількість користувачів, обсяг трафіку). Однак для більшості особистих та невеликих командних проєктів можна орієнтуватися на наступні мінімальні характеристики:

Мінімальні вимоги

  • CPU: 1 ядро. Сучасні процесори досить потужні для обробки поштового трафіку.
  • RAM: 2 ГБ. Postfix, Dovecot, Nginx, PHP-FPM та база даних (MariaDB) можуть споживати значний обсяг пам'яті. 2 ГБ дозволять комфортно працювати.
  • Диск: 50-80 ГБ SSD. SSD значно прискорить операції введення-виведення, що критично для роботи з поштовими сховищами та базами даних. Обсяг диска залежить від кількості та розміру поштових скриньок, а також від тривалості зберігання архівів.
  • Мережа: 100 Мбіт/с або 1 Гбіт/с. Швидкість каналу важлива для швидкої доставки та отримання листів, але для звичайного використання 100 Мбіт/с цілком достатньо.
  • Операційна система: Debian 12 (Bookworm) або Ubuntu 24.04 LTS (Noble Numbat). Ці дистрибутиви добре підтримуються, мають актуальні пакети та велику документацію.
  • Виділена IP-адреса: Обов'язково. Поштові сервери не можуть працювати із спільними IP-адресами через проблеми з репутацією.

Рекомендований VPS-план для старту

Для комфортної роботи поштового сервера з підтримкою кількох доменів та до 50 активних користувачів рекомендується наступна конфігурація:

  • CPU: 2 ядра
  • RAM: 4 ГБ
  • Диск: 100-200 ГБ SSD
  • Мережа: 1 Гбіт/с

Такої конфігурації буде достатньо для обробки листів, роботи веб-інтерфейсу Roundcube та підтримання високої продуктивності. Можна взяти VPS із зазначеними характеристиками, який забезпечить необхідну продуктивність та надійність для вашого поштового сервера.

Коли потрібен dedicated, а не VPS

Виділений сервер (dedicated server) може знадобитися, якщо:

  • У вас дуже велика кількість користувачів (сотні або тисячі).
  • Ви плануєте зберігати величезні обсяги пошти (терабайти).
  • Вам потрібна максимальна продуктивність та ізоляція ресурсів, ніж пропонує VPS.
  • Потрібні специфічні апаратні конфігурації, недоступні на VPS.

Для більшості завдань поштового сервера VPS є оптимальним вибором за співвідношенням ціна/продуктивність.

Локація: на що впливає

Вибір локації VPS має кілька важливих аспектів:

  • Затримка (latency): Чим ближче сервер до вашої основної аудиторії (користувачів пошти), тим менша затримка при доступі до веб-інтерфейсу Roundcube або синхронізації поштових клієнтів.
  • Юрисдикція та законодавство: Залежно від країни розташування сервера, на нього поширюються місцеві закони про зберігання даних та приватність. Це може бути критично для деяких проєктів.
  • Вартість: У різних країнах ціни на VPS можуть відрізнятися.

Для поштового сервера зазвичай рекомендується вибирати локацію, яка географічно ближче до більшості ваших користувачів, щоб забезпечити мінімальні затримки.

Підготовка сервера

Схема: Підготовка сервера
Схема: Підготовка сервера

Перед встановленням поштового ПЗ необхідно виконати базове налаштування та посилення безпеки нового VPS. Ми будемо використовувати дистрибутив Debian 12 (Bookworm) як приклад. Для Ubuntu кроки будуть аналогічні.

1. Оновлення системи

Насамперед оновіть список пакетів та встановлені пакети до останніх версій.


sudo apt update          # Оновлення списку пакетів
sudo apt upgrade -y      # Оновлення встановлених пакетів
sudo apt autoremove -y   # Видалення непотрібних пакетів

2. Створення нового користувача з правами sudo

Працювати під root-користувачем небезпечно. Створіть нового користувача та надайте йому права sudo.


sudo adduser username          # Замініть 'username' на бажане ім'я користувача
sudo usermod -aG sudo username # Додавання користувача до групи sudo

Вийдіть з поточної сесії root та увійдіть під новим користувачем.


exit

3. Налаштування SSH-ключів (рекомендується)

Для підвищення безпеки SSH-доступу рекомендується використовувати SSH-ключі замість паролів. Спочатку згенеруйте ключ на вашій локальній машині, якщо у вас його ще немає:


ssh-keygen -t rsa -b 4096

Потім скопіюйте публічний ключ на сервер:


ssh-copy-id username@your_vps_ip # Замініть 'username' та 'your_vps_ip'

Після перевірки входу за ключем вимкніть вхід за паролем для root та звичайних користувачів у файлі /etc/ssh/sshd_config:


sudo nano /etc/ssh/sshd_config

Знайдіть та змініть наступні рядки:


PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

Перезапустіть SSH-сервер:


sudo systemctl restart sshd

4. Встановлення та налаштування Fail2Ban

Fail2Ban сканує логи та блокує IP-адреси, які показують ознаки шкідливої активності (наприклад, багаторазові невдалі спроби входу). Це критично важливо для захисту SSH та поштових сервісів.


sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Створіть локальний конфігураційний файл для Fail2Ban, щоб ваші зміни не були перезаписані під час оновлення пакета:


sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Відредагуйте /etc/fail2ban/jail.local, щоб увімкнути захист для SSH та інших сервісів, а також налаштувати параметри блокування (bantime, findtime, maxretry). Переконайтеся, що enabled = true для [sshd] та інших поштових сервісів, які ми налаштуємо пізніше ([postfix], [dovecot]).


sudo nano /etc/fail2ban/jail.local

Приклад секції для SSH (переконайтеся, що enabled = true):


[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Перезапустіть Fail2Ban після змін:


sudo systemctl restart fail2ban

5. Налаштування Firewall (UFW)

Uncomplicated Firewall (UFW) — це простий у використанні інтерфейс для iptables. Налаштуємо його для дозволу лише необхідних портів.


sudo apt install ufw -y

Дозвольте SSH (порт 22), HTTP (порт 80), HTTPS (порт 443) та стандартні поштові порти:


sudo ufw allow OpenSSH
sudo ufw allow http
sudo ufw allow https
sudo ufw allow 25/tcp  # SMTP
sudo ufw allow 587/tcp # SMTPS (Submission)
sudo ufw allow 465/tcp # SMTPS (Legacy)
sudo ufw allow 143/tcp # IMAP
sudo ufw allow 993/tcp # IMAPS
sudo ufw allow 110/tcp # POP3
sudo ufw allow 995/tcp # POP3S

Увімкніть UFW:


sudo ufw enable

Перевірте статус UFW:


sudo ufw status verbose

Тепер ваш сервер базово захищений і готовий до встановлення поштового ПЗ.

Встановлення ПЗ — покроково

Схема: Встановлення ПЗ — покроково
Схема: Встановлення ПЗ — покроково

У цьому розділі ми встановимо всі необхідні компоненти: Postfix, Dovecot, Nginx, PHP-FPM, MariaDB та Roundcube. Ми будемо використовувати актуальні версії ПЗ, доступні в репозиторіях Debian 12 (на 2026 рік це будуть стабільні гілки, наприклад, Postfix 3.x, Dovecot 2.x, Nginx 1.x, PHP 8.x, MariaDB 10.x).

1. Встановлення Postfix

Postfix — це наш Mail Transfer Agent (MTA). Він відповідатиме за надсилання та отримання електронної пошти.


sudo apt install postfix -y # Встановлення Postfix

Під час встановлення Postfix поставить кілька запитань. Виберіть "Internet Site" та вкажіть повне доменне ім'я вашого сервера (наприклад, mail.приклад.com), яке буде використовуватися як ім'я хоста для надсилання пошти. Замініть пример.com на ваш реальний домен.

Для System mail name вкажіть ваш основний домен (наприклад, приклад.com).

2. Встановлення Dovecot

Dovecot — це наш Mail Delivery Agent (MDA) та IMAP/POP3 сервер, який дозволить користувачам отримувати доступ до своїх поштових скриньок.


sudo apt install dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql -y # Встановлення Dovecot з підтримкою IMAP, POP3, LMTP та MySQL для автентифікації

dovecot-lmtpd потрібен для більш ефективної доставки пошти від Postfix до Dovecot, а dovecot-mysql — для автентифікації користувачів через базу даних, що значно спрощує керування.

3. Встановлення Nginx, PHP-FPM та MariaDB

Для роботи Roundcube нам знадобиться веб-сервер (Nginx), інтерпретатор PHP (PHP-FPM) та база даних (MariaDB).


sudo apt install nginx -y # Встановлення веб-сервера Nginx
sudo apt install php-fpm php-mysql php-mbstring php-intl php-zip php-gd php-json php-curl php-imap php-xml php-pear -y # Встановлення PHP-FPM та необхідних розширень для Roundcube
sudo apt install mariadb-server -y # Встановлення MariaDB сервера

Після встановлення PHP-FPM, Nginx та MariaDB, переконайтеся, що всі сервіси запущені та увімкнені для автозапуску:


sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl enable php8.2-fpm # Або актуальна версія, наприклад php8.3-fpm
sudo systemctl start php8.2-fpm
sudo systemctl enable mariadb
sudo systemctl start mariadb

Запустіть скрипт для базового захисту MariaDB:


sudo mysql_secure_installation # Дотримуйтесь інструкцій: встановіть пароль root, видаліть анонімних користувачів, забороніть віддалений вхід root, видаліть тестову базу даних.

4. Встановлення Roundcube

Roundcube — це веб-інтерфейс для вашої пошти. Ми встановимо його з офіційних репозиторіїв.


sudo apt install roundcube roundcube-core roundcube-plugins roundcube-sqlite3 -y # Встановлення Roundcube та його компонентів. Ми будемо використовувати MySQL, але 'roundcube-sqlite3' може бути встановлений як залежність.

Під час встановлення Roundcube поставить запитання про конфігурацію бази даних. Виберіть dbconfig-common та mysql, потім введіть пароль для користувача Roundcube у MariaDB. Якщо ви не хочете, щоб Roundcube створював базу даних автоматично, виберіть "No" та створіть її вручну (цей варіант ми розглянемо в розділі конфігурації).

Якщо ви вибрали автоматичне налаштування, Roundcube створить базу даних roundcubemail та користувача roundcube із зазначеним вами паролем.

5. Створення бази даних та користувача для Roundcube (якщо не було автоматичного налаштування)

Якщо ви віддали перевагу ручному налаштуванню бази даних для Roundcube, виконайте наступні кроки. В іншому випадку цей крок можна пропустити.


sudo mysql -u root -p # Введіть пароль root, який ви встановили раніше

Всередині MariaDB створіть базу даних та користувача для Roundcube:


CREATE DATABASE roundcubemail CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'ваш_пароль_для_roundcube';
GRANT ALL PRIVILEGES ON roundcubemail. TO 'roundcube'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Тепер імпортуйте схему бази даних Roundcube:


sudo mysql -u roundcube -p roundcubemail < /usr/share/roundcube/SQL/mysql.initial.sql # Введіть 'ваш_пароль_для_roundcube'

Усі основні компоненти встановлено. Тепер перейдемо до їх детальної конфігурації.

Конфігурація

Схема: Конфігурація
Схема: Конфігурація

Цей розділ є найважливішим, оскільки тут ми зв'яжемо всі компоненти разом і налаштуємо їх для безпечної та ефективної роботи. Ми будемо використовувати домен пример.com та піддомен mail.пример.com для нашого поштового сервера.

1. Налаштування DNS-записів

Правильні DNS-записи критично важливі для доставлення пошти. Вам потрібно буде додати або змінити наступні записи в панелі керування вашого доменного реєстратора або DNS-провайдера. Замініть ваш_IP_VPS на реальну IP-адресу вашого сервера.

  • A-запис для домену: Вказує на ваш VPS.
  • A-запис для піддомену mail: Вказує на ваш VPS.
  • MX-запис: Вказує, який сервер відповідає за прийом пошти для вашого домену.
  • SPF-запис: Допомагає запобігти підробці відправника, вказуючи, яким серверам дозволено надсилати пошту від імені вашого домену.
  • DKIM-запис: Додає цифровий підпис до вихідних листів, підтверджуючи їхню справжність.
  • DMARC-запис: Вказує, як обробляти листи, що не пройшли перевірки SPF та DKIM.
Тип записуХост/Ім'яЗначення/ДаніПріоритет
A@ або пример.comваш_IP_VPS-
Amail або mail.пример.comваш_IP_VPS-
MX@ або пример.commail.пример.com10
TXT (SPF)@ або пример.comv=spf1 mx a ip4:ваш_IP_VPS ~all-
TXT (DKIM)dkim._domainkey

Буде згенеровано Postfix'ом (див. нижче)

-
TXT (DMARC)_dmarcv=DMARC1; p=quarantine; rua=mailto:admin@пример.com; ruf=mailto:admin@пример.com; fo=1-

Зачекайте деякий час (до 24 годин) для розповсюдження DNS-записів.

2. Налаштування Postfix

Основні конфігураційні файли Postfix: /etc/postfix/main.cf та /etc/postfix/master.cf.


sudo nano /etc/postfix/main.cf

Переконайтеся, що наступні параметри налаштовані (додайте або змініть):


# Основні параметри
myhostname = mail.пример.com
mydomain = пример.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = all

# Домени, які обслуговує Postfix
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost
virtual_alias_domains = $mydomain
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-aliases.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailboxes.cf
virtual_transport = lmtp:unix:private/dovecot-lmpa

# Налаштування TLS/SSL
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.пример.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.пример.com/privkey.pem
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_use_tls = yes
smtpd_tls_received_header = yes
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1

# Обмеження та захист від спаму
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    reject_invalid_hostname,
    reject_non_fqdn_hostname,
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_unknown_sender_domain,
    reject_unknown_recipient_domain,
    reject_rbl_client zen.spamhaus.org,
    reject_rbl_client bl.spamcop.net,
    permit

# Аутентифікація SASL для вихідної пошти
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes

# DKIM (буде налаштовано далі)
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = inet:127.0.0.1:8891

Створіть файли конфігурації для MySQL-запитів Postfix:


sudo nano /etc/postfix/mysql-virtual-domains.cf

user = roundcube
password = ваш_пароль_для_roundcube
hosts = 127.0.0.1
dbname = roundcubemail
query = SELECT 1 FROM virtual_domains WHERE name='%s'

sudo nano /etc/postfix/mysql-virtual-mailboxes.cf

user = roundcube
password = ваш_пароль_для_roundcube
hosts = 127.0.0.1
dbname = roundcubemail
query = SELECT maildir FROM virtual_users WHERE email='%s'

sudo nano /etc/postfix/mysql-virtual-aliases.cf

user = roundcube
password = ваш_пароль_для_roundcube
hosts = 127.0.0.1
dbname = roundcubemail
query = SELECT destination FROM virtual_aliases WHERE source='%s'

Змініть права доступу до цих файлів:


sudo chmod 640 /etc/postfix/mysql-virtual-.cf
sudo chown root:postfix /etc/postfix/mysql-virtual-.cf

Перезапустіть Postfix:


sudo systemctl restart postfix

3. Налаштування Dovecot

Dovecot також використовує кілька конфігураційних файлів. Основні знаходяться в /etc/dovecot/conf.d/.


sudo nano /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir
mail_privileged_group = mail

sudo nano /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = yes # Вимикаємо небезпечну автентифікацію
auth_mechanisms = plain login
!include auth-sql.conf.ext

sudo nano /etc/dovecot/conf.d/10-master.conf

Додайте або змініть секцію service auth та service lmtp:


service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmpa {
    mode = 0660
    user = postfix
    group = postfix
  }
}

sudo nano /etc/dovecot/conf.d/15-lda.conf

postmaster_address = postmaster@пример.com

sudo nano /etc/dovecot/conf.d/auth-sql.conf.ext

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

Створіть файл /etc/dovecot/dovecot-sql.conf.ext:


sudo nano /etc/dovecot/dovecot-sql.conf.ext

driver = mysql
connect = host=127.0.0.1 dbname=roundcubemail user=roundcube password=ваш_пароль_для_roundcube
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u'
user_query = SELECT maildir, 1000 AS uid, 1000 AS gid FROM virtual_users WHERE email='%u'

Змініть права доступу до файлу:


sudo chmod 640 /etc/dovecot/dovecot-sql.conf.ext
sudo chown root:dovecot /etc/dovecot/dovecot-sql.conf.ext

sudo nano /etc/dovecot/conf.d/10-ssl.conf

Переконайтеся, що шляхи до сертифікатів вказані правильно (ми отримаємо їх за допомогою Certbot):


ssl = yes
ssl_cert = </etc/letsencrypt/live/mail.пример.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.пример.com/privkey.pem

Перезапустіть Dovecot:


sudo systemctl restart dovecot

4. Налаштування бази даних для користувачів та доменів

Ми будемо зберігати інформацію про віртуальні домени, користувачів та аліаси в базі даних roundcubemail. Увійдіть до MariaDB:


sudo mysql -u root -p

Створіть необхідні таблиці:


USE roundcubemail;

CREATE TABLE virtual_domains (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(50) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE virtual_users (
  id int(11) NOT NULL AUTO_INCREMENT,
  domain_id int(11) NOT NULL,
  password varchar(255) NOT NULL,
  email varchar(100) NOT NULL,
  maildir varchar(255) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY email (email),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE virtual_aliases (
  id int(11) NOT NULL AUTO_INCREMENT,
  domain_id int(11) 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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Додайте ваш домен (пример.com) та першого користувача (наприклад, admin@пример.com):


INSERT INTO virtual_domains (name) VALUES ('пример.com');

-- Замініть 'ваш_пароль_для_admin' на надійний пароль
-- та згенеруйте його за допомогою doveadm pw -s SHA512-CRYPT
INSERT INTO virtual_users (domain_id, password, email, maildir)
VALUES (1, '{SHA512-CRYPT}зашифрованный_пароль_для_admin', 'admin@пример.com', 'пример.com/admin/');

-- Приклад аліасу: листи на info@пример.com будуть перенаправлені на admin@пример.com
INSERT INTO virtual_aliases (domain_id, source, destination)
VALUES (1, 'info@пример.com', 'admin@пример.com');

FLUSH PRIVILEGES;
EXIT;

Щоб отримати зашифрований пароль для користувача, використовуйте команду Dovecot:


sudo doveadm pw -s SHA512-CRYPT # Введіть пароль, потім скопіюйте вивід

5. Налаштування TLS/HTTPS за допомогою Certbot (Let's Encrypt)

Для безпечних з'єднань (SMTPS, IMAPS, HTTPS для Roundcube) нам потрібні SSL/TLS сертифікати. Let's Encrypt надає безкоштовні сертифікати.


sudo apt install certbot python3-certbot-nginx -y # Встановлення Certbot та плагіна для Nginx

Отримайте сертифікат для вашого домену (наприклад, mail.пример.com):


sudo certbot --nginx -d mail.пример.com # Дотримуйтесь інструкцій Certbot. Виберіть перенаправлення HTTP на HTTPS.

Certbot автоматично налаштує Nginx та продовження сертифікатів.

6. Налаштування Nginx для Roundcube

Створіть конфігураційний файл Nginx для Roundcube. Видаліть файл за замовчуванням або вимкніть його.


sudo rm /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-available/roundcube.conf

server {
    listen 80;
    server_name mail.пример.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name mail.пример.com;

    ssl_certificate /etc/letsencrypt/live/mail.пример.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mail.пример.com/privkey.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256";
    ssl_prefer_server_ciphers on;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    root /usr/share/roundcube;
    index index.php index.html;

    location ~ ^/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ {
        deny all;
    }

    location ~ ^/(bin|SQL|config|temp|logs)/ {
        deny all;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # Переконайтеся, що це правильний шлях для вашої версії PHP
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Створіть символічне посилання на файл конфігурації та перевірте синтаксис Nginx:


sudo ln -s /etc/nginx/sites-available/roundcube.conf /etc/nginx/sites-enabled/
sudo nginx -t

Якщо помилок немає, перезапустіть Nginx:


sudo systemctl restart nginx

7. Налаштування Roundcube

Основний конфігураційний файл Roundcube — /etc/roundcube/config.inc.php.


sudo nano /etc/roundcube/config.inc.php

Переконайтеся, що наступні параметри налаштовані:


$config['default_host'] = 'ssl://mail.пример.com';
$config['default_port'] = 993; // IMAPS
$config['smtp_server'] = 'tls://mail.пример.com';
$config['smtp_port'] = 587; // SMTPS submission port
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';
$config['product_name'] = 'Моя Пошта на Пример.com'; // Назва, яка буде відображатися в Roundcube
$config['plugins'] = array('archive', 'zipdownload', 'managesieve', 'password'); // Приклад плагінів
$config['temp_dir'] = '/var/lib/roundcube/temp';
$config['log_dir'] = '/var/log/roundcube';
$config['db_dsnw'] = 'mysql://roundcube:ваш_пароль_для_roundcube@localhost/roundcubemail';

Створіть необхідні директорії для Roundcube та встановіть правильні права:


sudo mkdir -p /var/lib/roundcube/temp /var/log/roundcube
sudo chown -R www-data:www-data /var/lib/roundcube/temp /var/log/roundcube
sudo chmod 755 /var/lib/roundcube/temp /var/log/roundcube

Перезапустіть PHP-FPM:


sudo systemctl restart php8.2-fpm # Або актуальна версія

8. Встановлення та налаштування OpenDKIM

OpenDKIM буде підписувати ваші вихідні листи, що значно покращить їхнє доставлення.


sudo apt install opendkim opendkim-tools -y # Встановлення OpenDKIM

Створіть директорію для ключів DKIM:


sudo mkdir -p /etc/mail/dkim
sudo chown -R opendkim:opendkim /etc/mail/dkim

Згенеруйте ключі DKIM для вашого домену (наприклад, пример.com) та селектора (наприклад, dkim):


sudo opendkim-genkey -b 2048 -d пример.com -s dkim -v -C /etc/mail/dkim
sudo chown opendkim:opendkim /etc/mail/dkim/dkim.private

Відредагуйте основний конфігураційний файл OpenDKIM:


sudo nano /etc/opendkim.conf

Переконайтеся, що наступні рядки налаштовані:


Canonicalization    relaxed/simple
Mode                sv
SubDomains          no
AutoRestart         Yes
AutoRestartRate     10/1h
Background          Yes
UMask               002
OversignHeaders     From
SignatureAlgorithm  rsa-sha256

# Локальний сокет для Postfix
Socket              inet:8891@localhost

# Користувач та група
UserID              opendkim:opendkim

# Файли
PidFile             /var/run/opendkim/opendkim.pid
KeyFile             /etc/mail/dkim/dkim.private
LogWhy              Yes

# Таблиці
KeyTable            /etc/mail/dkim/key.table
SigningTable        /etc/mail/dkim/signing.table
ExternalIgnoreList  /etc/mail/dkim/trusted.hosts
InternalHosts       /etc/mail/dkim/trusted.hosts

Створіть файли key.table, signing.table та trusted.hosts:


sudo nano /etc/mail/dkim/key.table

dkim._domainkey.пример.com пример.com:dkim:/etc/mail/dkim/dkim.private

sudo nano /etc/mail/dkim/signing.table

@пример.com dkim._domainkey.пример.com

sudo nano /etc/mail/dkim/trusted.hosts

127.0.0.1
localhost
пример.com
mail.пример.com

Змініть права доступу:


sudo chown opendkim:opendkim /etc/mail/dkim/
sudo chmod 640 /etc/mail/dkim/

Відредагуйте файл /etc/default/opendkim, щоб вказати сокет:


sudo nano /etc/default/opendkim

Розкоментуйте або додайте:


SOCKET="inet:8891@localhost"

Перезапустіть OpenDKIM та Postfix:


sudo systemctl restart opendkim
sudo systemctl restart postfix

Тепер вам потрібно додати публічний ключ DKIM до DNS. Виведіть вміст файлу:


sudo cat /etc/mail/dkim/dkim.txt

Ви побачите щось на кшталт:


dkim._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
       "p=MIIBIjANBg..." )  ; ----- DKIM key dkim for пример.com

Скопіюйте значення p=... (без лапок) та додайте його як TXT-запис для хоста dkim._domainkey у вашому DNS.

Перевірка працездатності

Після всіх налаштувань необхідно перевірити, що все працює коректно.

  • Перевірка DNS: Використовуйте онлайн-інструменти (наприклад, mxtoolbox.com) для перевірки MX, SPF, DKIM та DMARC записів вашого домену.
  • Доступ до Roundcube: Відкрийте в браузері https://mail.пример.com. Ви повинні побачити сторінку входу Roundcube. Спробуйте увійти зі створеним користувачем admin@пример.com.
  • Надсилання та отримання пошти:
    1. Надішліть лист з admin@пример.com на зовнішню адресу (наприклад, Gmail). Перевірте, що лист дійшов і не потрапив у спам. Перевірте заголовки листа на наявність SPF, DKIM, DMARC.
    2. Надішліть лист із зовнішньої адреси на admin@пример.com. Переконайтеся, що він з'явився в Roundcube.
  • Перевірка логів:
    
    tail -f /var/log/mail.log # Логи Postfix та Dovecot
    tail -f /var/log/nginx/access.log # Логи доступу Nginx
    tail -f /var/log/nginx/error.log # Логи помилок Nginx
    tail -f /var/log/roundcube/errors.log # Логи помилок Roundcube
                

Резервне копіювання та обслуговування

Схема: Резервне копіювання та обслуговування
Схема: Резервне копіювання та обслуговування

Надійна система резервного копіювання та регулярне обслуговування є критично важливими для будь-якого сервера, особливо для поштового, де зберігаються цінні дані.

Що резервувати

  • База даних MariaDB: Містить інформацію про домени, користувачів та їхні паролі.
  • Поштові скриньки: Каталоги Maildir користувачів (зазвичай /var/vmail/пример.com/user/Maildir).
  • Конфігураційні файли: Postfix (/etc/postfix/), Dovecot (/etc/dovecot/), Nginx (/etc/nginx/sites-available/roundcube.conf), Roundcube (/etc/roundcube/), OpenDKIM (/etc/mail/dkim/), Certbot (/etc/letsencrypt/).

Простий скрипт авторезервного копіювання

Ми створимо простий скрипт, який архівуватиме Maildir та конфігурації, а також робитиме дамп бази даних. Для зберігання можна використовувати зовнішній S3-сумісний сервіс або інший VPS.


sudo nano /usr/local/bin/backup_mail_server.sh

#!/bin/bash

# Параметри
BACKUP_DIR="/var/backups/mail_server"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
DB_NAME="roundcubemail"
DB_USER="roundcube"
DB_PASS="ваш_пароль_для_roundcube" # Використовуйте пароль з конфігурації Dovecot/Postfix

# Створення директорії для резервних копій, якщо не існує
mkdir -p "$BACKUP_DIR"

# 1. Резервне копіювання бази даних
echo "Dumping MariaDB database..."
mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/$DB_NAME-$DATE.sql"
if [ $? -eq 0 ]; then
    echo "Database backup successful."
else
    echo "Database backup failed!"
    exit 1
fi

# 2. Резервне копіювання поштових скриньок (Maildir)
echo "Archiving Maildir directories..."
tar -czf "$BACKUP_DIR/maildirs-$DATE.tar.gz" /var/vmail # Переконайтеся, що це правильний шлях до Maildir
if [ $? -eq 0 ]; then
    echo "Maildir backup successful."
else
    echo "Maildir backup failed!"
    exit 1
fi

# 3. Резервне копіювання конфігураційних файлів
echo "Archiving configuration files..."
tar -czf "$BACKUP_DIR/configs-$DATE.tar.gz" \
    /etc/postfix \
    /etc/dovecot \
    /etc/nginx/sites-available/roundcube.conf \
    /etc/roundcube \
    /etc/mail/dkim \
    /etc/letsencrypt
if [ $? -eq 0 ]; then
    echo "Configuration files backup successful."
else
    echo "Configuration files backup failed!"
    exit 1
fi

# 4. Видалення старих резервних копій (наприклад, старше 7 днів)
echo "Cleaning up old backups..."
find "$BACKUP_DIR" -type f -name "." -mtime +7 -delete
echo "Backup process complete."

Зробіть скрипт виконуваним:


sudo chmod +x /usr/local/bin/backup_mail_server.sh

Налаштуйте щоденний запуск за допомогою cron:


sudo crontab -e

Додайте рядок в кінець файлу для щоденного запуску, наприклад, о 3:00 ночі:


0 3   * /usr/local/bin/backup_mail_server.sh > /var/log/mail_backup.log 2>&1

Куди зберігати резервні копії

Вкрай важливо зберігати резервні копії поза основним сервером. Варіанти:

  • S3-сумісне об'єктне сховище: Amazon S3, DigitalOcean Spaces, Backblaze B2, MinIO. Це надійні та масштабовані рішення.
  • Окремий VPS: Якщо у вас є інший VPS, можна налаштувати Rsync або SFTP для перенесення резервних копій туди.
  • Локальне сховище на вашому комп'ютері: Для дуже невеликих обсягів та особистого використання, але менш надійно.

Для автоматичного надсилання резервних копій на S3 можна використовувати такі утиліти, як s3cmd або rclone, додавши їх у скрипт.

Оновлення: rolling vs maintenance window

Підтримка ПЗ в актуальному стані — ключ до безпеки та стабільності.

  • Rolling updates (безперервні оновлення): Регулярне застосування патчів безпеки та мінорних оновлень. Для Debian/Ubuntu це sudo apt update && sudo apt upgrade -y. Рекомендується виконувати щотижня.
  • Maintenance window (вікно обслуговування): Для мажорних оновлень (наприклад, перехід з PHP 8.2 на 8.3 або з Debian 12 на 13) плануйте окреме вікно обслуговування. Це може вимагати зупинки сервісів, перевірки сумісності та ручного налаштування. Завжди робіть повне резервне копіювання перед такими оновленнями.

Моніторинг логів (/var/log/mail.log, /var/log/syslog) та використання ресурсів (htop, df -h) також є важливою частиною обслуговування.

Troubleshooting + FAQ

Налаштування поштового сервера — складне завдання, і проблеми можуть виникнути на будь-якому етапі. Ось відповіді на часто задавані питання та типові сценарії усунення несправностей.

Не можу відправити листи, вони зависають у черзі Postfix. Що робити?

Перевірте чергу Postfix командою sudo mailq. Якщо листи там, перевірте логи Postfix (tail -f /var/log/mail.log). Типові причини:

  • Проблеми з DNS: Неправильний MX-запис, відсутність SPF/DKIM/DMARC або їх некоректне налаштування. Перевірте записи через mxtoolbox.com.
  • Зворотний DNS-запис (PTR): Переконайтеся, що для вашої IP-адреси налаштовано PTR-запис, що відповідає mail.пример.com. Багато поштових серверів відхиляють листи без коректної PTR. Налаштовується у вашого VPS-провайдера.
  • IP-адреса в чорних списках (RBL): Перевірте IP вашого VPS на RBL-списках (наприклад, через mxtoolbox.com). Якщо IP у чорному списку, потрібно подати заявку на видалення.
  • Проблеми з TLS/SSL: Неправильні шляхи до сертифікатів або застарілі протоколи.
  • Налаштування фаєрволу: Переконайтеся, що вихідний трафік на порт 25 (SMTP) дозволено.

Не можу отримати листи, вони не доходять до мого сервера.

Це майже завжди пов'язано з DNS або фаєрволом:

  • MX-запис: Переконайтеся, що ваш MX-запис для домену пример.com вказує на mail.пример.com і має правильний пріоритет.
  • A-запис для mail.пример.com: Повинен вказувати на IP вашого VPS.
  • Фаєрвол (UFW): Переконайтеся, що вхідні з'єднання на порт 25 (SMTP) дозволені (sudo ufw status verbose).
  • Логи Postfix: Перевірте /var/log/mail.log на предмет помилок прийому пошти.

Не можу увійти в Roundcube або поштові клієнти не підключаються.

Проблеми з автентифікацією або підключенням до Dovecot:

  • Невірні облікові дані: Переконайтеся, що ви використовуєте правильний email (user@пример.com) та пароль. Перевірте пароль у базі даних.
  • Налаштування Dovecot: Перевірте файли /etc/dovecot/conf.d/10-auth.conf, auth-sql.conf.ext та dovecot-sql.conf.ext. Переконайтеся, що параметри підключення до бази даних вірні, а пароль у dovecot-sql.conf.ext відповідає паролю користувача Roundcube у MariaDB.
  • TLS/SSL для Dovecot: Переконайтеся, що шляхи до сертифікатів у /etc/dovecot/conf.d/10-ssl.conf вірні.
  • Фаєрвол (UFW): Переконайтеся, що порти 143 (IMAP), 993 (IMAPS), 110 (POP3), 995 (POP3S) дозволені.
  • Логи Dovecot: Перевірте /var/log/mail.log на предмет помилок автентифікації або проблем з підключенням.
  • Логи Roundcube: Перевірте /var/log/roundcube/errors.log на помилки.

Яка мінімальна конфігурація VPS підійде?

Для особистого використання або невеликої команди (до 10-15 користувачів з помірною активністю) мінімально підійде VPS з 1 ядром CPU, 2 ГБ RAM та 50-80 ГБ SSD. Це дозволить запустити всі необхідні сервіси (Postfix, Dovecot, Nginx, PHP-FPM, MariaDB) та мати достатній запас для стабільної роботи. Однак для вищої продуктивності та масштабованості рекомендується 2 ядра CPU та 4 ГБ RAM.

Що обрати — VPS чи dedicated для цього завдання?

Для більшості сценаріїв, описаних у цьому посібнику (особистий поштовий сервер, пошта для невеликого стартапу або команди, пошта для кількох власних проектів), VPS є оптимальним вибором. Він пропонує достатню продуктивність, гнучкість та економічність. Виділений сервер (dedicated) стає необхідним лише при дуже високих навантаженнях, наприклад, якщо ви плануєте обслуговувати сотні або тисячі активних поштових скриньок, обробляти величезні обсяги трафіку або зберігати терабайти поштових даних. У таких випадках dedicated сервер надає вищу продуктивність та ізоляцію ресурсів.

Листи потрапляють у спам. Як це виправити?

Основна причина потрапляння в спам — погана репутація відправника. Переконайтеся, що ви налаштували всі необхідні записи:

  • SPF: Правильно вказує дозволені IP-адреси відправників.
  • DKIM: Підписує вихідні листи.
  • DMARC: Політика обробки листів, що не пройшли SPF/DKIM.
  • PTR (Reverse DNS): Ваша IP-адреса повинна резолвитися в mail.пример.com.
  • Відсутність у RBL: Перевірте, що ваш IP не знаходиться в чорних списках.
  • Вміст листа: Уникайте спам-слів, надмірного використання великих літер, підозрілих посилань.

Як додати нового користувача або домен?

Для додавання нового домену, вставте запис у таблицю virtual_domains:


sudo mysql -u root -p
USE roundcubemail;
INSERT INTO virtual_domains (name) VALUES ('новый_домен.com');
FLUSH PRIVILEGES;
EXIT;

Для додавання нового користувача, спочатку отримайте зашифрований пароль за допомогою sudo doveadm pw -s SHA512-CRYPT, потім вставте запис у таблицю virtual_users, використовуючи domain_id відповідного домену:


sudo mysql -u root -p
USE roundcubemail;
-- Припустимо, 'новий_домен.com' має id=2
INSERT INTO virtual_users (domain_id, password, email, maildir)
VALUES (2, '{SHA512-CRYPT}зашифрованный_пароль', 'user@новый_домен.com', 'новый_домен.com/user/');
FLUSH PRIVILEGES;
EXIT;

Не забудьте перезапустити Postfix та Dovecot після значних змін у базі даних або конфігураційних файлах.

Висновки та наступні кроки

Схема: Висновки та наступні кроки
Схема: Висновки та наступні кроки

Ви успішно налаштували та запустили власний поштовий сервер на VPS, використовуючи Postfix, Dovecot та Roundcube. Тепер у вас є повний контроль над вашою поштою, високий ступінь приватності та можливість гнучкого налаштування під будь-які потреби. Це серйозний крок до цифрової незалежності та ефективного управління комунікаціями.

Для подальшого розвитку та оптимізації вашого поштового сервера розгляньте наступні кроки:

  • Масштабування та оптимізація: Якщо кількість користувачів та обсяг пошти зростає, можливо, знадобиться оптимізувати конфігурацію бази даних, збільшити ресурси VPS або розглянути перехід на виділений сервер. Вивчіть можливості кешування для Roundcube та налаштування продуктивності Postfix/Dovecot.
  • Покращений захист від спаму та вірусів: Інтегруйте додаткові інструменти, такі як SpamAssassin для фільтрації спаму та ClamAV для сканування на віруси. Це значно підвищить безпеку та якість вхідної пошти.
  • Веб-адміністрування: Для зручного управління користувачами, доменами та аліасами розгляньте встановлення веб-панелей, таких як Postfix Admin. Це спростить адміністрування сервера без необхідності прямої взаємодії з базою даних.
  • Моніторинг: Налаштуйте систему моніторингу (наприклад, Prometheus + Grafana або Zabbix) для відстеження стану сервера, використання ресурсів та продуктивності поштових сервісів. Це допоможе своєчасно виявляти та усувати потенційні проблеми.

Чи був цей гайд корисним?

Ваш відгук допомагає нам покращувати гайди.

Share this post:

Надішліть гайд тому, кому він може стати в пригоді.

Telegram VKVK WhatsApp Facebook LinkedIn XX

встановлення та налаштування Postfix, Dovecot і Roundcube на VPS для власного поштового сервера
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.