Администрирование

Установка Postfix+Dovecot+Posfixadmin на Ubuntu 20.04

Просмотры: 5761
Категория: Администрирование
Создано: 30 ноября 2020
Тэги: PostgreSQL Linux Ubuntu

Настройка почтовой системы в Linux считается одной из самых сложных. Такое мнение сложилось ещё со времён, когда единственным MTA был Sendmail. Его конфигурирование действительно сложно. Сегодня у владельцев Linux-серверов есть замечательные альтернативы: Postfix и Exim. Они гораздо проще в настраивании, хотя и требует определённой квалификации со стороны системного администратора. В этой замете я опишу процесс установки и настройки сервера Postfix, который будет работать в связке с Dovecot - IMAP и POP3 сервером. Также мы установим и настроим Postfixadmin - удобный и простой веб-интерфейс к нашей почтовой системе, позволяющий довольно просто создавать почтовые домены и почтовые ящики. В качестве СУБД мы будем использовать PostgreSQL.

Первые шаги

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

sudo nano /etc/hostname

и прописываем имя нашего сервера (например, mail_server). Не забываем, что в системах Ubuntu в именах можно указывать буквы, цифры и знак подчёркивания. Далее, обновляем имя системы:

sudo hostname mail_server

Задаём нужно временную зону. В нашем примере - московскую

sudo cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Открываем необходимые порты:

sudo ufw allow 25,110,143,465,587,993,995/tcp

Будем считать, что nginx и php-fpm уже установлены в системе. Если нет, то смотрите статью по этому поводу. Переходим в серверный каталог, скачиваем последнюю версию Postfixadmin и распаковываем его.

cd /srv/http

sudo wget https://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-3.2/postfixadmin-3.2.tar.gz

sudo tar xzvf postfixadmin-3.2.tar.gz

sudo mv postfixadmin-3.2 pfa

Создаём временный каталог templates_c (он необходим для установки Postfixadmin):

mkdir /srv/http/pfa/templates_c

Теперь необходимо создать базу данных postfix и пользователя postfix. Перелогиниваемся в postgres и выполняем необходимые действия:

sudo su - postgres

psql

postgres=# CREATE DATABASE postfix ENCODING 'UTF-8';

postgres=# CREATE USER postfix WITH PASSWORD 'secret_passwd_for_postfix';

postgres=# GRANT ALL PRIVILEGES ON DATABASE postfix TO postfix;

Выходим из интерактивной оболочки PostgreSQL и правим pg_hba.conf:

nano /etc/postgresql/13/main/pg_hba.conf

Дописываем следующую строчку

local   postfix         postfix       md5

Теперь надо перезапустить PostgreSQL. Можно также перечитать этот файл. Один из способов - зайти в интерактивную оболочку:

psql

и выполнить команду

postgres=# SELECT pg_reload_conf();

Выходим из интерактивной оболочки и из аккаунта postgres. Создаём в директории pfa файл config.local.php. В нём переопределяются переменные файла config.inc.php, который по новым указаниям разработчиков трогать не рекомендуется:

sudo nano /srv/http/pfa/config.local.php

И дописываем сюда следующие строки:

<?php

$CONF['configured'] = true;
$CONF['database_type'] = 'pgsql';
$CONF['database_password'] = 'secret_passwd_for_postfix';
$CONF['emailcheck_resolve_domain'] = 'NO';
$CONF['footer_text'] = 'Return to your-site.ru';
$CONF['footer_link'] = 'https://your-site.ru';

Параметр configure говорит о том, администратор закончил конфигурировать PFA; database_type - тип СУБД, в нашем случае PostgreSQL; database_password - пароль пользователя postfix для входа в базу; emailcheck_resolve_domain - задает необходимость проверки домена при создании ящиков и псевдонимов.

Конфигурируем наш сайт так, чтобы его корень указывал на подкаталог public каталога postfixadmin и запускаем установку через браузер по адресу http://postfixadmin.your-site.ru. Происходит проверка подключения к БД, других конфигураций сайта, устанавливаются необходимые таблицы и если всё пройдет успешно, появится форма, где нас попросят дважды ввести пароль установки. Вводим его и копируем хэш, который выглядит где-то так:

$CONF['setup_password'] = '8fd021f0582bbdcc525f627643ngfcae7:47d61745f922a68411dief039b354babehv79d';

Добавляем эту строку (ту, что сгенерировал скрипт) в файл конфигурации config.local.php. На той же странице, где сгенерировался хэш, добавляем суперпользователя для Posfixadmin. Здесь Setup password - тот пароль установки, который мы ввели раньше. Указываем также почтовый адрес администратора, а также дважды его пароль. Нажимаем кнопку "Добавить администратора".

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

Устанавливаем необходимые сервера (Postfix и Dovecot) с поддержкой PostgreSQL:

sudo apt install postfix postfix-pgsql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-pgsql

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

sudo groupadd -g 1024 vmail

sudo useradd -d /home/mail -g 1024 -u 1024 vmail -m

Здесь пользователь создается с uid 1024 и guid 1024. Если эти идентификаторы уже заняты, меняем на доступные. Открываем на редактирование главный файл конфигурации Postfix:

sudo nano /etc/postfix/main.cf

Дописываем или изменяем следующие строки:

myhostname = mail.your-site.ru
mydomain = your-site.ru
myorigin = $mydomain

Здесь мы указываем, какое доменное имя будет указываться отправителю, если он не указан в поле FROM.

mydestination = $myhostname, localhost.$mydomain, localhost

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

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
local_recipient_maps = unix:passwd.byname $alias_maps

Отсюда берём список локальных пользователей.

mynetworks = 127.0.0.0/8

Разрешаем отправлять письма локальному пользователю.

inet_interfaces = all
inet_protocols = all

Слушаем все сетевые интерфейсы и работаем по 4-му и 6-му протоколу IP. Можно добавить такие строки

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
unknown_local_recipient_reject_code = 550

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

virtual_mailbox_base = /home/mail
virtual_alias_maps = proxy:pgsql:/etc/postfix/pgsql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:pgsql:/etc/postfix/pgsql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:pgsql:/etc/postfix/pgsql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1024
virtual_uid_maps = static:1024
virtual_gid_maps = static:1024
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

Настройки безопасного соединения:

smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

smtpd_tls_cert_file = /etc/postfix/pubkey.pem
smtpd_tls_key_file = /etc/postfix/privkey.pem
smtpd_use_tls = yes

smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2, !SSLv3

tls_preempt_cipherlist = yes
smtpd_tls_mandatory_ciphers = high
tls_high_cipherlist = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:ADH-AES256-GCM-SHA384:ADH-AES256-SHA256:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:AES256-GCM-SHA384:AES256-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ADH-AES128-GCM-SHA256:ADH-AES128-SHA256:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:AES128-GCM-SHA256:AES128-SHA256:NULL-SHA256

smtpd_tls_auth_only = yes
smtpd_helo_required = yes
smtp_tls_security_level = may
smtp_tls_ciphers = export
smtp_tls_loglevel = 1
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Тут в принципе всё ясно, а если какая-то опция непонятна - читаем документацию. Сохраняем файл конфигурации.

Теперь надо создать несколько файлов для работы с базой данных. Файл для обращения к базе с алиасами:

sudo nano /etc/postfix/pgsql_virtual_alias_maps.cf

Вставляем следующие строки, меняя некоторые по свои параметры (пользователь, пароль, база и т.д.):

user = postfix
password = super_secret_password
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Файл для получения информации по виртуальным доменам:

sudo nano /etc/postfix/pgsql_virtual_domains_maps.cf

Он должен быть приблизительно такого содержания:

user = postfix
password = super_secret_password
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%u'

Файл для получения информации о почтовых ящиках:

sudo nano /etc/postfix/pgsql_virtual_mailbox_maps.cf

У него такое содержание:

user = postfix
password = super_secret_password
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'

Теперь редактируем файл конфигурации master-процесса Postfix'а.

sudo nano /etc/postfix/master.cf

Снимаем комментарии со следующих строк, или дописываем их при необходимости:

submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=may
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=/var/spool/postfix/private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
  -o milter_macro_daemon_name=ORIGINATING

smtps     inet  n       -      n        -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject

dovecot unix - n n - - pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}

Проверяем Postfix на наличие ошибок:

sudo postfix check

Если ошибок нет, или они все устранены, перезапускаем postfix:

sudo systemctl restart postfix

Настройка Dovecot

Настраиваем способ хранения сообщений:

sudo nano /etc/dovecot/conf.d/10-mail.cf

Меняем следующую строку:

mail_location = maildir:/home/mail/%d/%u/

Остальные не трогаем. Настраиваем слушателя аутентификации:

sudo nano /etc/dovecot/conf.d/10-master.conf

Здесь соответствующие строки приводим к виду:

service auth {
   unix_listener auth-userdb {
    mode = 0600
    user = vmail
    group = vmail
  }
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}

Настраиваем аутентификацию в Dovecot:

sudo nano /etc/dovecot/conf.d/10-auth.conf

Комментируем одну строку, снимаем комментарий с другой.

#!include auth-system.conf.ext
!include auth-sql.conf.ext

Настраиваем шифрование Dovecot

sudo nano /etc/dovecot/conf.d/10-ssl.conf

Здесь указываем путь к сертификатам такой же, как и в файле конфигурации Postfix:

ssl = required
ssl_cert = </etc/postfix/public.pem
ssl_key = </etc/postfix/private.pem

Указываем Dovecot автоматически создавать каталоги при первом подключении клиента:

sudo nano /etc/dovecot/conf.d/15-lda.conf

и пишем следующее

lda_mailbox_autocreate = yes

Теперь настройка подключения к базе данных. Открываем файл

sudo nano /etc/dovecot/conf.d/auth-sql.conf.ext

и записываем

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

Создаём файл с настройками для работы с PostgreSQL:

sudo nano /etc/dovecot/dovecot-sql.conf.ext

Здесь указываем следующее:

driver = pgsql
connect = host=localhost dbname=postfix user=postfix password=super_secret_password
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/',LOWER(domain),'/',LOWER(maildir)),\
                1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'

Наконец, указываем интерфейсы, на которых будет слушать наш Dovecot:

sudo nano vi /etc/dovecot/dovecot.conf

и пишем:

listen = *

Настройка Dovecot завершена. Осталось сгенерировать сертификаты или получить их с помощью Let's Encrypt. Для тестовых целей сгенерируем самоподписанные сертификаты. Мы их положим в /etc/postfix:

openssl req -new -x509 -days 730 -nodes -out /etc/postfix/public.pem -keyout /etc/posfix/private.pem -subj "/C=RU/ST=Msk/L=Msk/O=Local/OU=Mail/CN=mail_server.your-site.ru"

Запускаем Dovecot:

sudo systemctl enable dovecot

sudo systemctl start dovecot

Теперь осталось пойти на Postfixadmin, завести сначала почтовый домен, потом ящик и протестировать нашу почтовую систему, например, с помощью Thunderbird. Отправляем письма себе, другому пользователю в нашей системе. Потом пробуем послать себе письма с Gmail, Yandex, Mail.ru и наблюдаем за поведением системы, изучая логи. Основная настройка почты завершена. Теперь необходимо настроить DKIM, SPF, чтобы другие почтовые системы воспринимали нас как доверенных отправителей. Но об этом я расскажу в другом посте.

Новый тренажёр-эмулятор
Станции КЕГЭ

Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене

Новое видео
Методы решения задания 16 ЕГЭ по Информатике «Вычисление рекуррентных выражений»
Поддержать автора сайта!
​ Поддержите автора сайта, если материалы, размещённые здесь, оказались вам полезны.
Расписание пробников Статграда в 2026/27 учебном году
Информатика ОГЭ 9 класс
  1. 13 октября 2026 года
  2. 3 декабря 2026 года
  3. 21 января 2027 года
  4. 19 февраля 2027 года
  5. 23 марта 2027 года
  6. 27 апреля 2027 года
Математика ОГЭ 9 класс
  1. 23 сентября 2026 года
  2. 1 декабря 2026 года
  3. 22 января 2027 года
  4. 3 марта 2027 года
  5. 14 апреля 2027 года
Физика ОГЭ 9 класс
  1. 19 октября 2026 года
  2. 10 декабря 2026 года
  3. 29 января 2027 года
  4. 17 марта 2027 года
  5. 22 апреля 2027 года
Математика ЕГЭ 10 класс
  1. 3 февраля 2027 года
  2. 11 мая 2027 года
Информатика ЕГЭ 11 класс
  1. 22 октября 2026 года
  2. 15 декабря 2026 года
  3. 26 января 2027 года
  4. 2 марта 2027 года
  5. 13 апреля 2027 года
Математика ЕГЭ 11 класс
  1. 30 сентября 2026 года
  2. 17 декабря 2026 года
  3. 9 февраля 2027 года
  4. 16 марта 2027 года
  5. 21 апреля 2027 года
Физика ЕГЭ 11 класс
  1. 14 октября 2026 года
  2. 16 декабря 2026 года
  3. 4 февраля 2027 года
  4. 12 марта 2027 года
  5. 9 апреля 2027 года