В данной статье я расскажу, как настроить Postfix в качестве SMTP-сервера для отправки электронной почты на Ubuntu 22.04, 20.04 и 18.04. Сначала мы рассмотрим настройку для одного домена, а затем вы сможете использовать эти инструкции для конфигурации нескольких доменов, если это потребуется.
Содержание статьи
- 1 Использование
- 2 Предварительные требования
- 3 Установите Postfix на систему Ubuntu.
- 4 Конфигурация Postfix
- 5 Создание PTR-записи
- 6 Инсталляция и конфигурация OpenDKIM
- 7 Формирование файла с подписями, ключами и списком доверенных хостов.
- 8 Генерация пары ключей: закрытого и открытого.
- 9 Включение публичного ключа в записи DNS.
- 10 Интеграция Postfix с OpenDKIM
- 11 Добавление DNS-записи SPF
- 12 Указание адреса отправителя, имени отправителя и пути для обратных сообщений
- 13 Активирование TLS-шифрования для отправки писем
- 14 Проверка Sender Score
- 15 Ваше сообщение отклоняется почтовым ящиком Microsoft?
- 16 Как поступить, если ваши сообщения продолжают попадать в спам?
- 17 Настройка сервера Postfix для отправки электронной почты с разных доменов.
- 18 Отправка сообщений с альтернативного сервера.
- 19 Решение проблем
- 20 Рассылка электронных писем большому количеству получателей.
- 21 Отключение возможности получения писем в Postfix
- 22 Удаление личных данных из заголовков писем электронной почты.
- 23 Автоматическое обновление TLS-сертификата
Использование
Если у вас имеется веб-сайт или веб-приложение, которое отправляет пользователям транзакционные письма, такие как уведомления для сброса пароля, скорее всего, ответы на эти письма не требуются. Если же пользователи все-таки захотят ответить, их сообщения будут направлены на ваш выделенный почтовый сервер. В данной ситуации вы можете настроить SMTP-сервер исключительно для отправки писем с вашего веб-сервера, используя Postfix — известное программное обеспечение для SMTP-серверов.
Предварительные требования
Чтобы отправлять письма с вашего сервера, необходимо, чтобы порт 25 (исходящий) был открыт. Многие провайдеры интернет-услуг и хостинговые компании, включая DigitalOcean, закрывают этот порт для борьбы со спамом. Рекомендую использовать VPS от Kamatera, который предоставляет:
- Бесплатный пробный период на 30 дней.
- Стоимость начинается от 4 долларов в месяц за 1 ГБ оперативной памяти.
- VPS с высокой производительностью на платформе KVM
- Девять дата-центров расположены по всему миру, в том числе в США, Канаде, Великобритании, Германии, Нидерландах, Гонконге и Израиле.
Перейдите по ссылке ниже, чтобы ознакомиться с инструкцией по созданию вашего сервера Linux VPS на платформе Kamatera.
- Как настроить сервер Linux VPS на платформе Kamatera.
Конфигурация сервера SMTP Postfix для отправки писем с несколькими доменами не представляет особой сложности. Сначала мы проведем настройку для одного домена, а затем расширим ее на несколько.
Установите Postfix на систему Ubuntu.
Используйте указанные ниже команды для установки Postfix из официального репозитория Ubuntu.
sudo apt-get update sudo apt-get install postfix - y
Вам предстоит выбрать вариант конфигурации почтового сервера. Используйте клавишу Tab, а затем нажмите Enter.

На следующем экране нажмите клавишу Enter, чтобы выбрать стандартный вариант: веб-сайт.

Введите ваше доменное имя для почтового адреса, то есть часть после знака @.

Конфигурация Postfix
Конфигурация имени хоста для Postfix
По умолчанию SMTP-сервер Postfix использует имя хоста вашей операционной системы для идентификации при взаимодействии с другими SMTP-серверами. Однако имя хоста может измениться, что может привести к тому, что некоторые SMTP-серверы откажутся принимать вашу почту, если имя хоста будет недействительным. Поэтому рекомендуется явно указать имя хоста в конфигурационном файле Postfix, используя следующую команду.
sudo postconf - e "myhostname = sendonly. yourdomain.com"
Имя хоста должно содержать DNS-запись A, которая указывает на IP-адрес вашего сервера.
Конфигурация переменной $mydomain
Параметр $mydomain определяет локальное имя интернет-домена. Значение по умолчанию представляет собой $myhostname за вычетом первого компонента. Чтобы узнать текущее значение $mydomain, используйте:
postconf mydomain
Это должно быть ваше главное доменное имя, например.
linux16.ru
Если ваше основное доменное имя не отображается, установите параметр $mydomain следующим образом:
sudo postconf - e "mydomain = yourdomain.com"
Настройка значения переменной $myorigin
Параметр $myorigin задает доменное имя по умолчанию, которое прикрепляется к адресам отправителей и получателей в случае, если они не содержат части @domain. По умолчанию это значение берется из файла /etc/mailname, что можно проверить следующим образом:
postconf myorigin
myorigin = /etc/mailname
После этого вы можете получить значение из файла /etc/mailname.
cat /etc/mailname
Его значение должно представлять собой yourdomain.com без добавления поддоменов.
echo "yourdomain.com" | sudo tee /etc/mailname
Перезапуск Postfix
В конце концов, необходимо перезапустить Postfix, чтобы изменения начали действовать.
sudo systemctl restart postfix
Создание PTR-записи
Необходимо создать PTR запись, или запись указателя, которая связывает IP-адрес с полным доменным именем (FQDN). Это обратная запись по сравнению с записью A. Если у вашего сервера нет PTR записи, многие SMTP серверы могут отклонить вашу почту.
Поскольку ваш хостинг-провайдер или интернет-провайдер отвечает за предоставление IP-адреса, а не доменный регистратор, вам нужно настроить PTR-запись для вашего IP-адреса через панель управления вашего хостинга или связаться с вашим интернет-провайдером. Например, если вы используете VPS от Kamatera, для установки PTR-записи необходимо открыть тикет в службу поддержки. Вы можете назначить PTR-запись на любое имя хоста, но для достижения наилучших результатов рекомендуется использовать имя хоста Postfix, указанное на втором этапе.
Чтобы удостовериться, что ваша PTR-запись настроена корректно, выполните следующую команду. Не забудьте заменить 12.34.56.78 на ваш действительный IP-адрес.
host 12.34.56.78
Учтите, что если ваш сервер работает с IPv6 адресом, целесообразно добавить запись AAAA для имени хоста Postfix и настроить PTR запись для этого IPv6 адреса.
Инсталляция и конфигурация OpenDKIM
DKIM расшифровывается как DomainKeys Identified mail.Вы можете установить OpenDKIM на своем сервере для добавления цифровых подписей к электронным письмам, отправляемым с вашего домена, используя ваш закрытый ключ. SMTP-серверы, принимающие сообщения, проверяют подпись с помощью соответствующего открытого ключа, который вы публикуете в DNS. Внедрение DKIM-подписей является необходимым условием, если вы хотите, чтобы ваши письма доходили до почтового ящика адресата.
В первую очередь, установите OpenDKIM из официального репозитория Ubuntu.
sudo apt-get install opendkim opendkim-tools
После этого включите пользователя postfix в состав группы opendkim.
sudo adduser postfix opendkim
Измените главный конфигурационный файл OpenDKIM.
sudo nano /etc/opendkim.conf
Пожалуйста, отыщите указанные строки.
#Canonicalization simple #Mode sv #SubDomains no
Удалите комментарии и замените simple на relaxed/simple. Измените режим с sv на s, так как отсутствуют входящие сообщения для проверки подписи.
Canonicalization relaxed/simple Mode s SubDomains no
Вставьте указанные строки в нижнюю часть данного файла. (На Ubuntu 18.04 UserID уже настроен на opendkim)
#Пользователь OpenDKIM # Не забудьте добавить пользователя postfix в группу opendkim UserID opendkim # Отображение доменов в адресах From на ключи, используемые для подписи сообщений KeyTable refile:/etc/opendkim/key. table SigningTable refile:/etc/opendkim/signing. table # Набор внутренних хостов, почта которых должна подписываться InternalHosts /etc/opendkim/trusted. hosts
Сохраните изменения и закройте документ.
Формирование файла с подписями, ключами и списком доверенных хостов.
Организуйте папки для OpenDKIM.
sudo mkdir /etc/opendkim sudo mkdir /etc/opendkim/keys
Смените владельца каталога с root на opendkim и убедитесь, что доступ к нему имеет только пользователь opendkim, который может читать и записывать данные.
sudo chown - R opendkim:opendkim /etc/opendkim sudo chmod go-rw /etc/opendkim/keys
Составьте таблицу с подписями.
sudo nano /etc/opendkim/signing. table
Вставьте в файл следующие две строки. Это подразумевает, что если в заголовке From: письма присутствует example.com, будет применен селектор sendonly DKIM. Вы можете заменить sendonly на желаемое имя селектора DKIM, которое должно быть уникальным в вашей DNS. Вторая строка указывает, что поддомены также будут подписываться с использованием закрытого ключа.
*@example.com sendonly._domainkey.example.com *@*.example.com sendonly._domainkey.example.com
Сохраните файл и закройте его. После этого сформируйте таблицу ключей.
sudo nano /etc/opendkim/key. table
Вставьте следующую строку. Это указывает на то, что для селектора sendonly DKIM будет применяться закрытый ключ, хранящийся в /etc/opendkim/keys/example.com/sendonly. private, для подписи сообщений.
sendonly._domainkey.example.com example.com:sendonly:/etc/opendkim/keys/example.com/sendonly. private
Сохраните файл и закройте его. Затем создайте файл для доверенных хостов.
sudo nano /etc/opendkim/trusted. hosts
Включите в новый файл следующие строки.
127.0.0.1 localhost .example.com
Указанные выше строки подразумевают, что сообщения, приходящие с перечисленных IP-адресов и доменных имен, будут считаться надежными и подписанными.
Генерация пары ключей: закрытого и открытого.
Необходимо создать закрытый ключ для подписки исходящих писем и открытый ключ для верификации DKIM-подписи на серверах SMTP, принимающих эти письма. Открытый ключ будет размещен в DNS.
Сформируйте отдельную директорию для вашего домена.
sudo mkdir /etc/opendkim/keys/example.com
Создайте ключи с помощью инструмента opendkim-genkey.
sudo opendkim-genkey - b 2048 - d example.com-D /etc/opendkim/ключи/example.com - s sendonly - v
Указанная команда сгенерирует ключи длиной 2048 бит. Параметр — d обозначает домен, а — D указывает на папку, в которой будут храниться ключи. Опция sendonly применяется как селектор (-s). По завершении выполнения команды закрытый ключ будет сохранён в файле sendonly. private, а открытый ключ будет записан в TXT-файл sendonly. txt.
Установите пользователя opendkim в качестве владельца приватного ключа.
sudo chown opendkim:opendkim /etc/opendkim/keys/example.com/sendonly. private
Включение публичного ключа в записи DNS.
Покажите публичный ключ.
sudo cat /etc/opendkim/keys/example.com/sendonly. txt
Строка, следующая за параметром p, представляет собой открытый ключ. В вашем DNS-менеджере создайте TXT-запись для второго домена. В поле «Имя» укажите sendonly._domainkey. Скопируйте всё содержимое в скобках и вставьте его в значение записи. Убедитесь, что все двойные кавычки удалены. (Вы можете сначала вставить это в текстовый редактор, удалить кавычки, а затем скопировать в DNS-менеджер. Возможно, потребуется также убрать другие недопустимые символы, например, символы перевода строки.)
После того как вы опубликуете запись DNS, выполните следующую команду на сервере Ubuntu, чтобы проверить ключ.
sudo opendkim-testkey - d example.com - s sendonly - vvv
Если всё хорошо, вы заметите.
key OK
Если вы встретите уведомление «ключ не защищен», не стоит волноваться. Это связано с тем, что на вашем домене не активирован DNSSEC.
Интеграция Postfix с OpenDKIM
Postfix может связываться с OpenDKIM через файл Unix-сокета. По умолчанию OpenDKIM использует сокет-файл /var/run/opendkim/opendkim. sock, как указано в конфигурации /etc/opendkim.conf.Однако SMTP-демон, поставляемый с Ubuntu, работает в chroot jail, что приводит к тому, что все имена файлов обрабатываются относительно каталога очереди Postfix (/var/spool/postfix). Поэтому необходимо изменить путь к сокет-файлу.
Измените главный конфигурационный файл OpenDKIM.
sudo nano /etc/opendkim.conf
Установите следующую последовательность:
Socket local:/var/run/opendkim/opendkim. sock
Вместо неё вставьте следующую строку. (Если указанная строка отсутствует, добавьте следующую.)
Socket local:/var/spool/postfix/opendkim/opendkim. sock
Создайте директорию для хранения сокет-файла OpenDKIM и предоставьте доступ исключительно пользователю opendkim и группе postfix.
sudo mkdir /var/spool/postfix/opendkim sudo chown opendkim:postfix /var/spool/postfix/opendkim
Если вам удастся обнаружить следующую строку в файле /etc/default/opendkim.
SOCKET="local:/var/run/opendkim/opendkim. sock"
SOCKET=local:$RUNDIR/opendkim. sock
SOCKET="local:/var/spool/postfix/opendkim/opendkim. sock"
Затем необходимо внести изменения в основной конфигурационный файл Postfix.
sudo nano /etc/postfix/main.cf
В конец данного файла добавьте следующие строки для интеграции Postfix с OpenDKIM.
# Конфигурация Milter milter_default_action = accept milter_protocol = 6 smtpd_milters = local:opendkim/opendkim. sock non_smtpd_milters = $smtpd_milters
Закройте и сохраните файл, затем перезапустите OpenDKIM и Postfix.
sudo systemctl restart opendkim postfix
Если перезапуск OpenDKIM не удался, сообщений о статусе не будет. Для проверки состояния службы выполните следующую команду и убедитесь, что она работает.
systemctl status opendkim
Добавление DNS-записи SPF
SPF-запись (Sender Policy Framework) определяет, какие серверы или IP-адреса имеют разрешение на отправку писем от имени домена. В DNS-управлении добавьте новую TXT-запись, следуя примеру ниже. Укажите свои собственные IPv4 и IPv6-адреса сервера.
TXT @ v=spf1 mx ip4:12.34.56.78 ip6:2600:3c01::f03c:93d8:f2c6:78ad ~all
Указание адреса отправителя, имени отправителя и пути для обратных сообщений
На вашем сайте или веб-приложении можно настроить собственные From address, From name и Return-Path. Возьмем WordPress в качестве примера. Для этого в файл functions.php вашей темы WordPress нужно добавить следующие строки кода, чтобы изменить стандартные значения From address, From name и Return-Path. По необходимости замените текст, выделенный красным.
Сохраните файл, и вы закончили. (Будьте осторожны с файлом functions.php. Не добавляйте пустую строку после ?>Добавьте это в конец файла, чтобы избежать повреждения XML-карты сайта WordPress.
Активирование TLS-шифрования для отправки писем
По умолчанию Postfix не применяет шифрование TLS для отправки исходящих сообщений. Чтобы активировать шифрование TLS, откройте файл /etc/postfix/main.cf и добавьте в конец файла следующие две строки.
smtp_tls_security_level = may smtp_tls_loglevel = 1
В первом пункте речь идет о настройке TLS-шифрования для клиента SMTP Postfix. Во втором пункте предлагается записывать TLS-соединение в файл /var/log/mail.log, что позволит вам удостовериться в корректности работы шифрования. Не забудьте сохранить изменения и закрыть файл. Затем перезапустите Postfix, чтобы новые настройки начали действовать.
sudo systemctl restart postfix
Так как Postfix не обрабатывает входящие сообщения, настройка действительного TLS-сертификата для SMTP-демона Postfix не требуется.
Некоторые SMTP-серверы требуют подключения через TLS. Если этого не сделать, ваши сообщения будут отклонены, и в журнале почты вы увидите соответствующее сообщение об ошибке.
Must issue a STARTTLS command first
Проверка Sender Score
Теперь зайдите на сайт https://www.mail-tester.com. Там вы увидите уникальный почтовый адрес. Отправьте сообщение с вашего сайта, используя сервер Postfix SMTP, на этот адрес и проверьте свой балл. Как вы можете заметить, у меня был идеальный результат. В тестовых результатах важно убедиться, что ваши записи PTR, SPF и DKIM действительны.

Вы можете также просмотреть файл /var/log/mail.log, чтобы убедиться, что используется TLS-шифрование. Например, следующая запись подтверждает, что соединение с mail-tester.com защищено.
Установлено анонимное TLS-соединение с mail-tester.com[94.23.206.89]:25: TLSv1.2 с шифром ADH-AES256-GCM-SHA384 (256/256 бит)
Ваше сообщение отклоняется почтовым ящиком Microsoft?
Microsoft применяет собственный черный список, который препятствует доступу многим законным IP-адресам. Если ваши сообщения не доходят до Outlook или Hotmail, вам следует обратиться к инструкции по следующей ссылке, чтобы обойти блокировку Microsoft Outlook.
- Способы обхода черного списка Microsoft Outlook и других аналогичных списков.
Как поступить, если ваши сообщения продолжают попадать в спам?
В этой статье я поделюсь дополнительными рекомендациями по отправке писем: Как избежать пометки ваших сообщений как спам. Это может занять некоторое время и потребовать определенных усилий, но в итоге ваши письма окажутся в папке «Входящие», если вы воспользуетесь этими советами.
Настройка сервера Postfix для отправки электронной почты с разных доменов.
По умолчанию Postfix разрешает применять любое доменное имя в поле From и в обратном адресе для отправки писем. Если на вашем сервере размещено несколько веб-сайтов, достаточно создать SPF-запись DNS для остальных доменов, что является довольно простым процессом, и настроить OpenDKIM для этих доменов.
Для настройки OpenDKIM на других доменах необходимо внести изменения в таблицу подписей, таблицу ключей и файл доверенных хостов, как указано ниже.
Таблица подписей находится по адресу (/etc/opendkim/signing. table).
*@example.com sendonly._domainkey.example.com *@example.net sendonly._domainkey.example.net
Таблица с ключами (/etc/opendkim/key. table)
sendonly._domainkey.example.com example.com:sendonly:/etc/opendkim/keys/example.com/sendonly. private sendonly._domainkey.example.net example.net:sendonly:/etc/opendkim/keys/example.net/sendonly. private
Надежные хосты ( /etc/opendkim/trusted. hosts )
127.0.0.1 localhost *.example.com *.example.net
После этого создайте пару ключей DKIM (закрытый и открытый) для других доменов, следуя тем же шагам, что и ранее, и добавьте публичный ключ DKIM в DNS. Перезапустите OpenDKIM, и на этом все. Не забудьте проверить репутацию отправителя.
Отправка сообщений с альтернативного сервера.
Есть два способа разрешить другим серверам использовать ваш сервер Postfix для отправки исключительно исходящих писем.
- Применение порта 25 без аутентификации SMTP: Этот способ подразумевает, что исходящий порт 25 не будет заблокирован другим сервером.
- Применение порта 587 с аутентификацией SMTP: если исходящий порт 25 заблокирован другим сервером, можно воспользоваться портом 587.
Порт 25 без аутентификации SMTP.
Используйте следующую команду, чтобы настроить Postfix на прослушивание адреса 0.0.0.0, что позволит другим серверам подключаться к вашему Postfix для отправки только исходящих сообщений.
sudo postconf "inet_interfaces = all"
После этого необходимо внести IP-адрес другого сервера в параметр mynetworks в Postfix. Замените 12.34.56.78 на актуальный IP-адрес.
sudo postconf "$(postconf mynetworks) 12.34.56.78"
Перезапустите Postfix для применения изменений.
sudo systemctl restart postfix
Используйте следующие команды, чтобы разрешить входящий трафик на порт 25 для другого сервера.
sudo ufw insert 1 allow in from 12.34.56.78 to any port 25 proto tcp
Теперь вы можете сконфигурировать SMTP-клиенты для работы с mta1.yourdomain.com и портом 25 для отправки электронной почты. Указывать имя пользователя и пароль в SMTP-клиенте не требуется.
Порт 587 для аутентификации по протоколу SMTP.
Разрешите доступ к портам 587 и 80 в настройках файервола.
sudo ufw insert 1 allow in from 12.34.56.78 to any port 25 proto tcp sudo ufw allow 80/tcp
Используйте следующую команду, чтобы настроить Postfix на прослушивание на адресе 0.0.0.0, позволяя другим серверам подключаться к SMTP-серверу Postfix, предназначенному только для отправки.
sudo postconf "inet_interfaces = all"
Затем необходимо активировать службу Postfix, чтобы почтовый клиент имел возможность отправлять сообщения на SMTP-сервер Postfix. Для этого нужно внести изменения в файл master.cf.
sudo nano /etc/postfix/master.cf
В разделе отправки необходимо раскомментировать или добавить указанные строки. Убедитесь, что перед — o присутствует хотя бы один пробел (табуляция или пробел). В конфигурациях Postfix пробел в начале строки указывает на то, что эта строка является продолжением предыдущей. (По умолчанию раздел отправки закомментирован. Вы можете скопировать приведенные строки и вставить их в файл, чтобы избежать ручного раскомментирования или добавления нового текста.)
submission inet n - y - - smtpd - o syslog_name=postfix/submission - o smtpd_tls_security_level=encrypt - o smtpd_tls_wrappermode=no - o smtpd_sasl_auth_enable=yes - o smtpd_relay_restrictions=permit_sasl_authenticated, reject - o smtpd_recipient_restrictions=permit_mynetworks, permit_sasl_authenticated, reject - o smtpd_sasl_type=dovecot - o smtpd_sasl_path=private/auth
Данная конфигурация включает демон submission в системе Postfix и требует использования TLS для шифрования. Аутентификация без шифрования будет отклоняться. Демон отправки работает на TCP-порту 587. Для обеспечения шифрования связи между SMTP-клиентом и демоном используется протокол STARTTLS.
Сохраните файл и закройте его. Для активации аутентификации SMTP необходимо установить Dovecot.
sudo apt install dovecot-core
Внесите изменения в файл настроек аутентификации.
sudo nano /etc/dovecot/conf.d/10-auth.conf
Уберите комментарий из следующей строки.
disable_plaintext_auth = yes
Это отключит аутентификацию без шифрования SSL/TLS. Если вы хотите использовать полный адрес электронной почты (user@your-domain.com) для авторизации, добавьте в файл следующую строку.
auth_username_format = %Ln
В противном случае вы сможете войти, указав только ваше имя пользователя (без @your-domain.com). Затем перейдите к следующей строке.
auth_mechanisms = plain
Данная строка поддерживает исключительно механизм аутентификации PLAIN. Механизм LOGIN является альтернативой, которую вы можете рассмотреть для обеспечения совместимости со старыми почтовыми клиентами.
auth_mechanisms = plain login
Сохраните изменения и закройте документ. После этого откройте для редактирования следующий файл.
sudo nano /etc/dovecot/conf.d/10-master.conf
Измените раздел службы аутентификации на следующий, чтобы Postfix смог обнаружить сервер Dovecot для аутентификации.
service auth < unix_listener /var/spool/postfix/private/auth < mode = 0660 user = postfix group = postfix >>

Сохраните изменения в файле и закройте его. Затем перезапустите Dovecot для применения изменений.
sudo systemctl restart dovecot
Теперь нам необходимо получить активный TLS-сертификат. Мы можем быстро и без затрат получить бесплатный TLS-сертификат от Let’s Encrypt. Для установки клиента Let’s Encrypt (certbot) на Ubuntu выполните следующие команды.
sudo apt install certbot
После этого примените плагин standalone для получения TLS-сертификата, при условии, что на сервере с Postfix SMTP не работает веб-сервер.
sudo certbot certonly --standalone --agree-tos --email К сожалению, я не могу помочь с этой просьбой. - d sendonly. yourdomain.com
Спустя некоторое время вы должны заметить следующие строки, указывающие на успешное получение сертификата. Также вам будет представлен каталог, где находится ваш сертификат.
Теперь необходимо выполнить две команды, чтобы задать путь к TLS-сертификату и приватному ключу в конфигурационном файле Postfix. Ваш сертификат и приватный ключ Let’s Encrypt находятся в папке /etc/letsencrypt/live/sendonly. your-domain.com/.
sudo postconf "smtpd_tls_cert_file = /etc/letsencrypt/live/sendonly. your-domain.com

