Свой почтовый сервер на TrueNAS: Установка и настройка Postfix+Dovecot | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Как развернуть свой почтовый сервер на TrueNAS: Полное руководство для DevOps

11 марта 2026 9 мин. чтения #devops #dovecot #postfix #self-hosted #truenas #настройка почты #почтовый сервер

Представь, что у тебя есть полный контроль над своей электронной почтой: никаких ограничений от провайдеров, полная приватность и возможность тонкой настройки под свои нужды. Развернуть свой почтовый сервер на TrueNAS — это не только престижно, но и практично. Давай разберем, как создать надежную почтовую инфраструктуру на базе TrueNAS Scale.

Почему именно свой почтовый сервер на TrueNAS?

TrueNAS Scale, построенный на Debian Linux, предоставляет идеальную платформу для развертывания почтовых сервисов. Вот ключевые преимущества:

  • Полный контроль над данными и конфигурацией
  • Интеграция с ZFS для надежного хранения почтовых ящиков
  • Встроенные механизмы резервного копирования и снапшотов
  • Масштабируемость — от домашнего использования до корпоративного уровня
  • Экономия на подписках почтовых сервисов
Важно: Перед началом убедись, что у тебя есть статический IP-адрес и доменное имя с настроенными DNS-записями (A, MX). Без этого почта не будет работать корректно.

Архитектура почтового сервера на TrueNAS

Мы будем использовать классическую связку:

  • Postfix — MTA (Mail Transfer Agent) для отправки и маршрутизации почты
  • Dovecot — IMAP/POP3 сервер для доступа к почтовым ящикам
  • MySQL/MariaDB — база данных для виртуальных пользователей и доменов
  • SpamAssassin + ClamAV — антиспам и антивирусная защита
  • Roundcube — веб-интерфейс для управления почтой

Подготовка TrueNAS Scale

Шаг 1: Настройка сети и DNS

bash
# Проверяем сетевые настройки
ip addr show

# Проверяем разрешение доменных имен
dig mx example.com
dig example.com

Настрой DNS записи для своего домена:

Тип записи Имя Значение TTL
A mail ваш_статический_IP 3600
MX @ mail.example.com 3600

Шаг 2: Установка необходимых пакетов

bash
# Обновляем систему
apt update && apt upgrade -y

# Устанавливаем основные компоненты
apt install -y \
  postfix postfix-mysql \
  dovecot-core dovecot-imapd dovecot-pop3d dovecot-mysql \
  mariadb-server \
  spamassassin clamav clamav-daemon \
  roundcube roundcube-mysql \
  opendkim opendkim-tools \
  certbot python3-certbot

Настройка базы данных MariaDB

bash
# Запускаем MariaDB и добавляем в автозагрузку
systemctl enable --now mariadb

# Запускаем настройку безопасности
mysql_secure_installation

Создаем базу данных и пользователей для почтовой системы:

sql
CREATE DATABASE mailserver;
USE mailserver;

-- Таблица виртуальных доменов
CREATE TABLE virtual_domains (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Таблица виртуальных пользователей
CREATE TABLE virtual_users (
  id INT NOT NULL AUTO_INCREMENT,
  domain_id INT NOT NULL,
  password VARCHAR(106) NOT NULL,
  email VARCHAR(100) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY email (email),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Таблица алиасов
CREATE TABLE virtual_aliases (
  id INT NOT NULL AUTO_INCREMENT,
  domain_id INT 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=utf8;

-- Создаем пользователя для почтовых сервисов
CREATE USER 'mailuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT SELECT ON mailserver.* TO 'mailuser'@'localhost';
FLUSH PRIVILEGES;

Настройка Postfix для работы с MySQL

config
# /etc/postfix/main.cf - основные настройки

myhostname = mail.example.com
myorigin = /etc/mailname
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

# Виртуальные домены и пользователи
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

# Безопасность
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_security_level = may
smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3

Создаем конфигурационные файлы для работы с MySQL:

config
# /etc/postfix/mysql-virtual-mailbox-domains.cf
user = mailuser
password = StrongPassword123!
hosts = localhost
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'

# /etc/postfix/mysql-virtual-mailbox-maps.cf
user = mailuser
password = StrongPassword123!
hosts = localhost
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email='%s'

# /etc/postfix/mysql-virtual-alias-maps.cf
user = mailuser
password = StrongPassword123!
hosts = localhost
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source='%s'

Настройка Dovecot

config
# /etc/dovecot/dovecot.conf

protocols = imap pop3 lmtp

# SSL/TLS настройки
ssl = required
ssl_cert = 
config
# /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
}
config
# /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=mailserver user=mailuser password=StrongPassword123!
default_pass_scheme = SHA512-CRYPT

password_query = \
  SELECT email as user, password FROM virtual_users WHERE email='%u'

user_query = \
  SELECT '/var/mail/vhosts/%d/%n' as home, 'maildir:~/Maildir' as mail, \
  1000 as uid, 1000 as gid FROM virtual_users WHERE email='%u'

iterate_query = SELECT email as user FROM virtual_users

Настройка SSL сертификатов

bash
# Получаем SSL сертификат от Let's Encrypt
certbot certonly --standalone \
  -d mail.example.com \
  --non-interactive \
  --agree-tos \
  -m admin@example.com

# Создаем автоматическое обновление сертификатов
echo "0 0 * * * root certbot renew --quiet --post-hook 'systemctl reload postfix dovecot'" \
  >> /etc/crontab

Настройка SPF, DKIM и DMARC

bash
# Генерация DKIM ключа
opendkim-genkey -s mail -d example.com
mv mail.private /etc/opendkim/keys/example.com/mail.private
mv mail.txt /etc/opendkim/keys/example.com/mail.txt
chown -R opendkim:opendkim /etc/opendkim/keys
chmod 600 /etc/opendkim/keys/example.com/mail.private

Добавь эти DNS записи для улучшения доставляемости почты:

Тип Имя Значение Назначение
TXT @ v=spf1 mx ~all SPF запись
TXT mail._domainkey v=DKIM1; k=rsa; p=публичный_ключ DKIM запись
TXT _dmarc v=DMARC1; p=none; rua=mailto:dmarc@example.com DMARC политика

Запуск и тестирование почтового сервера

bash
# Перезапускаем все сервисы
systemctl restart postfix dovecot mariadb opendkim

# Проверяем статус
systemctl status postfix dovecot

# Тестируем SMTP соединение
telnet localhost 25

# Тестируем IMAP соединение
telnet localhost 143
bash
# Проверка отправки почты
swaks --to test@example.com \
  --from admin@example.com \
  --server localhost \
  --auth LOGIN \
  --auth-user admin@example.com \
  --auth-password 'user_password' \
  -tls
Внимание: Многие интернет-провайдеры блокируют исходящие соединения на порт 25. Если почта не отправляется во внешние домены, проверь настройки файрвола и политики провайдера.

Настройка веб-интерфейса Roundcube

config
# /etc/roundcube/config.inc.php

$config['db_dsnw'] = 'mysql://mailuser:StrongPassword123!@localhost/mailserver';
$config['default_host'] = 'ssl://localhost';
$config['default_port'] = 993;
$config['smtp_server'] = 'tls://localhost';
$config['smtp_port'] = 587;
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';
$config['support_url'] = '';
$config['product_name'] = 'My Mail Server';
$config['plugins'] = array('archive', 'zipdownload', 'password');

Безопасность и мониторинг

bash
# Настройка fail2ban для защиты от брутфорса
apt install -y fail2ban

# Создаем конфигурацию для почтовых сервисов
cat > /etc/fail2ban/jail.local << EOF
[postfix]
enabled = true
port = smtp,465,submission
filter = postfix
logpath = /var/log/mail.log
maxretry = 3
bantime = 3600

[dovecot]
enabled = true
port = pop3,pop3s,imap,imaps
filter = dovecot
logpath = /var/log/mail.log
maxretry = 3
bantime = 3600
EOF

systemctl restart fail2ban

FAQ: Часто задаваемые вопросы

Почта уходит в спам у Gmail/Yandex?

Это распространенная проблема. Убедись, что правильно настроены SPF, DKIM и DMARC записи. Проверь обратную DNS запись (PTR) для своего IP-адреса. Используй сервисы типа mail-tester.com для диагностики.

Как сделать резервную копию почтовых ящиков?

Используй встроенные возможности TrueNAS ZFS снапшотов. Также можно настроить rsync для копирования директории /var/mail/vhosts на другой сервер или в облако.

Как добавить нового пользователя?

Используй SQL запросы или создай простой веб-интерфейс для управления пользователями. Пример добавления пользователя:

sql
INSERT INTO virtual_users (domain_id, email, password) 
VALUES (1, 'newuser@example.com', 
  ENCRYPT('StrongPassword123!', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))));

Как мониторить работу почтового сервера?

Настрой мониторинг через Prometheus + Grafana. Используй экспортеры для Postfix и Dovecot. Также полезно настроить оповещения о проблемах через Telegram или Email.

Заключение

Развертывание своего почтового сервера на TrueNAS — это серьезный шаг к цифровой независимости. Хотя начальная настройка требует времени и внимания к деталям, результат стоит усилий. Ты получаешь полный контроль над своей коммуникацией, улучшаешь безопасность и приватность данных.

Совет от ментора: Начни с тестового домена и постепенно переноси на него не критичную почту. Только после полной отладки всех компонентов переводи основные почтовые ящики.

Помни, что поддержка почтового сервера — это ongoing процесс. Регулярно обновляй ПО, мониторь логи, следи за изменениями в требованиях почтовых провайдеров. Удачи в создании твоего собственного почтового решения!

Поделиться:
Сохранить гайд? В закладки браузера