mysurik.ru

Создание почтового сервера в 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.

  1. Создайте новую 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.
  • Мониторинг логов и производительности.
  • Регулярные обновления безопасности.

Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *