Заметка Установка и настройка своего почтового сервиса (Postfix + Dovecot + DKIM/SPF/DMARC)

  • Автор темы Автор темы 0x42
  • Дата начала Дата начала

0x42

Форумчанин
Регистрация
05.05.2025
Сообщения
91
Реакции
46
В этой статье покажу как самому на своем сервере поднять почту, будем считать что у тебя уже есть свой домен и арендован свой VPS или сервер.
Рассматривать будем Дебиан, но подойдет также и для Ubuntu.

Напомню:

Postfix - Это сервер для отправки и приема почты SMTP (порт 465 с TLS).
Dovecot - Для сбора принятой почты, доступ IMAP (порт 993, с TLS), или POP3 (порт 995, с TLS).

Вот чёткое сравнение IMAP и POP3 — два способа получения почты почтовыми клиентами (Thunderbird, Outlook, и т.д.):

ХарактеристикаIMAP (порт 993)POP3 (порт 995)
Где хранятся письмаНа сервереСкачиваются на клиент и удаляются с сервера
СинхронизацияДа (двусторонняя)Нет (односторонняя)
Устройство доступаМожно с нескольких (веб, телефон, ПК)Обычно только с одного
Удаление с сервераУправляется клиентом, часто остаютсяЧасто удаляются сразу после загрузки
Папки/структураПоддерживаются (входящие, отправленные и т.д.)Нет, только входящие
ИспользованиеСовременные клиенты, синхронизация, бэкапыСтарые клиенты, слабый интернет
ПроизводительностьЧуть медленнее (работа с сервером в реальном времени)Быстро, но без синхронизации

🧩 1. Установка необходимых пакетов

Код:
sudo apt update
sudo apt install postfix dovecot-core dovecot-imapd dovecot-pop3d mailutils opendkim opendkim-tools

(при установке Postfix выбери "Internet Site", имя — mail.example.com)

---

⚙️ 2. Настройка Postfix

Файл: /etc/postfix/main.cf

Код:
myhostname = mail.example.com
mydomain = example.com
myorigin = /etc/mailname
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP
mynetworks = 127.0.0.0/8
relay_domains =
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/mail.crt
smtpd_tls_key_file = /etc/ssl/private/mail.key
smtpd_tls_auth_only = yes
smtpd_recipient_restrictions =
   permit_mynetworks,
   permit_sasl_authenticated,
   reject_unauth_destination
smtp_tls_security_level = may
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

---

📨 3. Настройка Dovecot

Файл: /etc/dovecot/dovecot.conf

Код:
!include_try /usr/share/dovecot/protocols.d/*.protocol

Файл: /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir

Файл: /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-system.conf.ext

Файл: /etc/dovecot/conf.d/10-master.conf

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

---

🔐 4. TLS-сертификаты

Код:
# Let's Encrypt:
apt install certbot
certbot certonly --standalone -d mail.example.com

Сертификаты будут здесь:

[*]/etc/letsencrypt/live/mail.example.com/fullchain.pem
[*]/etc/letsencrypt/live/mail.example.com/privkey.pem

Укажи пути в postfix:

В файле /etc/postfix/main.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

Укажи пути в dovecot:

Файл /etc/dovecot/conf.d/10-ssl.conf:

ssl = yes
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem

Автообновление сертификатов:

echo "0 3 * * * root certbot renew --quiet && systemctl reload postfix dovecot" > /etc/cron.d/certbot-postfix-dovecot

---

🛡️ 5. Настройка DKIM (OpenDKIM)

Файл: /etc/opendkim.conf

Код:
Syslog yes
UMask 002
Domain example.com
KeyFile /etc/opendkim/keys/example.com/default.private
Selector default
Socket inet:12301@localhost
Canonicalization relaxed/simple
Mode sv
SubDomains no
AutoRestart yes

Генерация ключей:

Код:
mkdir -p /etc/opendkim/keys/example.com
cd /etc/opendkim/keys/example.com
opendkim-genkey -s default -d example.com
chown opendkim:opendkim default.private

Файл: /etc/default/opendkim

Код:
SOCKET="inet:12301@localhost"

Добавь в /etc/postfix/main.cf:

Код:
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

---

🌐 6. DNS-записи

# A-записи:
Код:
@     IN A   <ваш_IP>
mail  IN A   <ваш_IP>

# MX:
Код:
@     IN MX  10 mail.example.com.

# SPF:
Код:
@     IN TXT "v=spf1 mx ip4:<ваш_IP> ~all"

# DKIM:
Код:
default._domainkey IN TXT "v=DKIM1; k=rsa; p=<содержимое default.txt>"

# DMARC:
Код:
_dmarc IN TXT "v=DMARC1; p=quarantine; rua=mailto:postmaster@example.com"
---

🔁 7. Перезапуск служб

Код:
systemctl restart postfix
systemctl restart dovecot
systemctl restart opendkim

📥 Как принимать почту​

Письма приходят на адреса вроде:
user@example.com

Пользователи должны существовать в системе:

- Если используешь maildir, то достаточно системного пользователя.
Пример:
Код:
adduser testuser
su - testuser
mkdir -p ~/Maildir

Подключение почтовым клиентом (Thunderbird, Outlook, K-9, и т.д.):

Код:
Входящая почта (IMAP):
  Сервер: mail.example.com
  Порт: 993
  Шифрование: SSL/TLS
  Логин: имя_пользователя
  Пароль: системный пароль

Как отправлять почту​

📧 Отправка из консоли (Для теста):

Код:
echo "Test body" | mail -s "Test subject" user@gmail.com

📬 Отправка через почтовый клиент:

Код:
Исходящая почта (SMTP):
  Сервер: mail.example.com
  Порт: 587 (STARTTLS) или 465 (SSL)
  Аутентификация: Включена
  Логин: имя_пользователя
  Пароль: системный пароль


✅ 8. Проверка

# тест через:
Чтобы увидеть нужно авторизоваться или зарегистрироваться.

Чтобы увидеть нужно авторизоваться или зарегистрироваться.
— проверка TLS и шифрования.

# лог:
tail -f /var/log/mail.log

🌐 Веб-интерфейс почты

Roundcube — это веб-интерфейс для работы с почтой (веб-почтовый клиент), написанный на PHP.

Если ты хочешь читать/отправлять почту через браузер, как в Gmail или Yandex, — Roundcube как раз для этого.



🌐 Что умеет Roundcube​

  • Работает через IMAP (чтение писем с сервера)
  • Поддерживает отправку через SMTP
  • Веб-интерфейс на русском языке
  • Работа с папками, поиском, фильтрами
  • Поддержка вложений, HTML-писем
  • Поддержка плагинов (например, адресная книга, фильтры, автоподписи и т.д.)

🧰 Как установить Roundcube на Debian​

1. Установи зависимости:​

Код:
sudo apt update
sudo apt install roundcube roundcube-core roundcube-mysql roundcube-plugins roundcube-plugins-extra

2. Укажи веб-сервер​

Debian предложит связать Roundcube с Apache — подтверди.
Roundcube будет доступен по адресу:
Код:
http://yourdomain.com/roundcube

Настройка конфигурации​

Файл: /etc/roundcube/config.inc.php

Укажи:
Код:
$config['default_host'] = 'ssl://mail.example.com';
$config['default_port'] = 993;

$config['smtp_server'] = 'tls://mail.example.com';
$config['smtp_port'] = 587;
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';

$config['support_url'] = 'mailto:support@example.com';
$config['product_name'] = 'Webmail @ example.com';

$config['enable_installer'] = false;

4. Разреши доступ к логину​

Убедись, что apache2 поддерживает PHP и сайт открыт по HTTPS (лучше с Let's Encrypt).

Подробнее:

Код:
Установка Apache и PHP:

sudo apt update
sudo apt install apache2 php libapache2-mod-php

apache2 -v
php -v

Проверь, что PHP работает в Apache​

Создай тестовый файл:

Код:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Открой в браузере:
Чтобы увидеть нужно авторизоваться или зарегистрироваться.
→ должна открыться страница с информацией о PHP.

Если страница скачивается — Apache не обрабатывает PHP: проверь, включён ли модуль:
Код:
sudo a2enmod php
sudo systemctl restart apache2

Удалить файл потом:
Код:
sudo rm /var/www/html/info.php

Настройка HTTPS с Let's Encrypt (через certbot)​

Установка​


Код:
sudo apt install certbot python3-certbot-apache

Запуск получения сертификата:

Код:
sudo certbot --apache -d mail.example.com

Если DNS работает и порт 80 открыт, Let’s Encrypt:
  • автоматически получит сертификат
  • настроит HTTPS в Apache
Проверка:

Открой:
Чтобы увидеть нужно авторизоваться или зарегистрироваться.
→ работает ли по HTTPS?

Автообновление сертификата​


Certbot уже ставит cron или systemd-таймер. Чтобы проверить:

Код:
sudo systemctl list-timers | grep certbot

Безопасность roundcube​

  • Включи HTTPS (обязательно!)
  • Убедись, что IMAP и SMTP работают только через TLS (порты 993 и 587)
  • Не забудь отключить установщик (/etc/roundcube/config.inc.php):
  • Код:
    $config['enable_installer'] = false;
 
Последнее редактирование:
Назад
Верх Низ