Подробный гайд: настройка почтового сервера на CentOS 9

Настройка почтового сервера CentOS 9: Postfix, Dovecot, Rspamd, SSL/TLS, DKIM, SPF. Пошаговый гайд для безопасной отправки и приёма почты.

2026.05.10                  


Подробный гайд: настройка почтового сервера на CentOS 9Подробный гайд: настройка почтового сервера на CentOS 9

Важно:

Почтовый сервер критически зависит от DNS, обратного PTR-записи и корректной настройки TLS. Без этого письма будут уходить в спам или отклоняться. Рекомендую сначала отработать инструкцию на тестовой ВМ.


1. Предварительные требования

  • Чистая установка CentOS Stream 9 с доступом root или sudo
  • Статический публичный IP-адрес
  • Доменное имя с доступом к управлению DNS-зоной
  • Настроенная PTR (reverse DNS) запись у хостинг-провайдера: IP → mail.вашдомен.com
  • Открытые порты: 25, 587, 993, 995, 80, 443 (80 нужен для Let's Encrypt)

2. Подготовка DNS (обязательно до настройки сервера)

В панели управления DNS добавьте записи:

Тип Имя Значение
A mail Ваш_IP
MX @ 10 mail.вашдомен.com.
TXT @ v=spf1 mx ip4:Ваш_IP ~all
TXT _dmarc v=DMARC1; p=none; rua=mailto:admin@вашдомен.com

(DKIM будет добавлен позже, после генерации ключей)


3. Установка пакетов

sudo dnf update -y
sudo dnf install epel-release -y
sudo dnf install postfix dovecot rspamd certbot fail2ban -y
sudo systemctl enable --now postfix dovecot rspamd

4. Настройка Postfix (MTA)

Редактируем основной конфиг:

sudo nano /etc/postfix/main.cf

Добавьте/измените параметры:

# Идентификация
myhostname = mail.вашдомен.com
mydomain = вашдомен.com
myorigin = $mydomain

# Сетевые параметры
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8, [::1]/128

# Формат ящика
home_mailbox = Maildir/

# SASL через Dovecot
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

# TLS
smtpd_tls_security_level = may
smtp_tls_security_level = may
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.вашдомен.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.вашдомен.com/privkey.pem
smtp_tls_CAfile = /etc/letsencrypt/live/mail.вашдомен.com/chain.pem
tls_preempt_cipherlist = yes

# Ограничения
smtpd_helo_required = yes
disable_vrfy_command = yes
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Проверьте конфиг и перезапустите:

sudo postfix check
sudo systemctl reload postfix

5. Настройка Dovecot (IMAP/POP3 + SASL)

5.1 Основной конфиг

sudo nano /etc/dovecot/dovecot.conf
protocols = imap lmtp
listen = *, ::

5.2 Аутентификация

sudo nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-system.conf.ext

5.3 Интеграция SASL с Postfix

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

Найдите блок service auth и замените на:

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
    mode = 0600
    user = dovecot
  }
}

5.4 TLS

sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.вашдомен.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.вашдомен.com/privkey.pem
ssl_min_protocol = TLSv1.2
ssl_cipher_list = EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS

5.5 Перезапуск

sudo systemctl reload dovecot

6. Получение SSL-сертификата (Let's Encrypt)

Важно:

Порт 80 должен быть свободен. Если установлен Nginx/Apache, используйте --webroot или временно остановите веб-сервер.

sudo certbot certonly --standalone -d mail.вашдомен.com

Настройте автообновление с перезагрузкой служб:

sudo nano /etc/letsencrypt/renewal-hooks/deploy/mail-reload.sh
#!/bin/bash
systemctl reload postfix dovecot
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/mail-reload.sh
sudo crontab -e
# Добавьте: 0 3 * * 1 /usr/bin/certbot renew --quiet

7. Фильтрация спама и проверка DKIM (Rspamd)

Rspamd заменяет старые связки Amavis/SpamAssassin/ClamAV, работает быстрее и проще в настройке.

7.1 Интеграция с Postfix

В /etc/postfix/main.cf добавьте:

smtpd_milters = inet:127.0.0.1:11332
non_smtpd_milters = inet:127.0.0.1:11332
milter_default_action = accept
milter_protocol = 6
sudo systemctl reload postfix

7.2 Генерация DKIM-ключа

sudo rspamadm dkim_keygen -d вашдомен.com -s default

Вывод будет содержать приватный ключ и DNS-запись.

  1. Сохраните приватный ключ: sudo tee /var/lib/rspamd/dkim/вашдомен.com.default.key
  2. В DNS добавьте TXT-запись: default._domainkey.вашдомен.comv=DKIM1; k=rsa; p=MIIBIjANBgk...

7.3 Включение подписи DKIM в Rspamd

sudo nano /etc/rspamd/local.d/dkim_signing.conf
path = "/var/lib/rspamd/dkim/$domain.$selector.key";
selector = "default";
allow_username_mismatch = true;
sudo systemctl reload rspamd

8. Firewall и SELinux

8.1 Firewalld

sudo firewall-cmd --permanent --add-service={smtp,smtps,imap,imaps}
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=11334/tcp
sudo firewall-cmd --reload

8.2 SELinux

CentOS 9 работает с SELinux в enforcing.

Разрешаем работу почтовых сервисов:

sudo setsebool -P postfix_local_write_mail_home on
sudo setsebool -P dovecot_can_network_connect on
sudo setsebool -P httpd_can_network_connect on

Если в логах audit.log появляются AVC denied, используйте:

sudo ausearch -c 'postfix' --raw | audit2allow -M mypostfix
sudo semodule -i mypostfix.pp

9. Fail2ban (защита от перебора)

Создайте фильтр для Dovecot и Postfix:

sudo nano /etc/fail2ban/filter.d/dovecot.conf
[Definition]
failregex = ^.*%(__prefix_line)s(?:Error: )?auth: (?:plain|login).*authentication failure.*rip=<HOST>

Активируйте в /etc/fail2ban/jail.local:

[dovecot]
enabled = true
port = imap,imaps,submission,smtps
filter = dovecot
logpath = /var/log/maillog
maxretry = 5
bantime = 3600
findtime = 600

[postfix-sasl]
enabled = true
port = smtp,submission,imap,imaps
filter = postfix-sasl
logpath = /var/log/maillog
maxretry = 5
sudo systemctl enable --now fail2ban
sudo fail2ban-client status

10. Тестирование

1. SMTP отправка (используйте swaks или онлайн-сервисы):
   sudo dnf install swaks -y
   swaks --to test@вашдомен.com --from test@вашдомен.com --server localhost --auth LOGIN --auth-user ваш_логин --auth-pass ваш_пароль
2. IMAP подключение:
   openssl s_client -connect localhost:993
3. Проверка доставки и репутации:
  • Отправьте письмо на check-auth@verifier.port25.com (ответ придёт с анализом SPF/DKIM/DMARC)
  • Используйте mail-tester.com
4. Логи:
   sudo journalctl -u postfix -f
   sudo journalctl -u dovecot -f
   sudo tail -f /var/log/maillog

11. Рекомендации для production

Аспект Рекомендация
Пользователи Для >10 ящиков используйте виртуальные домены: PostfixAdmin + MariaDB + Dovecot auth-sql
Резервные копии rsync или borg для /var/mail и /etc/postfix, /etc/dovecot, /etc/rspamd
Мониторинг prometheus + node_exporter + dovecot_exporter, логи через vector/rsyslog
Обновления dnf automatic + yum-cron, тестируйте обновления в staging
Репутация Следите за чёрными списками (MXToolbox, Spamhaus), настройте bounce и postmaster@
Веб-почта Roundcube (sudo dnf install roundcube) или Snappymail, работает поверх PHP-FPM/Nginx

Полезные команды

Задача Команда
Просмотр очереди писем mailq
Удалить все из очереди sudo postsuper -d ALL
Перечитать конфиг Postfix sudo postfix reload
Управление ящиками Dovecot doveadm user '*', doveadm mailbox list -u user
Проверка DKIM/SPF dig TXT default._domainkey.вашдомен.com
Просмотр логов Rspamd sudo journalctl -u rspamd -f