
Запустить собственный почтовый сервер вполне возможно, но «он работает» и «он доставляется в папку «Входящие»» — это две разные вещи. Доставляемость зависит от репутации вашего IP-адреса, правильной настройки DNS (SPF/DKIM/DMARC) и обратного DNS (PTR). В этом руководстве представлена базовая конфигурация: Postfix, TLS, аутентифицированная отправка (опционально) и Dovecot для IMAP.
Для стабильной работы и полного контроля над сетью (PTR/rDNS, правила брандмауэра, порты) начните с «чистого» VPS на Linux или выберите масштабируемый VPS-хостинг, если ожидаете роста и вам понадобятся дополнительные ресурсы в будущем.
Используйте Ubuntu 22.04/24.04 LTS (рекомендуется). Замените example.com на свой домен и mail.example.com на имя хоста вашего сервера.
sudo -i
apt update && apt -y upgrade
apt -y install ca-certificates curl ufw nano unzip dnsutils
# Set hostname
hostnamectl set-hostname mail.example.com
# Make sure /etc/hosts has a local mapping (adjust IP if needed)
nano /etc/hosts
# Set timezone (pick yours)
timedatectl set-timezone Europe/Kyiv
timedatectl status
Минимальный безопасный набор: SSH, SMTP (25) для входящей почты и Submission (587) для отправки с аутентификацией. Если вы добавляете Dovecot IMAP, откройте также порт 993.
ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw allow 25/tcp
ufw allow 587/tcp
# Optional (IMAPS)
ufw allow 993/tcp
ufw enable
ufw status verbose
Установите Postfix и минимальную почтовую утилиту. Во время настройки выберите «Internet Site» и установите системное имя почты как example.com.
apt -y install postfix mailutils
systemctl enable --now postfix
systemctl status postfix --no-pager
# See active Postfix settings
postconf -n
Эти настройки являются практическим базовым набором, позволяющим избежать превращения в открытый ретранслятор и обеспечить поддержку аутентифицированной отправки в будущем.
postconf -e "myhostname = mail.example.com"
postconf -e "mydomain = example.com"
postconf -e "myorigin = $mydomain"
postconf -e "inet_interfaces = all"
postconf -e "inet_protocols = all"
postconf -e "mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain"
# Only local networks are trusted
postconf -e "mynetworks = 127.0.0.0/8 [::1]/128"
# IMPORTANT: relay restrictions (prevents open relay)
postconf -e "smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination"
postconf -e "smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination"
systemctl restart postfix
postconf -n | sed -n '1,120p'
Для Let’s Encrypt ваш A-запись DNS должна уже указывать на этот сервер. Если вы не можете открыть порт 80, используйте вместо этого DNS-проверку; ниже приведен самый простой «автономный» алгоритм.
# Temporarily allow port 80 for cert issuing
ufw allow 80/tcp
apt -y install certbot
certbot certonly --standalone -d mail.example.com
# Tighten firewall after issuance if you don’t host a website
ufw delete allow 80/tcp
# Configure Postfix TLS
postconf -e "smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem"
postconf -e "smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem"
postconf -e "smtpd_tls_security_level = may"
postconf -e "smtp_tls_security_level = may"
postconf -e "smtpd_tls_loglevel = 1"
postconf -e "smtpd_tls_protocols = !SSLv2, !SSLv3"
postconf -e "smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3"
systemctl restart postfix
Порт 25 предназначен для обмена почтой между серверами. Для пользователей/приложений используйте порт 587 с аутентификацией TLS. Это снижает количество злоупотреблений и улучшает доставляемость.
Отредактируйте /etc/postfix/master.cf и включите службу отправки (а также, по желанию, SMTP-сервер 465). Не усложняйте: разрешайте доступ только аутентифицированным пользователям.
nano /etc/postfix/master.cf
Добавьте или раскомментируйте этот блок (скорректируйте, если он уже существует):
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
Если вам нужна только отправка для приложений, вы можете пропустить IMAP. Если вы хотите настоящие почтовые ящики (Thunderbird/Outlook/веб-почта), установите Dovecot и используйте IMAPS (993).
apt -y install dovecot-imapd dovecot-pop3d
systemctl enable --now dovecot
systemctl status dovecot --no-pager
Установите формат Maildir и включите безопасную аутентификацию:
# Mail location
nano /etc/dovecot/conf.d/10-mail.conf
# Set:
# mail_location = maildir:~/Maildir
# Authentication (recommended)
nano /etc/dovecot/conf.d/10-auth.conf
# Ensure:
# disable_plaintext_auth = yes
# auth_mechanisms = plain login
Откройте сокет аутентификации Dovecot для Postfix SASL:
nano /etc/dovecot/conf.d/10-master.conf
# In the service auth section, ensure you have:
# unix_listener /var/spool/postfix/private/auth {
# mode = 0660
# user = postfix
# group = postfix
# }
Включите SASL в Postfix и перезапустите обе службы:
postconf -e "smtpd_sasl_type = dovecot"
postconf -e "smtpd_sasl_path = private/auth"
postconf -e "smtpd_sasl_auth_enable = yes"
postconf -e "smtpd_tls_auth_only = yes"
systemctl restart dovecot
systemctl restart postfix
Без правильного DNS ваша почта часто будет попадать в спам (или отклоняться). Используйте следующие базовые записи (приведены примеры).
| Запись | Имя | Значение (пример) | Примечания |
|---|---|---|---|
| A | 203.0.113.10 | mail.example.com → IP-адрес сервера | |
| MX | @ | mail.example.com | Приоритет 10 |
| PTR | 203.0.113.10 | mail.example.com | Устанавливается в панели VPS/провайдера |
| TXT (SPF) | @ | v=spf1 mx a ip4:203.0.113.10 -all | Измените IP-адреса по необходимости |
| TXT (DMARC) | _dmarc | v=DMARC1; p=none; rua=mailto:dmarc@example.com; fo=1 | Начните с p=none, затем ужесточите настройки |
DKIM добавляет криптографическую подпись к исходящей почте. Получатели используют ее, чтобы убедиться, что сообщения не подделаны и не были изменены при передаче.
apt -y install opendkim opendkim-tools
mkdir -p /etc/opendkim/keys/example.com
opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com -s mail
chown -R opendkim:opendkim /etc/opendkim/keys/example.com
chmod 750 /etc/opendkim/keys/example.com
chmod 640 /etc/opendkim/keys/example.com/mail.private
Создайте таблицы для ключей и подписи:
nano /etc/opendkim/KeyTable
# Add:
# mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private
nano /etc/opendkim/SigningTable
# Add:
# *@example.com mail._domainkey.example.com
nano /etc/opendkim/TrustedHosts
# Add:
# 127.0.0.1
# localhost
# *.example.com
Сделайте сокет OpenDKIM доступным для Postfix (smtpd в Ubuntu обычно работает в chroot-среде). Используйте сокет внутри очереди Postfix:
mkdir -p /var/spool/postfix/opendkim
chown opendkim:postfix /var/spool/postfix/opendkim
chmod 750 /var/spool/postfix/opendkim
nano /etc/opendkim.conf
# Ensure these lines exist / match:
# Socket local:/var/spool/postfix/opendkim/opendkim.sock
# KeyTable /etc/opendkim/KeyTable
# SigningTable refile:/etc/opendkim/SigningTable
# ExternalIgnoreList /etc/opendkim/TrustedHosts
# InternalHosts /etc/opendkim/TrustedHosts
Подключите DKIM-модуль в Postfix:
postconf -e "milter_default_action = accept"
postconf -e "milter_protocol = 6"
postconf -e "smtpd_milters = unix:opendkim/opendkim.sock"
postconf -e "non_smtpd_milters = $smtpd_milters"
systemctl restart opendkim
systemctl restart postfix
Добавьте запись DKIM в DNS: open /etc/opendkim/keys/example.com/mail.txt и опубликуйте его значение TXT как mail._domainkey для вашего домена.
Сначала проверьте журналы — они точно покажут, в чём проблема.
tail -n 200 /var/log/mail.log
postqueue -p
mailq
Установите swaks для тестирования чистого SMTP (отлично подходит для отладки отправки по порту 587):
apt -y install swaks
# Example (replace values). Use 587 with TLS:
swaks --to you@example.net --from test@example.com
--server mail.example.com --port 587 --tls
--auth LOGIN --auth-user testuser --auth-password 'StrongPassword'
reject_unauth_destination внутренние ограничения)./etc/postfix, /etc/dovecot, /etc/opendkimи ваши сертификаты Let’s Encrypt.Если вы создаете почтовую инфраструктуру для проекта, начните со стабильного VPS на Linux (с полным root-доступом и предсказуемыми ресурсами). Для масштабирования и обновлений без проблем с миграцией рассмотрите VPS-хостинг.