Установка и настройка 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
Бэкапы и обслуживание
Надежная система резервного копирования и регулярное обслуживание критически важны для любого сервера, особенно для почтового, где хранятся ценные данные.
Что бэкапить
- База данных 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) для отслеживания состояния сервера, использования ресурсов и производительности почтовых сервисов. Это поможет своевременно выявлять и устранять потенциальные проблемы.