Налаштування Postfix SMTP з Dovecot IMAP та DKIM записи

Linux Email Service: Postfix, Dovecot, DNS та налаштування безпеки

Вступ

Налаштування поштової служби — це складна, але важлива навичка адміністрування Linux. Цей комплексний посібник охоплює Postfix для SMTP, Dovecot для IMAP/POP3, конфігурацію DNS з записами MX/SPF/DKIM, TLS шифрування та налаштування вебпошти з Roundcube.

Ми розглянемо архітектуру доставки електронної пошти, вимоги до DNS, безпеку пошти, запобігання спаму та найкращі практики для продакшну. Кожен розділ включає практичні конфігурації та реальні приклади.

Серія Linux Administration

📚 Переглянути повний посібник Linux Administration - Опануйте всі 7 частин з нашим комплексним шляхом навчання.

Це Частина V нашого комплексного 7-частинного посібника з адміністрування Linux:

  1. ← Частина I: Файлова система та управління процесами
  2. Частина II: Аутентифікація користувачів та LDAP
  3. Частина III: Фаєрвол UFW та мережі
  4. Частина IV: systemd та SSH Hardening
  5. Частина V: Поштовий сервер Postfix ← Ви тут
  6. Частина VI: Віртуалізація QEMU KVM
  7. Частина VII: Сховище LVM та RAID

Архітектура поштової системи

Повний потік електронної пошти

   Incoming Mail Server   

   Outgoing Mail Server   

  Sender  

  user@domain.com  

  Postfix SMTP  

  Port 587  

  DNS MX Lookup  

  Internet  

  Postfix SMTP  

  Port 25  

  Dovecot IMAP  

  Port 143/993  

  Mailbox  

  ~/Maildir  

  Recipient  

  Email Client  

Компоненти електронної пошти:

  • MTA (Mail Transfer Agent): Postfix - відправляє/приймає електронну пошту (SMTP)
  • MDA (Mail Delivery Agent): Dovecot LDA - доставляє в поштову скриньку
  • MUA (Mail User Agent): Thunderbird, Outlook - читає електронну пошту
  • IMAP/POP3 сервер: Dovecot - надає доступ до поштової скриньки

Конфігурація DNS для електронної пошти

Необхідні DNS записи

   DNS Records   

  example.com  

  A Record  

  mail.example.com  

  MX Record  

  Priority 10  

  SPF TXT  

  Sender validation  

  DKIM TXT  

  Signature key  

  PTR Record  

  Reverse DNS  

  Email Validation  

  Spam prevention  

Основні DNS записи:

# A запис - Вказує на IP поштового сервера
mail.example.com.     14400  IN  A      203.0.113.50

# MX запис - Поштовий обмінник
example.com.          14400  IN  MX     10 mail.example.com.

# SPF запис - Авторизовані сервери відправки
example.com.          14400  IN  TXT    "v=spf1 ip4:203.0.113.50 -all"

# DKIM запис - Підпис електронної пошти
default._domainkey.example.com.  IN  TXT  "v=DKIM1; k=rsa; p=MIGfMA0..."

# PTR запис - Зворотній DNS (встановлюється провайдером)
50.113.0.203.in-addr.arpa.  IN  PTR  mail.example.com.

# DMARC запис - Політика для невдалої аутентифікації
_dmarc.example.com.   14400  IN  TXT    "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"

Передумови:

  1. Статична IP адреса - Необхідна для поштового сервера
  2. Дійсне доменне ім'я - З доступом до управління DNS
  3. Зворотній DNS (PTR) - Має збігатися з прямим DNS
  4. IP не в чорному списку - Перевірте на mxtoolbox.com/blacklists.aspx
  5. Відкриті порти брандмауера - 25 (SMTP), 587 (submission), 143 (IMAP), 993 (IMAPS)

Встановлення Postfix (SMTP сервер)

Архітектура Postfix

   Postfix SMTP   

  Mail Client  

  master daemon  

  smtp process  

  Port 25  

  submission  

  Port 587  

  Mail Queue  

  /var/spool/postfix  

  Delivery  

Встановлення Postfix:

# Встановити Postfix (документація Postfix: http://www.postfix.org/documentation.html)
sudo apt install postfix

# Під час встановлення виберіть:
# - Загальний тип: Internet Site
# - Системне поштове ім'я: example.com

# Перевірити статус Postfix
systemctl status postfix

# Головний конфігураційний файл
sudo vim /etc/postfix/main.cf

Базова конфігурація Postfix (/etc/postfix/main.cf):

# Ім'я хоста та домен
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain

# Слухати на всіх інтерфейсах
inet_interfaces = all
inet_protocols = ipv4

# Довірені мережі
mynetworks = 127.0.0.0/8, 192.168.1.0/24

# Домени призначення (приймати пошту для)
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost

# Розташування поштової скриньки (формат Maildir)
home_mailbox = Maildir/

# SMTP банер
smtpd_banner = $myhostname ESMTP

# Обмеження розміру повідомлення (50MB)
message_size_limit = 52428800

# Перезапустити Postfix
sudo systemctl restart postfix

Конфігурація брандмауера:

# Дозволити SMTP порти
sudo ufw allow 25/tcp    # SMTP (вхідний)
sudo ufw allow 587/tcp   # Submission (вихідний з автентифікацією)
sudo ufw allow 465/tcp   # SMTPS (застарілий, використовуйте 587)

Автентифікація Postfix SMTP та TLS

Потік TLS шифрування

   TLS Encryption   

   STARTTLS   

  Email Client  

  SSL Certificate  

  Private Key  

  SASL Auth  

  Dovecot  

  Postfix SMTP  

  Port 587  

Налаштування TLS шифрування:

# Згенерувати самопідписаний сертифікат (для тестування)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/private/mail.key \
  -out /etc/ssl/certs/mail.crt

# Встановити права доступу
sudo chmod 600 /etc/ssl/private/mail.key

# Редагувати /etc/postfix/main.cf
sudo vim /etc/postfix/main.cf

# Додати налаштування TLS:
# TLS для вхідної пошти (SMTP на порту 25)
smtpd_tls_cert_file = /etc/ssl/certs/mail.crt
smtpd_tls_key_file = /etc/ssl/private/mail.key
smtpd_tls_security_level = may
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_ciphers = high
smtpd_tls_mandatory_ciphers = high

# TLS для вихідної пошти
smtp_tls_security_level = may
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_ciphers = high

Налаштування SMTP автентифікації (submission порт 587):

# Редагувати /etc/postfix/master.cf
sudo vim /etc/postfix/master.cf

# Увімкнути submission порт:
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject

# Перезапустити Postfix
sudo systemctl restart postfix

Встановлення Dovecot (IMAP/POP3 сервер)

Архітектура Dovecot

   Dovecot Server   

  Mail Client  

  Thunderbird  

  IMAP  

  Port 143/993  

  POP3  

  Port 110/995  

  Authentication  

  PAM/LDAP  

  Maildir  

  ~/Maildir  

Встановлення Dovecot:

# Встановити Dovecot з IMAP та POP3 (документація Dovecot: https://doc.dovecot.org/)
sudo apt install dovecot-core dovecot-imapd dovecot-pop3d

# Перевірити статус
systemctl status dovecot

# Головна конфігурація
ls /etc/dovecot/
ls /etc/dovecot/conf.d/

Розташування пошти Dovecot (/etc/dovecot/conf.d/10-mail.conf):

sudo vim /etc/dovecot/conf.d/10-mail.conf

# Встановити формат та розташування поштової скриньки
mail_location = maildir:~/Maildir

# Права доступу до поштової скриньки
mail_privileged_group = mail

Автентифікація Dovecot (/etc/dovecot/conf.d/10-auth.conf):

sudo vim /etc/dovecot/conf.d/10-auth.conf

# Увімкнути автентифікацію plain text (тільки через TLS)
disable_plaintext_auth = yes
auth_mechanisms = plain login

Dovecot SSL/TLS (/etc/dovecot/conf.d/10-ssl.conf):

sudo vim /etc/dovecot/conf.d/10-ssl.conf

# Увімкнути SSL/TLS
ssl = yes
ssl_cert = </etc/ssl/certs/mail.crt
ssl_key = </etc/ssl/private/mail.key

# Вимкнути старі протоколи
ssl_min_protocol = TLSv1.2
ssl_cipher_list = HIGH:!aNULL:!MD5
ssl_prefer_server_ciphers = yes

Увімкнути Postfix SASL автентифікацію (/etc/dovecot/conf.d/10-master.conf):

sudo vim /etc/dovecot/conf.d/10-master.conf

# Розкоментувати та налаштувати:
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

Перезапустити сервіси:

sudo systemctl restart dovecot
sudo systemctl restart postfix

# Відкрити IMAP/POP3 порти
sudo ufw allow 143/tcp   # IMAP
sudo ufw allow 993/tcp   # IMAPS (IMAP через SSL)
sudo ufw allow 110/tcp   # POP3
sudo ufw allow 995/tcp   # POP3S (POP3 через SSL)

Конфігурація SPF, DKIM та DMARC

Потік автентифікації електронної пошти

   pass   

   fail   

  Sender Server  

  SPF Check  

  Authorized IP?  

  DKIM Check  

  Valid signature?  

  DMARC Policy  

  Action on fail  

  Inbox  

  Spam/Reject  

Конфігурація SPF (DNS TXT запис):

# Дозволити пошту тільки з IP вашого сервера (документація SPF: https://www.rfc-editor.org/rfc/rfc7208.html)
example.com.  IN  TXT  "v=spf1 ip4:203.0.113.50 -all"

# Дозволити пошту з вашого сервера та Google (якщо використовуєте Gmail)
example.com.  IN  TXT  "v=spf1 ip4:203.0.113.50 include:_spf.google.com -all"

# Механізми SPF:
# ip4:IP - авторизувати IPv4 адресу
# ip6:IP - авторизувати IPv6 адресу
# a - авторизувати IP з A запису
# mx - авторизувати IP з MX запису
# include:domain - включити SPF іншого домену
# -all - відхилити всі інші (суворо)
# ~all - м'яке відхилення всіх інших (рекомендовано)

Конфігурація DKIM:

# Встановити OpenDKIM (документація DKIM: http://www.opendkim.org/)
sudo apt install opendkim opendkim-tools

# Згенерувати DKIM ключі
sudo mkdir -p /etc/opendkim/keys/example.com
sudo opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys/example.com -s default -v

# Встановити права доступу
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod 600 /etc/opendkim/keys/example.com/default.private

# Переглянути публічний ключ для DNS
sudo cat /etc/opendkim/keys/example.com/default.txt

# Додати в DNS як TXT запис:
default._domainkey.example.com.  IN  TXT  "v=DKIM1; k=rsa; p=MIGfMA0GCS..."

# Налаштувати OpenDKIM
sudo vim /etc/opendkim.conf

# Конфігурація:
Syslog                  yes
UMask                   002
Domain                  example.com
Selector                default
KeyFile                 /etc/opendkim/keys/example.com/default.private
Socket                  inet:8891@localhost

# Налаштувати Postfix для використання DKIM
sudo vim /etc/postfix/main.cf

# Додати:
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

# Перезапустити сервіси
sudo systemctl restart opendkim
sudo systemctl restart postfix

Конфігурація DMARC (DNS TXT запис):

# DMARC політика (документація DMARC: https://www.rfc-editor.org/rfc/rfc7489.html)
_dmarc.example.com.  IN  TXT  "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com; ruf=mailto:dmarc-forensics@example.com; pct=100"

# Параметри DMARC:
# p=none - тільки моніторинг (без дій)
# p=quarantine - відправити в спам
# p=reject - відхилити повідомлення
# rua= - агреговані звіти
# ruf= - криміналістичні звіти
# pct= - відсоток повідомлень для застосування політики (100 = всі)

Вебпошта з Roundcube

Архітектура Roundcube

   Roundcube Webmail   

  Web Browser  

  Apache/Nginx  

  PHP  

  Roundcube App  

  MySQL Database  

  Config, contacts  

  Dovecot IMAP  

  Postfix SMTP  

Встановлення Roundcube:

# Встановити Apache, PHP та залежності
sudo apt install apache2 php php-mysql php-json php-mbstring php-xml php-zip php-curl php-intl

# Встановити Roundcube
sudo apt install roundcube roundcube-mysql

# Під час встановлення:
# - Налаштувати базу даних: Так
# - Тип бази даних: mysql
# - Пароль бази даних: [встановити пароль]

# Налаштувати Apache для Roundcube
sudo vim /etc/apache2/conf-available/roundcube.conf

# Додати:
Alias /roundcube /usr/share/roundcube

<Directory /usr/share/roundcube>
    Options +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

# Увімкнути конфігурацію
sudo a2enconf roundcube
sudo systemctl reload apache2

# Доступ до Roundcube за адресою:
# http://mail.example.com/roundcube

Конфігурація Roundcube (/etc/roundcube/config.inc.php):

<?php
// IMAP сервер
$config['default_host'] = 'ssl://mail.example.com';
$config['default_port'] = 993;

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

// Назва продукту
$config['product_name'] = 'Example Mail';

// Плагіни
$config['plugins'] = array('archive', 'zipdownload', 'password');
?>

Тестування поштового сервера

Тестування SMTP локально:

# Відправити тестовий email
echo "Test message" | mail -s "Test Subject" user@example.com

# Перевірити чергу пошти
mailq
postqueue -p

# Перевірити логи
sudo tail -f /var/log/mail.log
sudo tail -f /var/log/mail.err

# Тестування SMTP з'єднання
telnet mail.example.com 25

# Тестування submission з автентифікацією
openssl s_client -connect mail.example.com:587 -starttls smtp

Тестування з зовнішніх серверів:

# Пошук MX запису
dig MX example.com

# Перевірка SPF запису
dig TXT example.com

# Перевірка DKIM запису
dig TXT default._domainkey.example.com

# Тестування зовнішніми інструментами:
# - mxtoolbox.com - комплексне тестування електронної пошти
# - mail-tester.com - тестування спам-балу

Найкращі практики для продакшну

  1. Конфігурація DNS:

    • Завжди налаштовуйте PTR (зворотній DNS)
    • Впроваджуйте SPF, DKIM та DMARC
    • Моніторте DMARC звіти
    • Тримайте DNS TTL розумним (14400)
  2. Безпека:

    • Завжди використовуйте TLS шифрування
    • Вимагайте SMTP автентифікацію на порту 587
    • Вимикайте plain text автентифікацію крім як через TLS
    • Впроваджуйте fail2ban для захисту від брутфорсу
    • Регулярні оновлення безпеки
  3. Запобігання спаму:

    • Налаштуйте SpamAssassin
    • Впроваджуйте greylisting
    • Використовуйте RBL (Real-time Blackhole Lists)
    • Моніторте логи пошти на зловживання
  4. Продуктивність:

    • Використовуйте формат Maildir (краще ніж mbox)
    • Впроваджуйте квоти пошти
    • Налаштуйте обмеження розміру повідомлень
    • Моніторте використання диску
  5. Резервне копіювання:

    • Регулярні резервні копії поштових скриньок
    • Резервні копії конфігурацій
    • Тестуйте процедури відновлення
    • Документуйте всі налаштування

Усунення поширених проблем

Пошта не приймається:

# Перевірити чи Postfix слухає
sudo ss -tlnp | grep :25

# Перевірити DNS MX записи
dig MX example.com

# Перевірити чи порт 25 заблокований провайдером
telnet mail.example.com 25

# Перевірити логи Postfix
sudo tail -f /var/log/mail.log | grep -i error

Пошта відправляється в спам:

# Перевірити SPF запис
dig TXT example.com

# Перевірити DKIM підпис
sudo journalctl -u opendkim -f

# Перевірити зворотній DNS
dig -x 203.0.113.50

# Тестування на mail-tester.com
# Відправити email на згенеровану адресу

Невдача автентифікації:

# Перевірити Dovecot SASL
sudo doveadm auth test user@example.com

# Перевірити Postfix SASL
sudo postconf smtpd_sasl_auth_enable

# Перевірити логи
sudo tail -f /var/log/mail.log | grep auth

Проблеми з TLS сертифікатом:

# Тестування TLS з'єднання
openssl s_client -connect mail.example.com:993
openssl s_client -connect mail.example.com:587 -starttls smtp

# Перевірити дати сертифіката
openssl x509 -in /etc/ssl/certs/mail.crt -noout -dates

# Перевірити ланцюжок сертифікатів
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/mail.crt

Висновок

Конфігурація поштової служби Linux вимагає правильного налаштування Postfix SMTP, Dovecot IMAP/POP3, DNS записів та заходів безпеки. Розуміння архітектури MTA/MDA, автентифікації SPF/DKIM/DMARC, TLS шифрування та інтеграції вебпошти є необхідним для надійної доставки електронної пошти.

Вибирайте відповідні конфігурації: Postfix для SMTP з TLS, Dovecot для доступу до поштової скриньки, повне налаштування DNS з SPF/DKIM/DMARC та Roundcube для вебпошти. Впроваджуйте найкращі практики безпеки, моніторте доставляємість та підтримуйте регулярні резервні копії для продакшн поштових систем.


Часті запитання

П: Яка різниця між Postfix та Dovecot?

Postfix - це MTA (Mail Transfer Agent), що обробляє SMTP для відправлення та отримання email між серверами. Dovecot - це MDA (Mail Delivery Agent), що надає IMAP та POP3 для доступу користувачів до поштових скриньок. Postfix отримує пошту та передає в Dovecot для зберігання. Використовуйте обидва разом для повної функціональності поштового сервера.

П: Що таке SPF, DKIM та DMARC записи?

SPF (Sender Policy Framework) перелічує авторизовані поштові сервери в DNS TXT записах. DKIM (DomainKeys Identified Mail) криптографічно підписує email приватними ключами, що перевіряються публічними DNS записами. DMARC (Domain-based Message Authentication) визначає політики для невдач SPF/DKIM. Разом вони запобігають підробці email та покращують доставляємість.

П: Як налаштувати TLS шифрування для email?

Налаштуйте TLS в Postfix з smtpd_tls_cert_file та smtpd_tls_key_file, що вказують на сертифікати. Увімкніть через smtpd_use_tls=yes для опціонального або smtpd_enforce_tls_security=yes для обов'язкового. Налаштуйте Dovecot з ssl=yes та директивами ssl_cert/ssl_key. Використовуйте Let's Encrypt сертифікати для безкоштовних довірених TLS сертифікатів.

П: Які порти використовують поштові служби?

SMTP використовує порт 25 для сервер-сервер, 587 для автентифікованої відправки з STARTTLS та 465 для SMTPS. IMAP використовує 143 для незахищеного та 993 для SSL/TLS. POP3 використовує 110 для незахищеного та 995 для SSL/TLS. Сучасні сервери повинні використовувати виключно зашифровані порти 587, 993 та 995.

П: Як працює автентифікація email з SASL?

SASL (Simple Authentication and Security Layer) забезпечує автентифікацію для SMTP відправки. Dovecot SASL автентифікує користувачів проти системних облікових записів або баз даних. Postfix інтегрується з Dovecot SASL для перевірки облікових даних перед прийняттям пошти. Налаштуйте через smtpd_sasl_auth_enable=yes та smtpd_sasl_type=dovecot. Вимагає TLS для захисту облікових даних.

П: Чому мої email потрапляють в спам?

Email потрапляють в спам через відсутність SPF/DKIM/DMARC записів, відсутність зворотнього DNS, репутацію спільного IP, погану якість вмісту або невалідні TLS сертифікати. Тестуйте через mail-tester.com для оцінки. Налаштуйте правильну DNS автентифікацію, використовуйте виділені IP, поступово підвищуйте репутацію IP та уникайте спам-слів.

П: Як налаштувати вебпошту з Roundcube?

Встановіть Roundcube через менеджер пакетів або завантажте з roundcube.net. Налаштуйте віртуальний хост Apache/Nginx, що вказує на директорію Roundcube. Налаштуйте параметри бази даних в config/config.inc.php. Встановіть IMAP/SMTP сервер на localhost. Увімкніть плагіни в config. Доступ через браузер за https://mail.example.com/roundcube. Захистіть через HTTPS сертифікати.