Postfix – это программный продукт, позволяющий организовать почтовый сервер. Он был создан как альтернатива Sendmail – старейшему агенту передачи почты (MTA – Mail Transfer Agent). Postfix распространяется с открытым исходным кодом и используется разработчиками для маршрутизации и пересылки почтовых писем внутри системы Linux.
В ходе сегодняшней статьи мы подробно рассмотрим, как выполняется установка и настройка Postfix на сервере Ubuntu 20.04, а также поговорим о том, что представляет собой Dovecot и как правильно его установить в связке с Postfix.
Требования
Прежде чем переходить к установке программного средства, рекомендуем ознакомиться c необходимыми требованиями. Для реализации рассматриваемой задачи нам потребуется:
- Сервер на Ubuntu 20.04, который будет функционировать в режиме почтовой службы. Требуется, чтобы он включал в себя пользователя без прав root с привилегиями sudo. Вместе с этим также необходим брандмауэр, настроенный с помощью Uncomplicated Firewall (UFW).
- Доменное имя сервера. Если вам потребуется получить доступ к почте из внешнего источника, то нужно также позаботиться об MX-записи, которая будет указывать на почтовый сервер.
Обратите внимание на то, что настройка хоста будет выполняться с доменным именем типа email.example2.com. В последующем вам потребуется заменить все подобные значения на свое собственное доменное имя.
Как установить Postfix
По умолчания Postfix включен в репозиторий операционной системы Ubuntu, поэтому с установкой не должно возникнуть никаких проблем. Провести ее мы можем с использованием команды apt.
Первым делом обновляем кэш пакетов:
sudo apt update
Затем устанавливаем непосредственно сам пакет Postfix. Здесь важно обратить внимание на значение DEBIAN_PRIORITY=low – оно позволяет нам подключить некоторые дополнительные опции.
sudo DEBIAN_PRIORITY=low apt install postfix
В результате перед нами отобразится ряд вопросов и сообщений. Отвечаем на них следующим образом:
- General type of mail configuration? – в нашем случае мы указываем значение «Internet Site», но оно может отличаться в зависимости от инфраструктуры.
- System mail name – стандартный домен, который используется для создания точного адреса электронной почты. Он необходим в тех случаях, когда имеется только часть адреса с именем профиля. Например, имя сервера email.example2.com, но мы хотим, чтобы имя системной почты выглядело как example2.com. В этом случае для пользователя user будет использоваться адрес user@example2.com.
- Root and postmaster mail recipient – это аккаунт Linux, на который будет перенаправляться почта, адресованная root@ и postmaster@. В данном случае вам потребуется использовать свою учетную запись, например, UserNameZ7.
- 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».
Все вышеуказанные настройки мы в любой момент времени можем подкорректировать. Чтобы открыть окно редактирования, достаточно ввести:
sudo dpkg-reconfigure postfix
На этом установка Postfix на Ubuntu завершена, теперь можем переходить к более детальным настройкам.
Настройка Postfix
Большинство настроек конфигурации Postfix заданы в файле main.cf, который можно найти по адресу /etc/postfix/main.cf. Здесь мы можем пойти следующим образом: изменять параметры непосредственно в самом файле либо воспользоваться командой postconf.
Для настройки Postfix первым делом нам потребуется прописать расположение почты обычного пользователя Ubuntu. В нашем случае мы используем формат Maildir – в нем сообщения выделяются в отдельные файлы, перемещаемые между каталогами. Также вы можете хранить сообщения в формате mbox или любом удобном для вас.
Указываем значение 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'
Теперь мы можем начать сопоставление учетных записей почты с профилями пользователей в ОС Linux. Для этого создадим файл в nano, вы же можете выбрать любой другой текстовый редактор:
sudo nano /etc/postfix/virtual
Записываем все адреса, для которых мы хотим получать электронную почту, а также прописываем пользователей Ubuntu Postfix, которым будут приходить письма. Для примера возьмем следующую ситуацию: нам нужно получать все письма на адреса excontact@example2.com и exadmin@examlpe2.com и отправлять их пользователю операционной системы Linux с именем UserNameZ7. В таком случае настройка файла будет выглядеть следующим образом:
excontact@example2.com UserNameZ7 exadmin@examlpe2.com UserNameZ7
После успешного ввода данных сохраняемся и выходим из файла. В нашем случае это редактор nano, поэтому зажимаем на клавиатуре комбинацию клавиш «CTRL+X, Y» и жмем «Enter». После этого осуществляем сопоставление строчкой кода:
sudo postmap /etc/postfix/virtual
Затем перезагружаемся командой:
sudo systemctl restart postfix
Если брандмауэр был настроен с помощью UFW, вам потребуется добавить одно исключение. Это связано с тем, что UFW по умолчанию блокирует все внешние подключения к службам сервера. Решить проблему можно одной строчкой кода:
sudo ufw allow Postfix
Готово! Настройка Postfix на Ubuntu 20.04 прошла успешно. Теперь было бы хорошо его протестировать на почтовом клиенте, но сделать этого мы пока не можем. Прежде чем установить почтовый клиент, для начала нам нужно внести некоторые корректировки в параметры сервера Ubuntu.
Установка почтового клиента
В данном разделе мы установим пакет s-nail для взаимодействия с доставляемой почтой. Перед тем как начать установку, рекомендуем проверить настройку переменной среды «MAIL». Клиенту эта переменная необходима для того, чтобы определять места почты для пользователя.
Если необходимо гарантированно задать переменную MAIL, вне зависимости от способа доступа к учетной записи, потребуется указать ее в файле /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
Пока что не запускаем его, добавим в него несколько записей. Сначала откроем файл в редакторе nano:
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 в формате mbox для хранения отправленной почты в каталоге, заданном в переменной folder.
На этом с файлом заканчиваем – сохраняемся и закрываем его. Теперь нам потребуется выполнить еще одно действие – инициализировать структуру Maildir. Чтобы это сделать, необходимо отправить себе электронное письмо командой s-nail. Так как файл sent доступен только после создания Maildir, потребуется отключить запись в этот файл. Для этого воспользуемся командой -Snorecord.
Для отправки письма добавим строку в команду s-nail. Обратите внимание, что в конце указывается имя пользователя – вам потребуется изменить его на свое.
echo 'init' | s-nail -s 'init' -Snorecord UserNameZ7
В ответе вы можете увидите сообщение:
Can't canonicalize "/home/sammy/Maildir"
Это нормально – такое сообщение обычно появляется только при первой отправке.
Убедимся, что каталог был создан:
ls -R ~/Maildir
В результате должно отобразиться примерно следующее:
/home/ UserNameZ7/Maildir/: cur new tmp /home/ UserNameZ7/Maildir/cur: /home/ UserNameZ7/Maildir/new: 1463177269.Vfd01I40e4dM691221.mail.example.com /home/ UserNameZ7/Maildir/tmp:
Теперь мы можем перейти к тестированию почтового клиента.
Тестирование отправки почты
Для начала запустим клиент, для этого используем команду:
s-nail
Чтобы отправить сообщение, передадим содержимое текстового файла в процесс s-nail. Откроем для этого текстовый редактор:
nano ~/test_message
Пропишем туда сообщение, например:
Привет! Это тестовое сообщение.
Сохраняемся и закрываем редактор. Для передачи сообщения в s-nail, используем команду cat. Она может принимать следующие значения:
- -s – задает строку темы сообщения;
- -r – изменяет поле «From», в котором по умолчанию указан текущий пользователь Linux. Данный параметр необходим для того, что заменить его на необходимый адрес, например, на excontact@example2.com.
Также вам потребуется заменить последний адрес, указанный в строчке кода:
cat ~/test_message | s-nail -s 'Test email subject line' -r contact@example2.com exuser@example2.com
После этого на указанную электронную почту должно прийти письмо. Чтобы проверить отправленные сообщения через s-nail, нужно прописать file +sent, где file – ваше уникальное название.
Установка и настройка Dovecot
Dovecot – это свободный IMAP- и POP3-сервер, разработанный с упором на безопасность. Нам он потребуется для того, чтобы подключить авторизацию по протоколу SMTP.
Устанавливаем Dovecot с компонентом для работы с СУБД:
apt-get install dovecot-imapd dovecot-pop3d dovecot-mysql
Настраиваем способ хранения сообщений, для этого откроем файл:
sudo nano /etc/dovecot/conf.d/10-mail.conf
Пропишем в него следующее:
mail_location = maildir:/home/mail/%d/%u/
В данном случае сообщения будут храниться в уже известном нам формате Maildir.
Далее настраиваем слушателя для аутентификации:
sudo nano /etc/dovecot/conf.d/10-master.conf
В файле прописываем:
service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail group = vmail } }
На этом примере мы настраиваем сервис для аутентификации и создаем два прослушивателя: /var/spool/postfix/private/auth – для возможности Постфиксом использовать авторизацию через Dovecot, auth-userdb – сокет для авторизации через dovecot-lda.
В этот же файл добавляем:
service stats { unix_listener stats-reader { user = vmail group = vmail mode = 0660 } unix_listener stats-writer { user = vmail group = vmail mode = 0660 } }
Переходим к настройке аутентификации в Dovecot, открываем файл 10-auth.conf:
sudo nano /etc/dovecot/conf.d/10-auth.conf
Задаем в нем следующие значения:
#!include auth-system.conf.ext !include auth-sql.conf.ext
Открываем файл 10-ssl.conf командой vi /etc/dovecot/conf.d/10-ssl.conf и настраиваем в нем использование шифрования:
ssl = required ssl_cert = </etc/ssl/mail/public.pem ssl_key = </etc/ssl/mail/private.key
Рассмотрим параметры:
- ssl = required – прикажет Dovecot требовать от клиентов использование шифрования;
- ssl_cert – путь до открытого сертификата;
- ssl_key – путь к закрытому ключу.
Добавляем автоматическое создания каталогов в файле vi /etc/dovecot/conf.d/15-lda.conf:
lda_mailbox_autocreate = yes
Настраиваем подключение к базе данных. Для начала открываем нужный файл:
sudo nano /etc/dovecot/conf.d/auth-sql.conf.ext
Вставляем в него:
passdb { … args = /etc/dovecot/dovecot-sql.conf.ext } userdb { … args = /etc/dovecot/dovecot-sql.conf.ext }
В этом фрагменте мы указали на файл, в котором будут находиться настройки для получения пользователей и паролей из БД.
Переходим к корректированию файла с настройками работы mySQL:
sudo nano /etc/dovecot/dovecot-sql.conf.ext
В конце файла добавляем:
driver = mysql connect = host=localhost dbname=postfix user=postfix password=postfix123 default_pass_scheme = MD5-CRYPT password_query = SELECT password FROM mailbox WHERE username = '%u' user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u' user_query = SELECT CONCAT('/home/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
Таким образом, мы смогли настроить запрос на получение данных из БД. Осталось сконфигурировать интерфейс, на котором мы будем слушать Dovecot:
sudo nano /etc/dovecot/dovecot.conf
В этот файл прописываем:
listen = *
По умолчанию Dovecot слушает и на ipv6 (listen = *, ::). Если на сервере не используется 6-я версия протокола TCP/IP, то в логах могут быть ошибки.
Разрешаем запуск Dovecot:
systemctl enable dovecot
Перезагружаемся:
systemctl restart dovecot
Изменение конфигурации Postfix для Dovecot
Так как для отправки писем мы используем протокол SMTP через Dovecot, нам потребуется внести некоторые изменения в основном файле. Откроем его:
sudo nano /etc/postfix/main.cf
Изменяем в нем следующее:
smtp_use_tls = yes smtp_tls_security_level = may smtpd_tls_security_level = may smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth
Также комментируем строки:
#virtual_mailbox_base = /home/vmail #virtual_mailbox_maps = hash:/etc/postfix/vmaps #virtual_minimum_uid = 1000 #virtual_uid_maps = static:5000 #virtual_gid_maps = static:5000
Вместо них прописываем:
virtual_transport = lmtp:unix:private/dovecot-lmtp
Откроем файл sudo nano /etc/postfix/master.cf и раскомментируем в нем строчку:
submission inet n - y - - smtpd
Осталось перезагрузиться в Postfix:
sudo systemctl restart postfix
И в Dovecot:
sudo systemctl restart dovecot
Теперь вы можете протестировать отправку почты. Обратите внимание, что у Dovecot также есть лог – чтобы его включить, необходимо открыть файл sudo nano /etc/dovecot/conf.d/10-logging.conf и внести в него корректировки:
log_path = /var/log/dovecot.log auth_verbose = yes
Первая строка указывает на путь к логу, а вторая показывает неудачные попытки авторизации.
Заключение
Теперь вы знаете, как выполняется установка и настройка Postfix и Dovecot на Ubuntu 20.04. Начинающим системным администраторам на первый взгляд это может показаться непосильной задачей, но с данными инструкциями все должно получиться. Удачи!
Комментарии