Пошаговая инструкция установки Postfix и Dovecot на Ubuntu

Иногда на предприятии или в быту требуется создать собственный почтовый сервер. Рассмотрим создание такого сервера под управлением ОС Ubuntu 16.04 LTS, а также а также установку и настройку почтовых агентов Postfix и Dovecot. Все действия будем выполнять из ssh-клиента putty.

Postfix - агент передачи почты (MTA — mail transfer agent). Postfix является свободным программным обеспечением, создавался как альтернатива Sendmail.

Dovecot - свободный IMAP- и POP3-сервер, разрабатываемый с упором на безопасность, гибкость настройки и быстродействие.

Перед установкой обновляем данные о репозиториях и индексах пакетов:

sudo apt-get update

Обновляем пакеты и компоненты системы:

sudo apt-get upgrade

Перезагружаем систему, иногда это требуется:

sudo reboot

Приступим к установке. Сперва устанавливаем postfix:

sudo apt-get install postfix

Система спрашивает о необходимости установки пакетов и намерении продолжать. Отвечаем Y.

Запустится пользовательский интерфейс установки.

На клавиатуре нажимаем курсорную клавишу вправо (->). Будет подсвечен “Ok”. На клавиатуре нажимаем Enter.

В обновленном окне Выбираем Internet site, нажимаем курсорную клавишу вправо (->), подсветится “Ок” - нажимаем Enter.

В новом окне, в поле System mail name нужно указать доменное или локальное имя сервера и нажать Enter на клавиатуре.

Установка Postfix завершена. Приступаем к настройке.

Переходим в каталог /etc/postfix:

cd /etc/postfix

Создаем файл virtual в котором будут храниться почтовые адреса и имена пользователей почтового сервера:

sudo touch virtual

Создаем директорию private для хранения файлов настроек yandex smtp:

sudo mkdir private

Проверим результаты командой ls

Перейдем в каталог /etc/postfix/private/ и создадим еще три необходимых файла:

cd /etc/postfix/private/ sudo touch canonical sender_relay sasl_passwd
  • canonical – в файле определяются правила подмены адресов
  • sender_relay – определяется соответствие доменов и конкретных отправителей к внешним службам
  • sasl_passwd – в этот файл добавим внешние учетные данные почтового провайдера

Теперь внесем изменения в файл конфигурации main.cf:

sudo nano /etc/postfix/main.cf

Записи в данном файле имеют формат параметр = значение1, значение2, значение3. Комментарии начинаются с символа “решетка” #.

Заменим значение параметра myhostname на ваше доменное имя. Если доменного имени нет - оставляем по умолчанию:

myhostname = example.org

В параметр mydestination следует указать IP-адрес сервера, а также доменное имя, через запятую, если такое имеется.

Чтобы письмо можно было переслать на другие домены или адреса, заменяем параметр alias_maps на virtual_alias_maps и изменяем расположение хеш-файла. Должно получиться так:

virtual_alias_maps = hash:/etc/postfix/virtual

В параметре mynetworks определяем список авторизованных сетей:

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

Для отправки почты с помощью Yandex SMTP добавим в конец файла следующие строки:


smtp_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = login
smtp_sasl_password_maps = hash:/etc/postfix/private/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_type = cyrus
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/private/sender_relay
sender_canonical_maps = hash:/etc/postfix/private/canonical

Выйдем из редактирования файла сочетанием клавиш Ctrl+X, на вопрос о желании сохранить файл нажимаем Y и Enter.

Следует объяснить, что значат добавленные строки:

  • smtp_sasl_auth_enable – параметр отвечает, за включение поддержки sasl для проверки подлинности почтовых серверов.
  • smtp_sasl_password_maps – указываем путь до файла sasl_passwd с внешними учетными данными.
  • smtp_sasl_security_options – параметр безопасности, запрещающий механизмы, которые разрешают анонимную проверку подлинности.

Возможные значения параметра:

  • noplaintext - не использовать механизмы, которые передают незашифрованное имя пользователя и пароль;
  • nodictionary - не использовать механизмы, которые уязвимы для атак по словарю
  • mutual_auth - использовать только механизмы, которые прошли проверку подлинности клиента и сервера друг с другом.
  • smtp_sasl_type - тип плагина sasl, используемый для проверки подлинности, по умолчанию установлен cyrus.
  • smtp_sasl_mechanism_filter - список поддерживаемых методов аутентификации.
  • smtp_sender_dependent_authentication – проверка подлинности будет зависеть от домена отправителя.
  • sender_dependent_relayhost_maps - указываем путь до файла sender_relay.
  • sender_canonical_maps - указываем путь до файла canonical.

Аналогичным образом следует внести изменения в файл /etc/postfix/private/canonical:

@yandex.ru username@yandex.ru

Затем /etc/postfix/private/sender_relay:

@yandex.ru smtp.yandex.ru

А также /etc/postfix/private/sasl_passwd, но вместо ****** указываем собственный пароль:

[smtp.yandex.ru] username@yandex.ru:******

Для переадресации писем на другие почтовые адреса следует создать псевдонимы. Для этого отредактируем файл virtual:

sudo nano /etc/postfix/virtual

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

mailbox_1@example.org username1 mailbox_2@example.org username1, username2

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

cut -d: -f1 /etc/passwd

Преобразуем файл /etc/postfix/virtual и файлы в директории /etc/postfix/private/ в справочные таблицы выполнив команду postmap и перезапускаем сервис:

sudo postmap /etc/postfix/virtual
sudo postmap /etc/postfix/private/*
sudo /etc/init.d/postfix restart

С помощью iptables (это firewall в линукс-подобных системах) добавим разрешающие правила для отправки почты. Аналогичное следует выполнить и для других портов (465 и 587) если такие используются:

sudo iptables -A INPUT -p tcp --dport 25 -j ACCEPT

Проверим работу с помощью утилиты mutt. Для начала установим её:

sudo apt-get install mutt

Теперь проверяем

echo "Text message" | mutt -s "Subject" mailbox@yandex.ru (почтовый адрес указан как пример)

Настроим получение писем с помощью Dovecot, но вначале установим:

sudo apt-get install dovecot-imapd dovecot-pop3d

Перейдем к настройке.

В файле /etc/dovecot/dovecot.conf перечислим протоколы с которыми будем работать:

protocols = pop3 pop3s imap imaps

В файле /etc/dovecot/conf.d/10-mail.conf проверяем значение параметра mail_location:

mail_location = mbox:~/mail:INBOX=/var/mail/%u

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

sudo /etc/init.d/dovecot restart

В файл /etc/hosts, добавим собственное доменное имя:

ip-address example.com

С помощью iptables (это firewall в линукс-подобных системах) добавим разрешающие правила для получения почты:


sudo iptables -A INPUT -p tcp --dport 220 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 993 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 110 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 995 -j ACCEPT

Для проверки нужно отправить письмо с любого почтового сервиса на созданные почтовые адреса. Письмо должно быть доставлено только одному адресату, только существующему системному пользователю и только на адрес с указанием доменного имени. Доставка писем по ip-адресу невозможна.

Следует обратить внимание, что после перезагрузки сервера, правила iptables следует указать заново. Для решения этой проблемы следует прибегнуть к чтению руководства к iptables:

man iptables
man iptables-save
man iptables-restore