Tutorial

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

Published on July 16, 2020
Русский
Установка и настройка Postfix в Ubuntu 20.04

Предыдущая версия данного обучающего руководства была написана Джастином Эллингвудом

Введение

Postfix — популярный почтовый агент (MTA) с открытым исходным кодом, который можно использовать для маршрутизации и доставки почты в системе Linux. Согласно оценкам, примерно 25% публичных почтовых серверов в Интернете используют Postfix.

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

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

Предварительные требования

Для прохождения этого обучающего модуля вам потребуется следующее:

  • Сервер под управлением Ubuntu 20.04, который будет работать как ваш почтовый сервер Postfix. Этот сервер должен иметь пользователя без прав root с привилегиями sudo, а также брандмауэр, настроенный с помощью UFW. Для выполнения этого требования следуйте указаниям нашего руководства по начальной настройке сервера Ubuntu 20.04.
  • Полное доменное имя, указывающее на ваш сервер Ubuntu 20.04. Помощь по настройке доменного имени в DigitalOcean можно найти в нашей документации по доменам и сетям DNS. Помните, что если вы планируете получать доступ к почте из внешнего источника, вам также потребуется запись MX, указывающая на ваш почтовый сервер.

Для этого обучающего модуля предполагается, что вы настраиваете хост с доменным именем mail.example.com. При необходимости заменяйте example.com или mail.example.com собственным полным доменным именем.

Шаг 1 — Установка Postfix

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

Для начала обновите локальный кэш пакетов apt:

  1. sudo apt update

Затем установите пакет postfix с помощью следующей команды. Обратите внимание, что мы передаем переменную среды DEBIAN_PRIORITY=low в эту команду установки. В связи с этим, процедура установки предложит вам настроить некоторые дополнительные опции:

  1. sudo DEBIAN_PRIORITY=low apt install postfix

Процедура установки откроет серию интерактивных диалогов. Для целей данного обучающего модуля введите в диалогах следующие данные:

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

Приведем настройки, использованные в этом руководстве:

  • General type of mail configuration?: Internet Site
  • System mail name: example.com (не mail.example.com)
  • Root and postmaster mail recipient: имя пользователя основной учетной записи Linux (в наших примерах sammy)
  • 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

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

  1. sudo dpkg-reconfigure postfix

Для параметров будут указаны заданные ранее значения.

После завершения процедуры установки можно внести некоторые изменения в конфигурацию Postfix.

Шаг 2 — Изменение конфигурации Postfix

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

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

Задайте для переменной home_mailbox значение Maildir/. Впоследствии вы создадите структуру каталогов с этим именем в своем домашнем каталоге пользователя. Настройте home_mailbox с помощью следующей команды:

  1. sudo postconf -e 'home_mailbox= Maildir/'

Задайте расположение таблицы virtual_alias_maps, где произвольные учетные записи электронной почты сопоставляются с системными учетными записями Linux. Запустите следующую команду, сопоставляющую расположение таблицы с файлом базы данных хэша под именем /etc/postfix/virtual:

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

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

  1. sudo nano /etc/postfix/virtual

Укажите все адреса, для которых вы хотите получать электронную почту, а затем укажите через пробел имя пользователя Linux, которому должна доставляться эта почта.

Например, если вы хотите принимать электронную почту на адреса contact@example.com и admin@example.com и доставлять ее пользователю Linux с именем sammy, файл можно настроить следующим образом:

/etc/postfix/virtual
contact@example.com sammy
admin@example.com sammy

После сопоставления всех почтовых адресов с соответствующими учетными записями сервера вы можете сохранить и закрыть файл. Если вы использовали nano, нажмите CTRL + X, Y, а затем ENTER.

Примените сопоставление:

  1. sudo postmap /etc/postfix/virtual

Перезапустите процесс Postfix, чтобы все изменения были применены:

  1. sudo systemctl restart postfix

Если вы следовали указаниям руководства по начальной настройке сервера, вы настроили брандмауэр с помощью UFW. Этот брандмауэр по умолчанию блокирует внешние подключения к службам вашего сервера, если эти подключения прямо не разрешены, и поэтому вам нужно будет добавить исключение для Postfix в правило брандмауэра.

Вы можете разрешить подключение к службе с помощью следующей команды:

  1. sudo ufw allow Postfix

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

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

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

Перед установкой клиента желательно проверить настройку переменной среды MAIL. Клиент s-nail использует эту переменную для определения мест поиска почты для вашего пользователя.

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

Чтобы добавить переменную в эти файлы, введите:

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

Чтобы прочитать переменную для текущего сеанса, в качестве источника можно использовать файл /etc/profile.d/mail.sh:

  1. source /etc/profile.d/mail.sh

Выполнив этот шаг, установите клиент электронной почты s-nail с помощью APT:

  1. sudo apt install s-nail

Перед запуском клиента необходимо изменить несколько настроек. Откройте файл /etc/s-nail.rc в своем редакторе:

  1. sudo nano /etc/s-nail.rc

Добавьте в конец файла следующие опции:

/etc/s-nail.rc
. . .
set emptystart
set folder=Maildir
set record=+sent

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

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

Сохраните файл и закройте его после завершения. Теперь вы готовы инициализировать структуру Maildir в вашей системе.

Чтобы быстро создать структуру Maildir в домашнем каталоге, отправьте себе электронное письмо с помощью команды s-nail. Поскольку файл sent будет доступен только после создания Maildir, для этого первого письма нужно отключить запись в этот файл. Используйте для этого опцию -Snorecord.

Для отправки письма добавьте строку в команду s-nail. Измените команду, чтобы сделать получателем вашего пользователя Linux:

  1. echo 'init' | s-nail -s 'init' -Snorecord sammy

Примечание. Вы можете получить следующий ответ:

Output
Can't canonicalize "/home/sammy/Maildir"

Это нормально, и такой ответ может появиться только при отправке первого сообщения.

Для проверки создания каталога выполните поиск каталога ~/Maildir:

  1. ls -R ~/Maildir

Вы увидите, что структура каталогов создана, и что новый файл сообщений находится в каталоге ~/Maildir/new:

Output
/home/sammy/Maildir/: cur new tmp /home/sammy/Maildir/cur: /home/sammy/Maildir/new: 1463177269.Vfd01I40e4dM691221.mail.example.com /home/sammy/Maildir/tmp:

Структура каталогов создана, и теперь мы готовы протестировать клиент s-nail. Для этого мы просмотрим отправленное вами сообщение init и отправим сообщение на сторонний адрес электронной почты.

Шаг 5 — Тестирование клиента

Чтобы открыть клиент, запустите команду s-nail:

  1. s-nail

В консоли вы увидите рудиментарную папку входящих с ожидающим сообщением init:

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

Нажмите ENTER, чтобы вывести сообщение:

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

Вы можете вернуться к списку сообщений, введя h и нажав ENTER:

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

Теперь сообщение имеет состояние R, означающее, что оно прочитано.

Поскольку это сообщение не очень полезно, мы можем удалить его, введя d и нажав ENTER:

  1. d

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

  1. q

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

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

  1. nano ~/test_message

Введите текст, которы вы хотите отправить:

~/test_message
Hello,

This is a test.  Please confirm receipt!

Сохраните и закройте файл после написания сообщения.

Затем используйте команду cat для передачи сообщения в процесс s-nail. Для этого можно использовать следующий пример, где используются следующие опции:

  • -s: задает строку темы электронного сообщения
  • -r: изменение поля «From» письма. По умолчанию в этом поле указан текущий пользователь Linux. Опция -r позволяет заменить его корректным адресом, в том числе определенным в файле /etc/postfix/virtual. Например, в следующей команде используется адрес contact@example.com

Также следует заменить user@email.com на корректный адрес электронной почты, к которому у вас имеется доступ:

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

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

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

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

  1. s-nail

Для просмотра отправленных сообщений в клиенте электронной почты введите:

  1. file +sent

Вывод будет выглядеть следующим образом:

Output
+[/home/sammy/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 для работы с электронной почтой, чтобы начать эту работу.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors

Default avatar

Manager, Developer Education

Technical Writer @ DigitalOcean


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
6 Comments


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Does Digital Ocean allow outgoing mail to be sent on port 25?

This comment has been deleted

    This comment has been deleted

      This comment has been deleted

        in result it didn’t create ~/Maildir :( can it be problem because of i didn’t make records to MX?

        I have this error, how can i fix that? ls: cannot access ‘/root/Maildir’: No such file or directory

        Try DigitalOcean for free

        Click below to sign up and get $200 of credit to try our products over 60 days!

        Sign up

        Join the Tech Talk
        Success! Thank you! Please check your email for further details.

        Please complete your information!

        Get our biweekly newsletter

        Sign up for Infrastructure as a Newsletter.

        Hollie's Hub for Good

        Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

        Become a contributor

        Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

        Welcome to the developer cloud

        DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

        Learn more
        DigitalOcean Cloud Control Panel