Создание почтового сервера в Proxmox: Подробное Руководство
В современном мире электронная почта остается одним из важнейших средств коммуникации. Создание собственного почтового сервера на Proxmox дает вам полный контроль над вашими данными, безопасностью и функциональностью. Это руководство проведет вас через процесс настройки почтового сервера, используя популярные и надежные компоненты.
Зачем нужен собственный почтовый сервер?
- Полный контроль: Вы управляете всеми аспектами вашего почтового сервиса, от хранения данных до фильтрации спама.
- Приватность: Ваши данные не проходят через сторонние серверы, что повышает конфиденциальность.
- Гибкость: Возможность настройки под любые специфические требования, интеграция с другими сервисами.
- Независимость: Вы не привязаны к услугам конкретного провайдера, что снижает риски блокировок или изменения условий.
Обзор компонентов
Мы будем использовать следующие основные компоненты:
- Postfix: Агент пересылки почты (MTA), который будет отвечать за отправку и получение электронных писем.
- Dovecot: Агент доставки почты (MDA), предоставляющий доступ к почтовым ящикам по протоколам IMAP/POP3.
- MariaDB/PostgreSQL: База данных для хранения информации о пользователях, доменах и псевдонимах.
- OpenDKIM: Для подписи исходящих писем, подтверждающей их подлинность.
- SpamAssassin/ClamAV: Для фильтрации спама и обнаружения вирусов (опционально, но крайне рекомендуется).
- Roundcube/Rainloop: Веб-интерфейс для доступа к почте (опционально).
Шаг 1: Подготовка среды Proxmox
Предполагается, что у вас уже установлен Proxmox VE. Для почтового сервера рекомендуется создать отдельную виртуальную машину (VM) или контейнер LXC. Для данной статьи мы будем использовать VM на базе Debian/Ubuntu Server.
- Создайте новую VM:
- ОС: Debian 11/12 или Ubuntu 20.04/22.04 LTS.
- CPU: Минимум 2 ядра.
- RAM: Минимум 2 ГБ (для небольшого сервера). Если планируется использование SpamAssassin/ClamAV, желательно 4 ГБ и более.
- Диск: Минимум 20 ГБ (в зависимости от количества пользователей и объема почты).
- Сеть: Статический IP-адрес.
2.Обновите систему:
sudo apt update
sudo apt upgrade -y
3. Настройте имя хоста (FQDN): Убедитесь, что у вашей VM настроено полное доменное имя (FQDN), например, mail.yourdomain.com.
sudo hostnamectl set-hostname mail.yourdomain.com
echo "127.0.1.1 mail.yourdomain.com mail" | sudo tee -a /etc/hosts
4. Откройте порты на файрволе Proxmox (если используете):
- 25 (SMTP)
- 587 (SMTPS, Submission)
- 465 (SMTPS)
- 143 (IMAP)
- 993 (IMAPS)
- 110 (POP3)
- 995 (POP3S)
Шаг 2: Настройка DNS-записей
Критически важный шаг для корректной работы почтового сервера. Вам нужно настроить следующие записи у вашего DNS-провайдера:
- A-запись:
mail.yourdomain.com-> IP-адрес вашей VM. - MX-запись: Указывает на ваш почтовый сервер. Приоритет обычно 10.
yourdomain.com MX 10 mail.yourdomain.com
- PTR-запись (Reverse DNS): Ваш интернет-провайдер должен настроить для вашего IP-адреса PTR-запись, указывающую на
mail.yourdomain.com. Это очень важно для предотвращения попадания ваших писем в спам.
SPF-запись (TXT): Помогает предотвратить подделку отправителя.yourdomain.com TXT "v=spf1 mx a:mail.yourdomain.com -all"
DKIM-запись (TXT): Будет сгенерирована позже, после установки OpenDKIM.
Шаг 3: Установка и настройка Postfix
Postfix — это ядро вашего почтового сервера.
sudo apt install postfix postfix-mysql -y # или postfix-pgsql для PostgreSQL
В процессе установки:
- General type of mail configuration:
Internet Site - System mail name:
yourdomain.com(основной домен, который будет обслуживаться)
Теперь отредактируйте конфигурационный файл Postfix: sudo nano /etc/postfix/main.cf
# Основные параметры
myhostname = mail.yourdomain.com
mydomain = yourdomain.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = all # или ipv4 если не используете IPv6
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# Сети, которым разрешено релеить почту (локальные)
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.1.0/24 # Замените на вашу локальную сеть
# Виртуальные пользователи и домены (будет настроено через базу данных)
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_transport = lmtp:unix:private/dovecot-lmpa
# Аутентификация SMTP
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
# Условия для отправки писем
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
# TLS/SSL (обязательно!)
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem # Замените на ваш SSL-сертификат
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key # Замените на ваш SSL-ключ
smtpd_tls_security_level = may
smtp_tls_security_level = may
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Важно: Для smtpd_tls_cert_file и smtpd_tls_key_file вам необходимо получить реальный SSL-сертификат (например, через Let’s Encrypt). Пока можно использовать самоподписанный, но для продакшена это неприемлемо.
Шаг 4: Установка и настройка MariaDB
sudo apt install mariadb-server -y
sudo mysql_secure_installation
Создайте базу данных и пользователя для Postfix и Dovecot:
sudo mysql -u root -p
CREATE DATABASE mailserver;
CREATE USER 'mailuser'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON mailserver.* TO 'mailuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Создайте таблицы:
sudo mysql -u mailuser -pmailserver < /path/to/your/create_tables.sql
Пример create_tables.sql:
USE mailserver;
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,
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
# UNIQUE KEY `source` (`source`) # Если хотите, чтобы alias был уникальным
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO virtual_domains (name) VALUES ('yourdomain.com'); # Ваш домен
INSERT INTO virtual_users (domain_id, email, password) VALUES (1, 'user1@yourdomain.com', ENCRYPT('your_password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))));
# ENCRYPT() это функция MySQL для создания хешей, используйте SHA256/SHA512 или другие более надежные методы хеширования в приложении.
# Для Dovecot будет использоваться другой метод хеширования, который настроим позже.
Шаг 5: Конфигурационные файлы Postfix для MySQL
Создайте файлы в /etc/postfix/
/etc/postfix/mysql-virtual-domains.cf
user = mailuser
password = your_strong_password
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'
/etc/postfix/mysql-virtual-mailbox-maps.cf
user = mailuser
password = your_strong_password
hosts = 127.0.0.1
dbname = mailserver
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM virtual_users WHERE email='%s'
/etc/postfix/mysql-virtual-alias-maps.cf
user = mailuser
password = your_strong_password
hosts = 127.0.0.1
dbname = mailserver
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
sudo systemctl enable postfix
Шаг 6: Установка и настройка Dovecot
Dovecot предоставляет IMAP/POP3 доступ к почтовым ящикам.
sudo apt install dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql -y # или dovecot-pgsql
Отредактируйте основные конфигурационные файлы Dovecot.
/etc/dovecot/dovecot.conf
# Базовый конфиг
listen = *
protocols = imap pop3 lmtp
disable_plaintext_auth = no # Временно для тестирования, потом установите yes и используйте TLS
auth_mechanisms = plain login
ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem # Ваш SSL-сертификат
ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key # Ваш SSL-ключ
/etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login # Добавьте/измените
!include auth-sql.conf.ext
/etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir # Формат хранения почты
mail_privileged_group = mail
/etc/dovecot/conf.d/10-master.conf
# В секции service lmtp
unix_listener lmtp {
mode = 0666 # Или 0660 и добавьте пользователя postfix в группу dovecot
user = postfix
group = postfix
}
# В секции service auth
unix_listener auth {
mode = 0666
user = postfix
group = postfix
}
/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
driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=your_strong_password
password_query = SELECT email AS user, password FROM virtual_users WHERE email='%u'
user_query = SELECT CONCAT('/var/vmail/', SUBSTRING_INDEX(email, '@', -1), '/', SUBSTRING_INDEX(email, '@', 1)) AS home, 5000 AS uid, 5000 AS gid FROM virtual_users WHERE email='%u'
uid/gid 5000 - это пример, создайте пользователя и группу vmail с этими UID/GID.
Создайте директорию для хранения почты и назначьте ей правильные права:
sudo mkdir -p /var/vmail
sudo groupadd -g 5000 vmail
sudo useradd -g vmail -u 5000 vmail -d /var/vmail -s /usr/sbin/nologin
sudo chown -R vmail:vmail /var/vmail
Перезапустите Dovecot:
sudo systemctl restart dovecot
sudo systemctl enable dovecot
Шаг 7: Установка и настройка OpenDKIM
OpenDKIM позволяет подписывать исходящие письма, что значительно снижает вероятность попадания в спам.
sudo apt install opendkim opendkim-tools -y
Создайте директорию для ключей:
sudo mkdir /etc/opendkim/keys
sudo chown opendkim:opendkim /etc/opendkim/keys
Сгенерируйте ключи для вашего домена (замените yourdomain.com и default на свои значения):
sudo opendkim-genkey -D /etc/opendkim/keys -d yourdomain.com -s default
sudo chown opendkim:opendkim /etc/opendkim/keys/default.private
Отредактируйте default.txt и добавьте его содержимое как TXT-запись у вашего DNS-провайдера.
/etc/opendkim.conf
Canonicalization relaxed/simple
Mode sv
SubDomains no
AutoRestart Yes
AutoRestartRate 10/1M
KeyFile /etc/opendkim/keys/default.private
# PidFile /run/opendkim/opendkim.pid # В некоторых версиях может быть другим
UserID opendkim:opendkim
Socket inet:8891@localhost # Или unix:/var/run/opendkim/opendkim.sock
UMask 002
OversignHeaders From
KeyTable /etc/opendkim/key.table
SigningTable /etc/opendkim/signing.table
ExternalIgnoreList /etc/opendkim/trusted.hosts
InternalHosts /etc/opendkim/trusted.hosts
/etc/opendkim/key.table
default._domainkey.yourdomain.com yourdomain.com:default:/etc/opendkim/keys/default.private
/etc/opendkim/signing.table
*@yourdomain.com default._domainkey.yourdomain.com
/etc/opendkim/trusted.hosts
127.0.0.1
localhost
192.168.1.0/24 # Ваша локальная сеть, если хотите, чтобы локальные письма подписывались
Добавьте интеграцию с Postfix в main.cf
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
Перезапустите OpenDKIM и Postfix:
sudo systemctl restart opendkim
sudo systemctl enable opendkim
sudo systemctl restart postfix
Шаг 8: Установка и настройка SpamAssassin и ClamAV (опционально)
sudo apt install spamassassin spamc clamav clamav-daemon -y
Настройте SpamAssassin и интегрируйте с Postfix через Milter (например, Amavisd-new) или через Dovecot Sieve. Это сложный процесс, выходящий за рамки данного краткого руководства, но крайне рекомендуемый для продакшена.
Шаг 9: Установка веб-интерфейса (Roundcube) (опционально)
Для удобства пользователей можно установить Roundcube.
sudo apt install apache2 php libapache2-mod-php php-mysql php-mbstring php-intl php-zip php-gd php-json -y
sudo apt install roundcube roundcube-core roundcube-mysql -y # или roundcube-pgsql
Во время установки Roundcube настроит базу данных. Вам нужно будет отредактировать конфигурационные файлы Roundcube (обычно в /etc/roundcube/) для подключения к вашему почтовому серверу IMAP/SMTP.
Настройте виртуальный хост Apache для Roundcube.
Заключение
Создание почтового сервера — это сложный процесс, требующий внимательности к деталям. После выполнения всех этих шагов у вас будет базовый почтовый сервер, способный отправлять и получать письма. Не забывайте о регулярных обновлениях, мониторинге логов и резервном копировании.
Дальнейшие шаги:
- Получение SSL-сертификатов Let’s Encrypt для Postfix и Dovecot.
- Настройка Amavisd-new для интеграции SpamAssassin и ClamAV.
- Настройка DMARC-записей в DNS.
- Мониторинг логов и производительности.
- Регулярные обновления безопасности.