Part 1. Введение.
Part 2. DBMail.
Part 3. Postfix.
Part 4. SASL.
Part 5. SPF. DKIM. DMARC. Очистка заголовков. DNS PTR.
Установите postfix выбрав опцию No configuration.
apt install postfix
Отредактируйте конфиг /etc/postfix/main.cf.
mydomain = somewhere-in-the.space myhostname = mail.somewhere-in-the.space #disable /etc/aliases files lookup, all users are stored inside DB alias_maps = alias_database = mydestination = $mydomain, localhost, localhost.localdomain, localhost relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = all smtpd_banner = $myhostname ESMTP biff = no compatibility_level = 2 smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination smtpd_tls_cert_file = /etc/letsencrypt/live/mail.somewhere-in-the.space/fullchain.pem smtpd_tls_key_file = /etc/letsencrypt/live/mail.somewhere-in-the.space/privkey.pem smtp_use_tls=yes smtp_tls_security_level=may smtpd_use_tls=yes smtpd_tls_security_level=encrypt smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Отредактируйте файл /etc/postfix/master.cf и добавьте следующую строку в конец. Это включит использование TLS на порте 587.
submission inet n - y - - smtpd
Отредактируйте файл /etc/letsencrypt/cli.ini, чтобы postfix перезапускался после каждого обновления сертификатов.
post-hook = /bin/chmod -R 640 /etc/letsencrypt/archive/ > /dev/null 2>&1 && /bin/systemctl restart dbmail && /bin/systemctl restart postfix
Postfix может быть сконфигурирован на использование SMTP или LMTP протоколов. Оффициальные мануалы DBMail перестали быть актуальными, поэтому воспользуйтесь моими. Выберите один из вариантов и продолжите.
Вариант 1. SMTP.
Простейший вариант. Postfix’у не нужно подключение к БД для проверки пользователей, но процесс dbmail-deliver (ранее dbmail-smtp), в отличие от LMTP, будет создавать подключение к БД для каждого входящего письма — это уменьшает производительность сервера по сравнению с LMTP.
Добавьте следующие строки в файл /etc/postfix/master.cf.
dbmail-smtp unix - n n - - pipe flags= user=dbmail:dbmail argv=/usr/sbin/dbmail-deliver -f /etc/dbmail/dbmail.conf -d ${recipient} -r ${sender}
Добавьте следующие строки в файл /etc/postfix/main.cf.
mailbox_transport = dbmail-smtp: local_recipient_maps =
Вариант 2. LMTP.
Включите демон DBMail LMTP в файле /etc/default/dbmail.
START_LMTPD=true
Добавьте следующие строки в файл /etc/dbmail/dbmail.conf.
[LMTP] port = 24
Перезапустите DBMail чтобы демон LMTP стартанул.
systemctl restart dbmail
Установите расширение postfix для подключения к PostgreSQL.
apt install postfix-pgsql
Добавьте следующую строку в файл /etc/postfix/master.cf.
dbmail-lmtp unix - - n - - lmtp
Создайте файл /etc/postfix/recipient_map.cf.
user = dbmail password = db_user_password hosts = 127.0.0.1:5432 dbname = dbmail query = SELECT DISTINCT 1 FROM dbmail_aliases WHERE alias='%s';
Добавьте следующие строки в файл /etc/postfix/main.cf.
mailbox_transport = dbmail-lmtp:127.0.0.1:24 local_recipient_maps = pgsql:/etc/postfix/recipient_map.cf
И в конце.
Перезапустите postfix.
systemctl restart postfix
Проверьте что порты открыты.
netstat -atun | grep "25\|587"
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN tcp6 0 0 :::587 :::* LISTEN tcp6 0 0 :::25 :::* LISTEN
Попробуйте отправить тестовое письмо куда-нибудь наружу.
apt-get install mailutils echo "test" | mail -aFrom:admin@somewhere-in-the.space your@mail.com
ОК, теперь вы можете отправлять письма прямо с сервера, но давайте настроим SASL, чтобы иметь возможность безопасно отправлять почту отовсюду.
Absolute gold. Thank you so much for assembling some outstanding documentation!