Встановлення та налаштування 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 для поштового сервера можуть варіюватися залежно від очікуваного навантаження (кількість користувачів, обсяг трафіку). Однак для більшості особистих та невеликих командних проєктів можна орієнтуватися на наступні мінімальні характеристики:
Мінімальні вимоги
- 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 | - |
| A | mail або mail.пример.com | ваш_IP_VPS | - |
| MX | @ або пример.com | mail.пример.com | 10 |
| TXT (SPF) | @ або пример.com | v=spf1 mx a ip4:ваш_IP_VPS ~all | - |
| TXT (DKIM) | dkim._domainkey | Буде згенеровано Postfix'ом (див. нижче) | - |
| TXT (DMARC) | _dmarc | v=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. - Надсилання та отримання пошти:
- Надішліть лист з
admin@пример.comна зовнішню адресу (наприклад, Gmail). Перевірте, що лист дійшов і не потрапив у спам. Перевірте заголовки листа на наявність SPF, DKIM, DMARC. - Надішліть лист із зовнішньої адреси на
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