Предыдущая версия данного обучающего руководства была написана Джастином Эллингвудом
Postfix — популярный почтовый агент (MTA) с открытым исходным кодом, который можно использовать для маршрутизации и доставки почты в системе Linux. Согласно оценкам, примерно 25% публичных почтовых серверов в Интернете используют Postfix.
В этом руководстве мы расскажем, как установить и настроить Postfix на сервере Ubuntu 20.04. Затем мы протестируем способность Postfix правильно выполнять маршрутизацию, выполнив установку s-nail
, почтового пользовательского агента (MUA), также называемого клиентом электронной почты.
Обратите внимание, что цель данного обучающего модуля — помочь вам быстро развернуть Postfix с базовыми функциями работы с электронной почтой. К окончанию прохождения этого руководства у вас не будет полнофункционального сервера электронной почты, но будут некоторые базовые компоненты для создания такого сервера.
Для прохождения этого обучающего модуля вам потребуется следующее:
sudo
, а также брандмауэр, настроенный с помощью UFW. Для выполнения этого требования следуйте указаниям нашего руководства по начальной настройке сервера Ubuntu 20.04.Для этого обучающего модуля предполагается, что вы настраиваете хост с доменным именем mail.example.com
. При необходимости заменяйте example.com
или mail.example.com
собственным полным доменным именем.
Postfix включен в репозиторий Ubuntu по умолчанию, так что вы можете установить его с помощью APT.
Для начала обновите локальный кэш пакетов apt
:
- sudo apt update
Затем установите пакет postfix
с помощью следующей команды. Обратите внимание, что мы передаем переменную среды DEBIAN_PRIORITY=low
в эту команду установки. В связи с этим, процедура установки предложит вам настроить некоторые дополнительные опции:
- sudo DEBIAN_PRIORITY=low apt install postfix
Процедура установки откроет серию интерактивных диалогов. Для целей данного обучающего модуля введите в диалогах следующие данные:
mail.example.com
. Возможно вы захотите задать для системной почты имя example.com
. В этом случае для имени пользователя user1
Postfix будет использовать адрес user1@example.com
.root@
и postmaster@
. Используйте для этой цели свою основную учетную запись. В данном примере это имя пользователя sammy.0
» отключает любые ограничения размера.+
».Приведем настройки, использованные в этом руководстве:
example.com
(не mail.example.com
)$myhostname, example.com, mail.example.com, localhost.example.com, localhost
127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
0
+
Примечание. Если впоследствии вам потребуется изменить эти настройки, введите команду:
- sudo dpkg-reconfigure postfix
Для параметров будут указаны заданные ранее значения.
После завершения процедуры установки можно внести некоторые изменения в конфигурацию Postfix.
Теперь вы можете изменить дополнительные настройки, которые не предлагались в диалогах процедуры установки. Многие параметры конфигурации Postfix заданы в файле /etc/postfix/main.cf
. Вместо того, чтобы редактировать этот файл напрямую, вы можете использовать команду Postfix postconf
для запроса или установки параметров конфигурации.
Для начала задайте расположение почтового ящика пользователя Ubuntu без прав root. В этом обучающем модуле мы используем формат Maildir, в котором соообщения выделяются в отдельные файлы, перемещаемые между каталогами в зависимости от действий пользователя. Также существует возможность хранить все сообщения в одном файле в формате mbox, но мы не рассматриваем ее в этом обучающем модуле.
Задайте для переменной home_mailbox
значение Maildir/
. Впоследствии вы создадите структуру каталогов с этим именем в своем домашнем каталоге пользователя. Настройте 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'
Мы определили расположение файла виртуальной карты в файле main.cf
и теперь можем создать сам файл и начать сопоставление учетных записей электронной почты с учетными записями пользователей в системе Linux. Создайте файл в nano
или другом предпочитаемом текстовом редакторе:
- sudo nano /etc/postfix/virtual
Укажите все адреса, для которых вы хотите получать электронную почту, а затем укажите через пробел имя пользователя Linux, которому должна доставляться эта почта.
Например, если вы хотите принимать электронную почту на адреса contact@example.com
и admin@example.com
и доставлять ее пользователю Linux с именем sammy, файл можно настроить следующим образом:
contact@example.com sammy
admin@example.com sammy
После сопоставления всех почтовых адресов с соответствующими учетными записями сервера вы можете сохранить и закрыть файл. Если вы использовали nano
, нажмите CTRL + X
, Y
, а затем ENTER
.
Примените сопоставление:
- sudo postmap /etc/postfix/virtual
Перезапустите процесс Postfix, чтобы все изменения были применены:
- sudo systemctl restart postfix
Если вы следовали указаниям руководства по начальной настройке сервера, вы настроили брандмауэр с помощью UFW. Этот брандмауэр по умолчанию блокирует внешние подключения к службам вашего сервера, если эти подключения прямо не разрешены, и поэтому вам нужно будет добавить исключение для Postfix в правило брандмауэра.
Вы можете разрешить подключение к службе с помощью следующей команды:
- sudo ufw allow Postfix
Теперь Postfix настроен и готов принимать внешние подключения. Однако мы еще не готовы тестировать его с помощью почтового клиента. Прежде чем устанавливать почтовый клиент и использовать его для взаимодействия с доставляемой на сервер почтой, необходимо внести некоторые изменения в настройки сервера Ubuntu.
Этот шаг поможет вам установить пакет s-nail
для взаимодействия с доставляемой почтой. Это функциональный вариант почтового клиента BSD xmail
, правильно работающий с форматом Maildir.
Перед установкой клиента желательно проверить настройку переменной среды MAIL
. Клиент s-nail
использует эту переменную для определения мест поиска почты для вашего пользователя.
Если требуется гарантированно задать переменную MAIL
вне зависимости от способа доступа к учетной записи (через 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
Чтобы прочитать переменную для текущего сеанса, в качестве источника можно использовать файл /etc/profile.d/mail.sh
:
- source /etc/profile.d/mail.sh
Выполнив этот шаг, установите клиент электронной почты s-nail
с помощью APT:
- 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
внутреннюю переменную
folderset record=+sent
создает файл sent
в формате mbox для хранения отправленной почты в каталоге, заданном в переменной folder
, в данном случае Maildir
Сохраните файл и закройте его после завершения. Теперь вы готовы инициализировать структуру Maildir в вашей системе.
Чтобы быстро создать структуру Maildir в домашнем каталоге, отправьте себе электронное письмо с помощью команды s-nail
. Поскольку файл sent
будет доступен только после создания Maildir, для этого первого письма нужно отключить запись в этот файл. Используйте для этого опцию -Snorecord
.
Для отправки письма добавьте строку в команду s-nail
. Измените команду, чтобы сделать получателем вашего пользователя Linux:
- echo 'init' | s-nail -s 'init' -Snorecord sammy
Примечание. Вы можете получить следующий ответ:
OutputCan't canonicalize "/home/sammy/Maildir"
Это нормально, и такой ответ может появиться только при отправке первого сообщения.
Для проверки создания каталога выполните поиск каталога ~/Maildir
:
- 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
и отправим сообщение на сторонний адрес электронной почты.
Чтобы открыть клиент, запустите команду s-nail
:
- s-nail
В консоли вы увидите рудиментарную папку входящих с ожидающим сообщением init
:
Outputs-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
:
- h
Output>R 1 sammy@example.com 2020-05-19 15:40 14/392 init
Теперь сообщение имеет состояние R
, означающее, что оно прочитано.
Поскольку это сообщение не очень полезно, мы можем удалить его, введя d
и нажав ENTER
:
- d
Чтобы вернуться к терминалу, введите q
и нажмите ENTER
:
- q
В качестве последнего испытания проверим, может ли s-nail
правильно отправлять электронные сообщения. Для этого передадим содержимое текстового файла text в процесс s-nail
, как мы делали это с сообщением init
на предыдущем шаге.
Для начала напишем тестовое сообщение в текстовом редакторе:
- nano ~/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
на корректный адрес электронной почты, к которому у вас имеется доступ:
- cat ~/test_message | s-nail -s 'Test email subject line' -r contact@example.com user@email.com
Перейдите в папку входящих для адреса электронной почты, на который вы уже отправили сообщение. Ваше сообщение должно появиться там практически сразу же.
Примечание. Если сообщение отсутствует в почтовом ящике, оно может быть доставлено в папку Spam.
Вы можете просмотреть отправленные сообщения в клиенте s-nail
. Запустите интерактивный клиент еще раз:
- s-nail
Для просмотра отправленных сообщений в клиенте электронной почты введите:
- 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.
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