Установка и настройка Postfix в Ubuntu 20.04

Postfix – это агент пересылки сообщений (англ. Mail Transfer Agent, или MTA), приложение для отправки и получения электронной почты. Согласно исследованиям, около 25% серверов используют Postfix.

В этом мануале мы расскажем, как установить и настроить Postfix на сервере Ubuntu 20.04. Чтобы Postfix мог правильно маршрутизировать почту, мы установим s-nail, Mail User Agent (MUA), также известный как почтовый клиент.

Обратите внимание, что цель этого мануала – помочь вам быстро установить и запустить Postfix с базовыми функциями электронной почты. Выполнив мануал, вы не получите полнофункционального почтового сервера, но у вас будут базовые компоненты для такой настройки.

Требования

  • Сервер Ubuntu 20.04, настроенный по этому мануалу. Для установки почтового сервера войдите в систему как пользователь sudo.
  • Валидное доменное имя (в данном руководстве используется условный домен mail.example.com). Инструкции можно найти в мануале Как настроить имя хоста.

1: Установка Postfix

Пакеты Postfix можно найти в стандартном репозитории Ubuntu, потому установить его очень просто.

Для начала обновите индекс пакетов:

sudo apt update

Затем установите пакет postfix. Передайте переменную окружения DEBIAN_PRIORITY=low, чтобы ответить на дополнительные запросы программы.

sudo DEBIAN_PRIORITY=low apt install postfix

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

  • General type of mail configuration? Выберите один из предложенных типов настройки, соответствующий вашим требованиям. В данном случае используется Internet Site.
  • System mail name: базовый домен, который будет указан в адресе после @. Например, имя хоста – mail.example.com, но в этом параметре лучше указать example.com. Тогда почта пользователя user1 будет выглядеть так: user1@example.com.
  • Root and postmaster mail recipient: аккаунт Linux, который будет получать почту, предназначенную для root@ или postmaster@.
  • Other destinations to accept mail for: определяет получателей почты, которые будут разрешены Postfix. Другими словами, сюда можно добавить какие-либо другие домены, за прием почты которых будет отвечать этот сервер Postfix.
  • Force synchronous updates on mail queue? Если вы используете журнальную файловую систему, выберите No.
  • Local networks: список сетей, сообщения которых будут ретранслироваться почтовым сервером. В большинстве случаев подойдёт значение по умолчанию. Если вы решите изменить его, строго ограничьте диапазон сети.
  • Mailbox size limit: устанавливает ограничения размеров сообщения. Значение 0 снимает все ограничения.
  • Local address extension character: символ, который используется для разделения обычной части адреса и расширения (используется для создания динамических алиасов).
  • Internet protocols to use: позволяет ограничить поддержку версий IP. Мы выберем здесь all.

Предлагаем вам использовать следующие значения:

  • General type of mail configuration?: Internet Site
  • System mail name: example.com (не mail.example.com)
  • Root and postmaster mail recipient: 8host
  • Other destinations to accept mail for: $myhostname, example.com, mail.example.com, localhost.example.com, localhost
  • Force synchronous updates on mail queue?: No
  • Local networks: : 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
  • Mailbox size limit: 0
  • Local address extension character: +
  • Internet protocols to use: all

Примечание: Если в дальнейшем вам понадобится изменить эти параметры, введите:

sudo dpkg-reconfigure postfix

При этом все строки будут содержать предыдущие значения.

2: Тонкая настройка Postfix

После этого можно настроить значения, которые были пропущены в начальной настройке. Многие конфигурации Postfix хранятся в файле /etc/postfix/main.cf. Чтобы не редактировать этот файл вручную, используйте команду postconf, с помощью которой можно внести в этот файл новые значения.

Для начала нужно настроить почтовый ящик. В руководстве будет использоваться формат maildir, определяющий сообщения в отдельные файлы, которые затем перемещаются между каталогами в зависимости от действий пользователя. Также можно выбрать формат mbox, который хранит все сообщения в одном файле.

Установите в переменной home_mailbox значение Maildir/. Это создаст структуру каталогов под этим именем в домашнем каталоге пользователя. Команда postconf позволяет запрашивать и устанавливать параметры настроек. Чтобы настроить home_mailbox, введите:

sudo postconf -e 'home_mailbox= Maildir/'

Затем задайте расположение таблицы virtual_alias_maps. Она связывает произвольные учетные записи электронной почты с учетными записями системы Linux. Создайте таблицу в /etc/postfix/virtual:

sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'

Теперь, когда вы определили расположение файла virtual в файле main.cf, вы можете создать сам файл и начать связывать учетные записи электронной почты с учетными записями пользователей в вашей системе Linux. Создайте файл в текстовом редакторе:

sudo nano /etc/postfix/virtual

Слева нужно перечислить все адреса, которые должны принимать почту. Через пробел указаны системные пользователи, которые будут получать почту того или иного адреса. К примеру, чтобы системный пользователь 8host мог принимать почту по адресам contact@example.com и admin@example.com, нужно ввести:

contact@example.com 8host
admin@example.com 8host

Привязав все почтовые адреса к соответствующим системным пользователям, сохраните и закройте файл.

Чтобы принять новые параметры, введите:

sudo postmap /etc/postfix/virtual

Перезапустите Postfix:

sudo systemctl restart postfix

Во время начальной настройки сервера вы, вероятно, включили брандмауэр. Сейчас он блокирует трафик почтового сервера. Чтобы изменить это, вам нужно добавить правило для поддержки трафика Postfix.

Для этого введите:

sudo ufw allow Postfix

Теперь Postfix настроен и готов принимать внешние подключения. Однако пока что мы не можем проверить это с помощью почтового клиента. Прежде чем вы сможете установить клиент и использовать его для взаимодействия с сервером, вам нужно внести несколько изменений в настройки сервера Ubuntu.

3: Установка почтового клиента и инициализация структуры Maildir

Чтобы взаимодействовать с входящей почтой, установите пакет s-nail. Это вариант BSD xmail клиента с большим количеством функций и поддержкой формата Maildir.

Но прежде чем приступить к установке клиента, нужно установить переменную среды MAIL. Клиент s-nail будет проверять эту переменную, чтобы определить, где сохраняется входящая почта.

Чтобы переменная не учитывала способа подключения к аккаунту (через ssh, su, su -, sudo и т.п.), нужно установить её в нескольких разных файлах. Добавьте переменную в /etc/bash.bashrc и в файл в /etc/profile.d. Для этого введите:

echo 'export MAIL=~/Maildir' | sudo tee -a /etc/bash.bashrc | sudo tee -a /etc/profile.d/mail.sh

Чтобы переменная была считана в текущей сессии, введите:

source /etc/profile.d/mail.sh

Теперь можно установить s-nail. Введите:

sudo apt install s-nail

Отредактируйте несколько параметров клиента, прежде чем запустить его. Откройте /etc/s-nail.rc:

sudo nano /etc/s-nail.rc

В конец файла добавьте:

. . .
set emptystart
set folder=Maildir
set record=+sent

Вот что делают эти строки:

  • set emptystart: позволяет открывать клиент, даже если почтовый ящик пуст
  • set folder=Maildir: устанавливает каталог Maildir во внутренней переменной folder.
  • set record=+sent создает файл sent для хранения отправленной почты в любом каталоге, заданном в качестве переменной folder (в данном случае это Maildir)

Сохраните и закройте файл.

Самый простой способ создать структуру Maildir в домашнем каталоге – это отправить себе электронную почту. Это делается с помощью команды s-nail.

Поскольку отправленный файл будет доступен только после создания Maildir, нужно закрыть каталог для записи. Для этого используйте флаг –Snorecord.

Отправьте сообщение, заменив 8host именем своего системного пользователя.

echo 'init' | s-nail -s 'init' -Snorecord 8host

Команда может вернуть:

Can't canonicalize "/home/8host/Maildir"

Это нормальное поведение программы при отправке первого сообщения. Убедитесь в том, что каталог ~/Maildir был создан:

ls -R ~/Maildir

На экране должна появиться структура каталогов и сообщение в каталоге ~/Maildir/new:

/home/8host/Maildir/:
cur  new  tmp
/home/8host/Maildir/cur:
/home/8host/Maildir/new:
1463177269.Vfd01I40e4dM691221.mail.example.com
/home/8host/Maildir/tmp:

Теперь можно протестировать клиент s-nail, просмотрев отправленное вами сообщение и отправив сообщение на внешний адрес электронной почты.

4: Тестирование почтового клиента

Чтобы проверить почту, введите:

s-nail

В консоли вы увидите входящее сообщение:

s-nail version v14.9.15.  Type `?' for help
"/home/8host/Maildir": 1 message 1 new
>N  1 8host@example.com     2020-05-19 15:40   14/392   init

Чтобы просмотреть сообщение, просто нажмите Enter:

[-- Message  1 -- 14 lines, 369 bytes --]:
From 8host@example.com Tue May 19 15:40:48 2020
Date: Tue, 19 May 2020 15:40:48 +0000
To: 8host@example.com
Subject: init
Message-Id: <20160513220749.A278F228D9@mail.example.com>
From: 8host@example.com
init

Чтобы вернуться к списку сообщений, нажмите h, а затем Enter:

h
>R  1 8host@example.com     2020-05-19 15:40   14/392   init

Чтобы удалить сообщение, нажмите d и Enter:

d

Чтобы вернуться в терминал, нажмите q и Enter:

q

В качестве последнего теста мы попробуем отправить сообщение с помощью клиента s-nail. Вы можете передать текстовый файл процессу s-nail так же, как вы передавали ранее сообщение init.

Введите сообщение в текстовый редактор:

nano ~/test_message
Hello,
This is a test.  Please confirm receipt!

Сохраните и закройте файл.

При помощи команды cat передайте сообщение процессу s-nail. Отправителем сообщения по умолчанию будет текущий системный пользователь.

В команде использованы опции:

  • -s: тема сообщения.
  • -r: опция для изменения отправителя (строка From). По умолчанию отправителем письма является текущий системный пользователь Linux. С помощью этой опции такое поведение можно обойти.
  • user@email.com: получатель сообщения.

cat ~/test_message | s-nail -s 'Test email subject line' -r contact@example.com user@email.com

Затем перейдите в папку входящих для адреса, на который вы отправили сообщение. Вы почти сразу увидите там ваше сообщение.

Примечание: Если сообщение отсутствует в папке «Входящие», возможно, оно попало в спам.

Клиент s-nail позволяет просматривать отправленные сообщения. Запустите клиент в интерактивном режиме:

s-nail

Чтобы просмотреть отправленное сообщение, введите:

file +sent

Вы получите такой вывод:

+[/home/8host/Maildir/]sent: 1 message 1 new
▸N  1 contact@example.com 2020-05-19 15:47   12/297   Test email subject line

Отправленными сообщениями можно управлять при помощи тех же команд, что и входящей почтой.

Заключение

Теперь почтовый сервер Postfix установлен и настроен на сервере Ubuntu 20.04. Управление почтой – сложная задача для новичка, но эта настройка предоставит вам базовые функции MTA. Вы можете использовать эту настройку в качестве основы для создания более сложного почтового сервера.

Tags: , ,