- Home »

Как настроить почтовый сервер Postfix с Dovecot
Настройка собственного почтового сервера — это один из тех скиллов, которые отличают настоящего сисадмина от новичка. Казалось бы, в эпоху Gmail и Outlook зачем заморачиваться с самостоятельной настройкой? Но если вы работаете с корпоративной почтой, хотите полный контроль над своими данными или просто любите понимать, как всё работает под капотом, то связка Postfix + Dovecot — это классика, которую стоит освоить.
Postfix отвечает за отправку и получение писем (SMTP), а Dovecot — за их хранение и выдачу клиентам (POP3/IMAP). Вместе они создают полноценную почтовую систему, которая может конкурировать с любыми коммерческими решениями. В этой статье мы пройдём весь путь от чистого сервера до работающей почты с SSL-шифрованием и защитой от спама.
Как это работает: архитектура почтового сервера
Прежде чем лезть в конфиги, давайте разберёмся с архитектурой. Почтовый сервер — это не одна программа, а целая экосистема компонентов:
- MTA (Mail Transfer Agent) — Postfix, отвечает за передачу почты между серверами
- MDA (Mail Delivery Agent) — Dovecot, доставляет письма в почтовые ящики
- IMAP/POP3 сервер — тот же Dovecot, даёт доступ к письмам почтовым клиентам
- База данных пользователей — может быть MySQL, PostgreSQL или простые файлы
Поток письма выглядит так: отправитель → Postfix (SMTP) → обработка и фильтрация → Dovecot (доставка) → хранилище → Dovecot (IMAP/POP3) → получатель.
Подготовка сервера и базовая настройка
Для начала вам понадобится VPS или выделенный сервер с минимум 1GB RAM и статическим IP. Я буду использовать Ubuntu 22.04, но для CentOS/RHEL команды будут похожими.
# Обновляем систему
sudo apt update && sudo apt upgrade -y
# Устанавливаем необходимые пакеты
sudo apt install postfix dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql mysql-server -y
# Настраиваем hostname (важно для почтового сервера!)
sudo hostnamectl set-hostname mail.yourdomain.com
echo "127.0.0.1 mail.yourdomain.com" >> /etc/hosts
Во время установки Postfix выберите "Internet Site" и укажите ваш домен. Это базовая конфигурация, которую мы потом переделаем.
Настройка MySQL для хранения пользователей
Хранить пользователей в базе данных гораздо удобнее, чем в системных аккаунтах. Создаём структуру:
# Заходим в MySQL
sudo mysql -u root -p
# Создаём базу данных
CREATE DATABASE mailserver;
CREATE USER 'mailuser'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON mailserver.* TO 'mailuser'@'localhost';
FLUSH PRIVILEGES;
USE mailserver;
# Таблица доменов
CREATE TABLE domains (
id INT AUTO_INCREMENT PRIMARY KEY,
domain VARCHAR(255) NOT NULL UNIQUE
);
# Таблица пользователей
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
quota_mb INT DEFAULT 1000,
enabled BOOLEAN DEFAULT TRUE
);
# Добавляем тестовый домен и пользователя
INSERT INTO domains (domain) VALUES ('yourdomain.com');
INSERT INTO users (email, password) VALUES ('test@yourdomain.com', ENCRYPT('password123'));
Конфигурация Postfix: основные настройки
Главный конфиг Postfix находится в /etc/postfix/main.cf
. Вот базовая конфигурация:
# Основные параметры
myhostname = mail.yourdomain.com
mydomain = yourdomain.com
myorigin = $mydomain
mydestination = localhost
mynetworks = 127.0.0.0/8
# Виртуальные домены и пользователи
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-users.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-aliases.cf
# Настройки для Dovecot
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_base = /var/mail/vhosts
virtual_minimum_uid = 1000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
# Безопасность
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level = may
# Ограничения
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
Теперь создаём файлы для подключения к MySQL:
# /etc/postfix/mysql-virtual-domains.cf
user = mailuser
password = strong_password
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM domains WHERE domain='%s'
# /etc/postfix/mysql-virtual-users.cf
user = mailuser
password = strong_password
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM users WHERE email='%s' AND enabled=1
Настройка Dovecot: IMAP и POP3
Dovecot конфигурируется через несколько файлов в /etc/dovecot/conf.d/
. Основные изменения:
# /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login
!include auth-sql.conf.ext
#!include auth-system.conf.ext
# /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/mail/vhosts/%d/%n
mail_privileged_group = mail
mail_uid = 5000
mail_gid = 5000
# /etc/dovecot/conf.d/10-master.conf
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0666
user = postfix
}
}
Настраиваем аутентификацию через MySQL:
# /etc/dovecot/conf.d/auth-sql.conf.ext
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=5000 gid=5000 home=/var/mail/vhosts/%d/%n
}
# /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=mailserver user=mailuser password=strong_password
default_pass_scheme = CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u' AND enabled=1
Создание пользователя и директорий
# Создаём пользователя для почты
sudo groupadd -g 5000 vmail
sudo useradd -g vmail -u 5000 vmail -d /var/mail
# Создаём директории
sudo mkdir -p /var/mail/vhosts
sudo chown -R vmail:vmail /var/mail/vhosts
sudo chmod -R 755 /var/mail/vhosts
# Устанавливаем права на конфиги
sudo chown root:postfix /etc/postfix/mysql-*.cf
sudo chmod 640 /etc/postfix/mysql-*.cf
SSL-сертификаты и безопасность
Для продакшена обязательно нужны нормальные SSL-сертификаты. Используем Let's Encrypt:
# Устанавливаем Certbot
sudo apt install certbot -y
# Получаем сертификат
sudo certbot certonly --standalone -d mail.yourdomain.com
# Обновляем конфигурацию Postfix
sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mail.yourdomain.com/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mail.yourdomain.com/privkey.pem'
# Настраиваем Dovecot SSL
echo "ssl = yes" >> /etc/dovecot/conf.d/10-ssl.conf
echo "ssl_cert = > /etc/dovecot/conf.d/10-ssl.conf
echo "ssl_key = > /etc/dovecot/conf.d/10-ssl.conf
Запуск и тестирование
# Перезапускаем сервисы
sudo systemctl restart postfix
sudo systemctl restart dovecot
# Проверяем статус
sudo systemctl status postfix
sudo systemctl status dovecot
# Тестируем отправку письма
echo "Test message" | mail -s "Test subject" test@yourdomain.com
# Проверяем логи
sudo tail -f /var/log/mail.log
Сравнение с альтернативными решениями
Решение | Сложность настройки | Производительность | Функциональность | Поддержка |
---|---|---|---|---|
Postfix + Dovecot | Высокая | Отличная | Полная | Отличная |
Exim + Courier | Высокая | Хорошая | Полная | Средняя |
Sendmail | Очень высокая | Хорошая | Полная | Устаревает |
Mail-in-a-Box | Низкая | Средняя | Ограниченная | Хорошая |
iRedMail | Средняя | Хорошая | Полная | Коммерческая |
Продвинутые настройки и оптимизация
После базовой настройки стоит добавить несколько важных компонентов:
SpamAssassin для фильтрации спама
# Установка
sudo apt install spamassassin spamc -y
# Добавляем в main.cf
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service unix:private/spamassassin
# Настройка в master.cf
spamassassin unix - n n - - pipe
user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
Аутентификация SMTP
# Добавляем в main.cf
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
Мониторинг и логирование
Для мониторинга почтового сервера можно использовать различные инструменты:
# Установка pflogsumm для анализа логов
sudo apt install pflogsumm -y
# Создаём скрипт для ежедневного отчёта
#!/bin/bash
cat /var/log/mail.log | pflogsumm -d today | mail -s "Daily mail report" admin@yourdomain.com
# Мониторинг очереди писем
mailq
postqueue -p
Автоматизация и скрипты
Создание пользователей можно автоматизировать с помощью скриптов:
#!/bin/bash
# add-mailuser.sh
EMAIL=$1
PASSWORD=$2
DOMAIN=$(echo $EMAIL | cut -d@ -f2)
# Добавляем домен если его нет
mysql -u mailuser -p'strong_password' mailserver -e "INSERT IGNORE INTO domains (domain) VALUES ('$DOMAIN');"
# Добавляем пользователя
mysql -u mailuser -p'strong_password' mailserver -e "INSERT INTO users (email, password) VALUES ('$EMAIL', ENCRYPT('$PASSWORD'));"
# Создаём директорию
sudo mkdir -p /var/mail/vhosts/$DOMAIN/${EMAIL%@*}
sudo chown -R vmail:vmail /var/mail/vhosts/$DOMAIN
echo "User $EMAIL created successfully"
Безопасность и защита
Несколько важных мер безопасности:
- Fail2ban — защита от брутфорса
- SPF/DKIM/DMARC — аутентификация отправителей
- Регулярные бэкапы — автоматическое резервное копирование
- Firewall — ограничение доступа к портам
# Установка Fail2ban
sudo apt install fail2ban -y
# Базовая конфигурация
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Добавляем правила для Postfix и Dovecot
[postfix]
enabled = true
port = smtp,465,587
filter = postfix
logpath = /var/log/mail.log
[dovecot]
enabled = true
port = pop3,pop3s,imap,imaps
filter = dovecot
logpath = /var/log/mail.log
Интеграция с веб-интерфейсом
Для удобства управления можно установить веб-интерфейс типа Roundcube или Rainloop:
# Установка Roundcube
sudo apt install roundcube roundcube-mysql -y
# Настройка виртуального хоста Apache/Nginx
# Конфигурация подключения к нашему почтовому серверу
Производительность и масштабирование
Для высоконагруженных серверов стоит обратить внимание на:
- Оптимизация MySQL — индексы, кеширование запросов
- Postfix queues — настройка очередей для больших объёмов
- Dovecot caching — кеширование для IMAP
- Hardware — быстрые SSD, достаточно RAM
Если нужны высокая производительность и надёжность, стоит рассмотреть выделенные серверы вместо VPS.
Интересные факты и нестандартные применения
Постfix изначально создавался Wietse Venema в IBM как более безопасная альтернатива Sendmail. Интересно, что он написан на C и известен своей модульной архитектурой — каждый компонент работает в отдельном процессе с минимальными привилегиями.
Нестандартные применения:
- Relay для приложений — отправка уведомлений от веб-приложений
- Логирование через email — отправка критических логов администраторам
- Интеграция с системами мониторинга — Zabbix, Nagios могут использовать почтовый сервер
- Автоматизация DevOps — уведомления о деплоях, ошибках CI/CD
Полезные ссылки
Заключение и рекомендации
Настройка собственного почтового сервера — это сложная, но крайне полезная задача. Связка Postfix + Dovecot даёт вам полный контроль над почтовой инфраструктурой и практически неограниченные возможности для кастомизации.
Когда использовать собственный почтовый сервер:
- Корпоративная почта с высокими требованиями к безопасности
- Необходимость интеграции с существующими системами
- Большие объёмы почты (дешевле чем облачные решения)
- Специфические требования к обработке писем
Когда НЕ стоит:
- Малый бизнес без IT-отдела
- Нет времени на обслуживание и мониторинг
- Критичность простоев (лучше использовать облачные решения)
Помните, что почтовый сервер требует постоянного внимания: мониторинг репутации IP, обновления безопасности, борьба со спамом. Но если вы готовы к этому, то получите мощный инструмент, который полностью под вашим контролем.
Начните с тестового сервера, изучите все компоненты, и только потом переносите в продакшен. Удачи в настройке!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.