
Запустити власний поштовий сервер цілком можливо, але «він працює» і «листи доходять до папки «Вхідні»» — це дві різні речі. Доставляння залежить від репутації вашої 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 та мінімальну поштову утиліту. Під час налаштування виберіть «Інтернет-сайт» та встановіть ім’я системної пошти як 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 ваш запис 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
Порт 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
Якщо вам потрібна лише відправка для додатків, ви можете пропустити 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: відкрийте /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-хостинг.