Перейти к основному содержанию

Установка и настройка Postfix на Ubuntu 22 для одного домена

Mail Почта

Развернул сайт на выделенном сервере с ОС Ubuntu Server 22.04. Надо бы на том же сервере организовать отправку писем для одного домена. Пока для одного. Естественно, это будет домен internet-lab.ru.

Наш почтовый сервер будет только отправлять письма.

Установка Postfix

Устанавливаем почтовый сервер:

apt-get update
apt-get install postfix

Общий тип почтовой настройки выбираем "Без настройки":

px

Создаём главный файл настроек main.cf:

vim /etc/postfix/main.cf
myorigin = post.internet-lab.ru
myhostname = post.internet-lab.ru
mydomain = internet-lab.ru

smtpd_banner = post.internet-lab.ru
biff = no

alias_maps = hash:/etc/postfix/aliases

mynetworks = 127.0.0.0/8 10.0.0.7/32 [::ffff:127.0.0.0]/104 [::1]/128
message_size_limit = 35840000
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4

masquerade_classes = envelope_sender, header_sender

maximal_queue_lifetime = 3d

compatibility_level = 2
smtp_use_tls = yes

disable_mime_output_conversion = yes

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

postfix

Последние 4 строки — конфигурация для DKIM, позже настроим. mynetworks — список сетей, с которых можно слать, в моём случае без авторизации и только самому себе.

Создаём файл /etc/postfix/aliases:

vim /etc/postfix/aliases
postmaster:root

postfix

Выполняем:

postalias /etc/postfix/aliases

 Перезагружаем Postfix.

service postfix restart

SPF, DMARC и прочее

SPF (Sender Policy Framework) — это TXT запись в DNS домена, которая содержит информацию о списке серверов, которые имеют право отправлять письма от имени этого домена и механизм обработки писем, отправленных от других серверов.

Разрешим отправку писем для нашего домена с данного сервера. У сервера прямой IP адрес, укажем его в DNS в SPF записи, добавив блок ip4:176.109.108.64.

@ IN TXT "v=spf1 ip4:46.39.246.23 ip4:176.109.108.64 -all"
@ IN TXT "spf2.0/mfrom,pra ip4:46.39.246.23 ip4:176.109.108.64 -all"

spf

SPF2.0 не входит в стандарт RFC, но каши не просит, тоже добавил.

Раз уж мы полезли в DNS, то настроим за одно DMARC.

DMARC (Domain-based Message Authentication, Reporting and Conformance) — это TXT запись в DNS домена, которая устанавливает стандарт для идентификации электронных сообщений принимающими узлами если письмо не проходит проверку SPF (Sender Policy Framework) или DKIM (DomainKeys Identified Mail).

_dmarc.internet-lab.ru. IN TXT "v=DMARC1; p=reject; sp=reject; rua=mailto:info@internet-lab.ru"

postfix

В настройках Postfix я указал имя хоста как post.internet-lab.ru, так он и пишет в HELO. Почтовики могут проверять эту запись, так что добавим её в DNS.

Первая проверка отправки письма

Пытаемся отправить письмо с помощью telnet по 25 порту с самого сервера без аутентификации. Отправляем, к примеру, на Mail.Ru.

Отправка email через telnet

postfix

Письмо пришло.

postfix

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

Received-SPF: pass (mx254.i.mail.ru: domain of internet-lab.ru designates 176.109.108.64 as permitted sender) client-ip=176.109.108.64; envelope-from=test@internet-lab.ru; helo=post.internet-lab.ru;
X-Mailru-Dmarc-Auth: dmarc=pass header.from=test@internet-lab.ru

Настройка DKIM

Настроим DKIM, чтобы наши письма меньше попадали в спам.

DomainKeys Identified Mail (DKIM) — метод e-mail аутентификации, разработанный для обнаружения подделывания сообщений, пересылаемых по email. Метод дает возможность получателю проверить, что письмо действительно было отправлено с заявленного домена.

Postfix — настройка DKIM 2

Настройки для DKIM мы уже добавляли в /etc/postfix/main.cf:

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
disable_mime_output_conversion = yes

Здесь "disable_mime_output_conversion = yes" — патч для исправления ошибки с кириллицей.

Postfix — не работает DKIM с кириллицей

Ставим opendkim.

apt-get install opendkim opendkim-tools

Создаём каталог для ключей и сгенерируем ключ (пока для одного домена):

mkdir /etc/opendkim
chown opendkim:opendkim /etc/opendkim
opendkim-genkey -D /etc/opendkim/ --domain internet-lab.ru --selector post

Где:

  • internet-lab.ru — наш домен
  • post — наш селектор который мы выбрали для данного почтового сервера

Появится два файла /etc/opendkim/post.private и /etc/opendkim/post.txt с секретным и публичным ключами.

postfix

Публичный ключ нужно добавить в соответствующую TXT запись нашего домена.

post._domainkey  IN  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCA....QAB"

postfix

Ключ может не влезать, тогда его нужно разбить на несколько строк (открывающиеся кавычки должны быть в начале строки, перед ними не должно быть пробелов и табуляции).

myselector._domainkey  IN  TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQK"
"..."
"..."
"........DAQAB" )

Если раньше не добавляли, то добавляем и остальные необходимые записи для DKIM.

_domainkey.internet-lab.ru. IN TXT "t=y; o=~;"
_adsp._domainkey.internet-lab.ru. IN TXT "dkim=all"

mail

Настраиваем /etc/opendkim.conf.

Syslog                  Yes
SyslogSuccess           Yes
LogWhy                  Yes

UMask                   007
Mode                    sv

SOCKET inet:8891@localhost

PidFile                 /run/opendkim/opendkim.pid
OversignHeaders         From
TrustAnchorFile         /usr/share/dns/root.key

UserID                  opendkim

InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable

dkim

Создаём файл /etc/opendkim/TrustedHosts. Здесь те же сети, что и в файле настроек /etc/postfix/main.cf в пункте mynetworks.

vim /etc/opendkim/TrustedHosts
127.0.0.1
localhost
10.0.0.7/32

Создаём файл /etc/opendkim/KeyTable.

vim /etc/opendkim/KeyTable
post._domainkey.internet-lab.ru internet-lab.ru:post:/etc/opendkim/post.private

Создаём файл /etc/opendkim/SigningTable.

vim /etc/opendkim/SigningTable
*@internet-lab.ru post._domainkey.internet-lab.ru

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

chown :opendkim /etc/opendkim/*

Устанавливаем права на секретный ключ.

chmod 640 /etc/opendkim/post.private

В /etc/default/opendkim необходимо указать сокет, который будет слушать opendkim (другие директивы SOCKET необходимо закомментировать). Это не обязательно, вроде бы, потому как сокет уже ранее мы указали, но для совместимости со старыми версиями пусть будет.

SOCKET="inet:8891@localhost"

Перезапускаем postfix и opendkim:

service opendkim restart
service postfix restart

Осталось только проверить и отправить письмо. Тестовое письмо отправлено и дошло. В логах видим:

opendkim[245183]: D572446BE9: DKIM-Signature field added (s=post, d=internet-lab.ru)

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

dkim=pass header.d=internet-lab.ru; dmarc=pass header.from=info@internet-lab.ru

Подкручиваем гайки

Я не собираюсь считать статистику сколько писем не дошло. Поэтому отключаю отправку отчетов от MAILER_DAEMON. В файле /etc/postfix/master.cf меняем строку:

bounce    unix  -       -       y       -       0       discard

Не забываем про:

service postfix restart

Теги

 

Похожие материалы

Postfix с SMTP аутентификацией Cyrus

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

Теги