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

Получить VPS arrow_forward
eco Начальный Туториал

Установка и настройка Postfix, Dovecot и Roundcube на VPS для собственного почтового сервера

calendar_month Sep 03, 2026 schedule 25 мин. чтения visibility 19 просмотров
Установка и настройка 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) для отслеживания состояния сервера, использования ресурсов и производительности почтовых сервисов. Это поможет своевременно выявлять и устранять потенциальные проблемы.

Был ли этот гайд полезен?

Ваш отзыв помогает нам улучшать гайды.

Поделиться записью:

Отправьте гайд тому, кому он может пригодиться.

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.