*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 та мінімальну поштову утиліту. Під час налаштування виберіть «Інтернет-сайт» та встановіть ім’я системної пошти як 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 ваш запис DNS A повинен вже вказувати на цей сервер. Якщо ви не можете відкрити порт 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 і увімкніть службу надсилання (та, за бажанням, smtps 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: відкрийте /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 в обмеженнях).
  • Використовуйте 587 auth TLS для користувачів/додатків. Уникайте надсилання пошти з порту 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