Конфигурация Postfix для отправки почты на SMTP-сервере под управлением CentOS 8

В данной статье мы рассмотрим процесс настройки Postfix в роли SMTP сервера для отправки сообщений на CentOS 8. Сначала я объясню, как выполнить эту настройку для одного домена, а затем вы сможете использовать предложенные шаги для конфигурации нескольких доменов, если это потребуется.

Настройка SMTP-сервера Postfix только для отправки на CentOS 8.

Содержание статьи

Применение сценария

Если ваш веб-сайт или приложение требует отправки транзакционных электронных писем пользователям (например, писем для сброса пароля), вам потребуется настроить сервер SMTP для отправки этих писем. Postfix — отличное решение для настройки SMTP на вашем веб-сервере, обеспечивая надежную отправку без необходимости в обратной связи от пользователей или дополнительной конфигурации для обработки ответных писем.

Необходимо выполнить начальные требования.

Для отправки электронных писем с вашего сервера необходимо открыть порт 25 (исходящий). Однако многие интернет-провайдеры и хостинг-компании, включая DigitalOcean, ограничивают доступ к этому порту в целях борьбы со спамом. Я советую обратить внимание на ScalaHosting, так как они не блокируют порт 25. После получения сервера на платформе ScalaHosting, установите на нем CentOS 8 и следуйте инструкциям, приведённым ниже.

Конфигурация сервера SMTP Postfix исключительно для отправки почты для нескольких доменов не представляет собой большой сложности. В начале мы настроим его для одного домена, а затем перейдем к настройкам для нескольких.

Настройте имя хоста и запись PTR.

Postfix по умолчанию идентифицирует себя перед другими SMTP-серверами с помощью имени хоста вашего сервера. Если имя хоста окажется недействительным, некоторые SMTP-серверы могут отказать в доставке вашего письма. Поэтому необходимо задать полное квалифицированное доменное имя (FQDN), следуя приведённым ниже инструкциям.

sudo hostnamectl set-hostname mta1.yourdomain.com

Для того чтобы узнать имя хоста вашего сервера, выполните следующие действия:

hostname - f

Чтобы увидеть обновлённое имя хоста в командной строке, вам необходимо выйти из системы и снова войти. Это имя хоста должно иметь запись DNS типа A, направленную на IP-адрес вашего сервера.

Также необходимо настроить PTR-запись, известную как указатель.

Параметр $myorigin определяет доменное имя по умолчанию, которое прикрепляется к адресам отправителей и получателей, не содержащим часть @domain. Значение $myhostname используется по умолчанию, что можно проверить с помощью:

postconf myorigin

myorigin = $myhostname

Вы можете установить его значение на yourdomain.com.

sudo postconf - e "myorigin = yourdomain.com"

Перезапуск сервиса Postfix

В конечном итоге необходимо перезапустить Postfix, чтобы новые настройки начали действовать.

sudo systemctl restart postfix

Установка и конфигурация OpenDKIM на CentOS 8.

DKIM, или DomainKeys Identified Mail, представляет собой механизм для проверки подлинности электронной почты. Вы можете установить OpenDKIM на своем сервере, чтобы добавлять подписи к письмам, отправляемым с вашего домена, используя ваш закрытый ключ. Получающие SMTP-серверы проверяют эту подпись с помощью открытого ключа, который вы размещаете в DNS. Подписание писем с помощью DKIM необходимо, если вы хотите, чтобы ваши сообщения доходили до папки «Входящие» у получателя.

Установите OpenDKIM из репозитория EPEL (Extra Packages for Enterprise Linux).

sudo dnf install epel-release sudo dnf install opendkim perl-Getopt-Long

Измените основной файл конфигурации OpenDKIM.

sudo nano /etc/opendkim.conf

Определите следующий ряд.

Mode v

OpenDKIM по умолчанию функционирует в режиме проверки (v), что позволяет ему анализировать подписи DKIM входящих писем. Однако нам необходимо настроить подпись для исходящих сообщений электронной почты.

DKIM применяется для подписи отправляемых писем и проверки получаемых. Для этого нужно создать закрытый ключ, который будет использоваться для подписи исходящих сообщений, и открытый ключ, который потребуется SMTP-серверам для проверки DKIM-подписи. Открытый ключ будет размещен в DNS.

Читайте также:  Выдать колличество байтов в Linux

Сформируйте отдельную директорию для домена.

sudo mkdir /etc/opendkim/keys/ваш-домен.com

Создайте ключи, воспользовавшись утилитой opendkim-genkey.

sudo opendkim-genkey - b 2048 - d ваш-домен.com-Удалить каталог /etc/opendkim/keys/ваш-домен.com - s mta1 - v

Указанная команда сгенерирует ключи длиной 2048 бит. Параметр — d обозначает домен, а — D указывает на каталог для сохранения ключей. В качестве селектора DKIM используется mta1. После выполнения команды закрытый ключ сохранится в файл mta1.private, а открытый — в файл mta1.txt.

По умолчанию только пользователь root имеет доступ для чтения и записи ключевых файлов. Назначьте владельцем закрытого ключа пользователя opendkim.

sudo chown opendkim:opendkim /etc/opendkim/keys/ - R

Разместите свой открытый ключ в записях DNS.

Покажите публичный ключ.

sudo cat /etc/opendkim/keys/ваш-домен.com/mta1.txt

Строка, следующая за параметром p, представляет собой открытый ключ.

В вашем DNS-менеджере добавьте TXT-запись с именем mta1._domainkey. Затем в терминале скопируйте содержимое в скобках и вставьте в поле значения этой записи. Не забудьте удалить все двойные кавычки и переносы строк, иначе проверка ключа на следующем этапе может завершиться неудачно.

Проверьте ключ DKIM.

Выполните следующую команду на вашем сервере CentOS 8, чтобы проверить работоспособность вашего ключа.

sudo opendkim-testkey - d ваш-домен.com - s mta1 - vvv

Если все хорошо, на экране появится сообщение о том, что ключ в порядке.

opendkim-testkey: using default configfile /etc/opendkim.conf opendkim-testkey: checking key 'mta1._domainkey. linux16.ru' opendkim-testkey: key OK

Если вы заметите сообщение «Ключ не защищен», не волнуйтесь. Это связано с тем, что для вашего доменного имени не активирован DNSSEC. DNSSEC представляет собой стандарт безопасности, предназначенный для защиты DNS-запросов. У большинства доменных имен DNSSEC не активен. Вы можете продолжать следовать этому руководству.

Теперь у нас есть возможность активировать службу opendkim.

sudo systemctl start opendkim

Активировать автозапуск при загрузке системы.

sudo systemctl enable opendkim

OpenDKIM работает на адресе 127.0.0.1 с портом 8891.

Интегрируйте Postfix с OpenDKIM.

Внесите изменения в основной конфигурационный файл Postfix.

sudo nano /etc/postfix/main.cf

Вставьте указанные строки в конец данного файла, чтобы Postfix мог взаимодействовать с OpenDKIM через milter. Имейте в виду, что необходимо использовать 127.0.0.1 в качестве адреса, а не localhost.

# Конфигурация Milter milter_default_action = accept milter_protocol = 6 smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters

Сохраните файл и закройте его. После этого добавьте пользователя postfix в группу opendkim.

sudo gpasswd - a postfix opendkim

Перезапустите службу Postfix.

sudo systemctl restart postfix

Добавьте запись SPF в систему DNS.

Запись 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

Задайте адрес отправителя, его имя и путь для возврата.

На своем веб-сайте или веб-приложении можно задать собственный адрес отправителя, имя и обратный путь. Рассмотрим пример с WordPress. Для этого нужно добавить несколько строк кода в файл functions.php вашей темы WordPress, чтобы изменить стандартные параметры адреса отправителя, имени и пути возврата. Не забудьте заменить выделенные значения на необходимые вам.

// Функция для изменения адреса электронной почты отправителя function wpb_sender_email( $original_email_address ) < return 'К сожалению, я не могу выполнить этот запрос.'; >Функция для редактирования имени отправителя function wpb_sender_name( $original_email_from )< return 'LinuxBabe'; >Чтобы установить путь возврата таким же, как и адрес отправителя, используйте следующую функцию:

php< $phpmailer->Sender = $phpmailer->From; > // Подключаем наши функции к фильтрам WordPress add_filter( 'wp_mail_from', 'wpb_sender_email' ); add_filter( 'wp_mail_from_name', 'wpb_sender_name' ); add_action( 'phpmailer_init', 'fix_my_email_return_path' );

Сохраните файл, и все готово.

Активируйте TLS-шифрование для отправляемых сообщений электронной почты.

В стандартной конфигурации Postfix не применяет шифрование TLS для отправки исходящих писем. Чтобы активировать TLS, откройте файл /etc/postfix/main.cf и добавьте в его конец следующие две строки.

smtp_tls_security_level = may smtp_tls_loglevel = 1

Первая строка активирует TLS-шифрование для SMTP-клиента Postfix. Вторая строка записывает информацию о TLS-соединении в файл /var/log/maillog, что позволит вам убедиться в успешной работе шифрования. Сохраните изменения и закройте файл. Перезапустите Postfix, чтобы новые настройки начали действовать.

sudo systemctl restart postfix

Поскольку Postfix не обрабатывает входящие электронные письма, установка действующего сертификата TLS для его SMTP-демона не требуется.

Проверка оценок отправителя.

Теперь перейдите на сайт https://www.mail-tester.com. Вам будет предоставлен уникальный адрес электронной почты. Отправьте письмо со своего сайта, используя сервер SMTP Postfix, на этот адрес, а затем оцените свой результат. Как видно, я получил максимальный балл. В процессе тестирования вам нужно убедиться, что ваши записи PTR, SPF и DKIM действительны.

Оценка качества и размещения электронной почты

Вы можете открыть файл /var/log/maillog, чтобы убедиться, что TLS-шифрование активно. К примеру, следующая запись указывает на то, что соединение с mail-tester.com защищено.

Установлено анонимное TLS-соединение с mail-tester.com[94.23.206.89]:25: TLSv1.2 с шифром ADH-AES256-GCM-SHA384 (256/256 бит)

Что предпринять, если ваши письма по-прежнему попадают в папку со спамом?

Вот еще несколько рекомендаций по улучшению доставляемости ваших электронных писем, представленных в этой статье: Как предотвратить маркировку ваших писем как спам. Несмотря на то что это потребует времени и усилий, в итоге ваши сообщения окажутся в папке «Входящие», если следовать этим советам.

Настройка сервера SMTP на базе Postfix для отправки почты с нескольких доменов.

По умолчанию Postfix разрешает использовать любое доменное имя в заголовке From и адресе возврата при отправке исходящих электронных писем. Если ваш сервер поддерживает несколько веб-сайтов, необходимо лишь создать SPF DNS-запись для других доменов, что довольно просто, а также настроить OpenDKIM для этих доменов.

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

*@example.com mta1._domainkey.example.com *@example.net mta1._domainkey.example.net

mta1._domainkey.example.com example.com:mta1:/etc/opendkim/keys/example.com/mta1.private mta1._domainkey.example.net example.net:mta1:/etc/opendkim/keys/example.net/mta1.private

127.0.0.1 localhost *.example.com *.example.net

Затем создайте пару ключей DKIM Private/Public, повторяя те же действия, что и для других доменов, и добавьте публичный ключ DKIM в DNS. После этого перезапустите OpenDKIM, и на этом всё. Не забудьте проверить свой рейтинг отправителя.

Диагностика проблем

Если ваше письмо не имеет подписи и проверка DKIM не прошла, рекомендуется просмотреть журнал Postfix (/var/log/maillog), чтобы выяснить, в чем заключается проблема с вашей настройкой.

Отправка email-сообщений с альтернативного сервера.

Существует два метода, позволяющих другим серверам использовать ваш сервер SMTP Postfix исключительно для отправки электронных писем.

  • Используйте порт 25 без аутентификации SMTP: данный способ предполагает, что другой сервер не будет ограничивать доступ к исходящему порту 25.
  • Применяйте порт 587 с использованием SMTP-аутентификации: если исходящий порт 25 заблокирован другим сервером, можно воспользоваться портом 587.

Порт 25 без аутентификации SMTP.

По умолчанию Postfix на CentOS 8 принимает подключения только с локального хоста. Для того чтобы другие серверы могли подключаться к вашему SMTP-серверу Postfix для отправки почты, необходимо настроить его на прослушивание на 0.0.0.0.

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 firewall-cmd --permanent --add-port=25/tcp sudo systemctl reload firewalld

Теперь у вас есть возможность конфигурировать SMTP-клиенты для отправки электронной почты через mta1.yourdomain.com, используя порт 25. Вводить имя пользователя и пароль в настройках SMTP-клиента не требуется.

Порт 587, использующий аутентификацию SMTP.

Разрешите доступ к портам 587 и 80 в файрволе.

sudo firewall-cmd --permanent --add-service= sudo systemctl reload firewalld

По умолчанию Postfix в CentOS 8 настроен на прослушивание только локального хоста. Чтобы разрешить подключение других серверов к вашему SMTP-серверу Postfix, который используется исключительно для отправки почты, необходимо изменить настройки и указать адрес 0.0.0.0.

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_tls_loglevel=1 - 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

Указанная конфигурация содержит демон Postfix для отправки сообщений и требует использования TLS для SMTP-аутентификации. Аутентификация без шифрования будет отклонена. Не забудьте сохранить и закрыть файл. Для активации SMTP-аутентификации необходимо установить Dovecot на сервере CentOS 8 или RHEL 8.

sudo dnf install dovecot

Активируйте Dovecot и настройте автоматический запуск при старте системы.

sudo systemctl start dovecot sudo systemctl enable dovecot

Измените файл настроек аутентификации.

sudo nano /etc/dovecot/conf.d/10-auth.conf

Прокомментируйте данное предложение.

disable_plaintext_auth = yes

Это отключит аутентификацию без шифрования SSL/TLS. Если вы хотите входить с полным адресом электронной почты ([email protected]), добавьте следующую строку в файл.

auth_username_format = %n

В противном случае вам будет доступен вход только по имени пользователя (без @your-domain.com). Затем перейдите к следующей строке.

auth_mechanisms = plain

Данная строка содержит исключительно механизм аутентификации PLAIN.logIN — это дополнительный механизм аутентификации, который стоит рассмотреть для обеспечения совместимости со старыми почтовыми клиентами.

auth_mechanisms = plain login

Сохраните изменения и закройте файл. После этого перейдите к редактированию следующего документа.

sudo nano /etc/dovecot/conf.d/10-master.conf

Измените раздел службы auth следующим образом, чтобы Postfix смог обнаружить сервер аутентификации Dovecot.

service auth < unix_listener /var/spool/postfix/private/auth < mode = 0660 user = postfix group = postfix >

Postfix-SMTP-Auth-centos8

Сохраните файл и закройте его. Затем перезапустите Dovecot, чтобы изменения начали действовать.

sudo systemctl restart dovecot

Теперь нам необходимо получить действующий TLS сертификат. Мы можем без труда получить бесплатный TLS сертификат от Let’s Encrypt. Для установки клиента Let’s Encrypt (certbot) на CentOS 8/RHEL 8 выполните следующие команды из репозитория EPEL.

sudo dnf install certbot

После этого примените автономный плагин для получения TLS сертификата, если на сервере с Postfix SMTP не работает веб-сервер.

sudo certbot certonly --standalone --agree-tos --email К сожалению, я не могу выполнить этот запрос. - d mta1.yourdomain.com

Спустя некоторое время у вас появятся следующие строки, что будет свидетельствовать о том, что сертификат успешно получен. Кроме того, вы сможете увидеть папку, где хранится ваш сертификат.

centos 8 postfix для отправки сообщений только с использованием сертификата tls

Теперь необходимо выполнить две команды, чтобы задать путь к TLS-сертификату и закрытому ключу в конфигурационном файле Postfix. Ваш сертификат от Let’s Encrypt и закрытый ключ находятся в папке /etc/letsencrypt/live/mta1.your-domain.com/.

sudo postconf "smtpd_tls_cert_file = /etc/letsencrypt/live/mta1.your-domain.com/smtpd_tls_key_file = /etc/letsencrypt/live/ /fullchain. pem" sudo postconf "mta1.your-domain.com/privkey. pem"

Перезапустите Postfix, чтобы изменения начали действовать.

sudo systemctl restart postfix

Теперь у вас есть возможность настроить SMTP-клиенты с использованием mta1.yourdomain.com и порта 587 для отправки писем. Для этого выберите шифрование TLS и аутентификацию в режиме plain. Необходимо создать учетную запись электронной почты на SMTP-сервере, что делается легко. Для добавления пользователя воспользуйтесь командой adduser.

sudo adduser user1

После этого задайте пароль для данного пользователя.

sudo passwd user1

Электронная почта: [email protected]

Исключение личных данных из тем сообщений электронной почты.

Сервер Postfix SMTP по умолчанию включает заголовок Received:, который фиксирует IP-адрес клиента, что может привести к раскрытию IP-адреса вашего сайта, особенно если он находится за CDN. Вы можете настроить Postfix так, чтобы он игнорировал этот заголовок. Для этого создайте файл для проверки заголовков.

sudo nano /etc/postfix/smtp_header_checks

Добавьте указанные строки в файл.

/^Received:/ IGNORE

Сохраните файл и закройте его. После этого внесите изменения в основной конфигурационный файл Postfix.

sudo nano /etc/postfix/main.cf

Вставьте указанную строку в нижнюю часть файла.

smtp_header_checks = regexp:/etc/postfix/smtp_header_checks

Сохраните изменения и закройте файл. После этого выполните следующую команду для восстановления хэш-таблицы.

sudo postmap /etc/postfix/smtp_header_checks

Перезапустите Postfix, чтобы изменения начали действовать.

sudo systemctl reload postfix

Теперь Postfix не будет добавлять эту чувствительную информацию в заголовки писем.

Автоматизированное обновление сертификата TLS.

Можно настроить задачу Cron для автоматического обновления TLS-сертификата. Для этого нужно открыть файл crontab для пользователя root.

sudo crontab - e

После этого вставьте следующую строку.

@daily certbot renew --quiet

Сохраните изменения и закройте документ.

Рассылка массовых электронных сообщений.

Можно ли использовать этот SMTP-сервер для рассылки массовых писем?

Да, вы должны рассылать массовые электронные письма только тем, кто легально подписан на вашу рассылку. Получатели должны давать согласие на получение таких сообщений. Отправка спама (незапрашиваемых массовых писем) строго запрещена, так как это может привести к блокировке вашего SMTP-сервера. Прежде чем начинать массовую рассылку, настоятельно рекомендую ознакомиться с советами из этой статьи: Как предотвратить попадание ваших писем в спам.

В первую очередь следует отправить команду STARTTLS.

Если в журнале почты (/var/log/maillog) появляется указанная ошибка, это может свидетельствовать о неверном указании TLS-сертификата в файле /etc/postfix/main.cf.

Must issue a STARTTLS command first (in reply to MAIL FROM command))

Заключение

Надеюсь, данный учебник был полезен для настройки сервера SMTP с помощью Postfix на CentOS 8 для работы с несколькими доменами. Если вы нашли эту информацию ценной, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше советов и полезных рекомендаций.