*Cube-Host– облачный хостинг!!

Как настроить собственный почтовый сервер Postfix на VPS с Ubuntu: пошаговая инструкция

How to set up your own Postfix mail server on VPS UBUNTU: step by step

Доставка электронной почты на VPS с Ubuntu: с чего начать

Запустить собственный почтовый сервер вполне возможно, но «он работает» и «он доставляется в папку «Входящие»» — это две разные вещи. Доставляемость зависит от репутации вашего IP-адреса, правильной настройки DNS (SPF/DKIM/DMARC) и обратного DNS (PTR). В этом руководстве представлена базовая конфигурация: Postfix, TLS, аутентифицированная отправка (опционально) и Dovecot для IMAP.

Для стабильной работы и полного контроля над сетью (PTR/rDNS, правила брандмауэра, порты) начните с «чистого» VPS на Linux или выберите масштабируемый VPS-хостинг, если ожидаете роста и вам понадобятся дополнительные ресурсы в будущем.

Прежде чем начать: 7 факторов, определяющих работоспособность почты

  • Статический публичный IP (почтовые серверы плохо сочетаются с часто меняющимися IP-адресами).
  • Доменное имя, которым вы управляете (example.com), и выделенное имя хоста (mail.example.com).
  • Обратный DNS (PTR) должен указывать на mail.example.com (настраивается в панели провайдера/в службе поддержки).
  • Доступность порта 25: многие провайдеры VPS ограничивают исходящий трафик по порту 25 для борьбы со спамом. Если порт заблокирован, вам понадобится провайдер ретрансляции (smarthost) или необходимо будет запросить разблокировку.
  • Правильное системное время (TLS и DKIM чувствительны к отклонению времени).
  • Политика брандмауэра: открывайте только необходимые порты (25/587 и 993, если вы используете IMAP).
  • Реалистичные ожидания: для нового IP может потребоваться время на формирование репутации; всегда постепенно увеличивайте объемы рассылки.

Шаг 1 — Подготовьте Ubuntu и установите правильное имя хоста

Используйте 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

Шаг 2 — Откройте только необходимые порты (UFW)

Минимальный безопасный набор: 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

Шаг 3 — Установите Postfix и убедитесь, что он работает

Установите 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

Шаг 4 — Установите базовую безопасную конфигурацию Postfix (без открытого ретранслятора)

Эти настройки являются практическим базовым набором, позволяющим избежать превращения в открытый ретранслятор и обеспечить поддержку аутентифицированной отправки в будущем.

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'

Шаг 5 — Сертификаты TLS (Let’s Encrypt) для безопасной отправки

Для 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

Шаг 6 — Включение отправки с аутентификацией по порту 587 (рекомендуется)

Порт 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

Шаг 7 — Добавьте IMAP (необязательно): Dovecot для доступа к почтовым ящикам

Если вам нужна только отправка для приложений, вы можете пропустить 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

Шаг 8 — Записи DNS для доставки (A, MX, SPF, DKIM, DMARC, PTR)

Без правильного DNS ваша почта часто будет попадать в спам (или отклоняться). Используйте следующие базовые записи (приведены примеры).

ЗаписьИмяЗначение (пример)Примечания
Amail203.0.113.10mail.example.com → IP-адрес сервера
MX@mail.example.comПриоритет 10
PTR203.0.113.10mail.example.comУстанавливается в панели VPS/провайдера
TXT (SPF)@v=spf1 mx a ip4:203.0.113.10 -allИзмените IP-адреса по необходимости
TXT (DMARC)_dmarcv=DMARC1; p=none; rua=mailto:dmarc@example.com; fo=1Начните с p=none, затем ужесточите настройки

Шаг 9 — Подпись DKIM с помощью OpenDKIM (рекомендуется)

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 для вашего домена.

Шаг 10 — Тестирование и устранение неполадок

Сначала проверьте журналы — они точно покажут, в чём проблема.

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 внутренние ограничения).
  • Используйте аутентификацию TLS по порту 587 для пользователей/приложений. Избегайте отправки почты с порта 25 с использованием учетных данных приложения.
  • Включите Fail2Ban для sshd/postfix/dovecot и отслеживайте попытки брутфорса.
  • Ограничьте количество портов до минимума: 25, 587, (993, если используется IMAP). Не допускайте передачи данных POP3/IMAP в виде открытого текста.
  • Делайте резервные копии конфигураций: /etc/postfix, /etc/dovecot, /etc/opendkimи ваши сертификаты Let’s Encrypt.
  • Постепенно увеличивайте объем отправляемой почты и отслеживайте отказы/жалобы на спам (репутация имеет значение).

Нужен сервер, готовый для Postfix?

Если вы создаете почтовую инфраструктуру для проекта, начните со стабильного VPS на Linux (с полным root-доступом и предсказуемыми ресурсами). Для масштабирования и обновлений без проблем с миграцией рассмотрите VPS-хостинг.

Prev
Menu