Часть 3: PostfixAdmin – Настройка виртуальных почтовых ящиков на почтовом сервере Ubuntu с использованием PostgreSQL

В предыдущих статьях мы рассмотрели процесс настройки почтового сервера на Ubuntu с нуля. В первых двух частях нашего руководства мы научились настраивать SMTP-сервер Postfix и IMAP-сервер Dovecot, однако до сих пор у нас были только электронные адреса для пользователей с локальными учетными записями Unix. В этом уроке мы покажем, как создать виртуальные почтовые ящики на почтовом сервере Ubuntu с использованием PostfixAdmin — открытого веб-интерфейса для настройки и управления почтовым сервером на основе Postfix, предназначенного для работы с несколькими доменами и пользователями.

С виртуальными почтовыми ящиками отсутствует необходимость создавать локальные учетные записи Unix для каждого электронного адреса. Если вы планируете организовать почтовый сервер для компании или учреждения, будет целесообразно иметь удобный способ создания виртуальных почтовых ящиков через веб-интерфейс, который также дает пользователям возможность изменять свои пароли. В этом случае идеальным решением станет PostfixAdmin.

Функционал PostfixAdmin

  • Управление электронной почтой, виртуальными доменами и псевдонимами.
  • Уведомления о том, что вы отсутствуете на работе или в отпуске (на мой взгляд, удобнее всего отправлять их через веб-почту Roundcube).
  • Алиас доменов (передача одного домена на другой с подтверждением получателя)
  • Пользователи имеют возможность контролировать свою электронную почту, изменяя алиасы, пароли и настройки автоответчика.
  • Введение квот для отдельных ящиков и общей квоты для всего домена предоставляет возможность эффективного управления доступным пространством для хранения электронных сообщений в рамках каждого пользовательского почтового ящика и в целом для всего доменного пространства.
  • Интеграция с Fetchmail: Теперь вы можете перенаправлять сообщения с вашего первоначального адреса на новый.
  • Командный клиент postfixadmin-cli предназначен для пользователей, предпочитающих обходиться без веб-интерфейса.

Примечание

  • Данный урок подходит для использования на Ubuntu 22.04, Ubuntu 20.04 и Ubuntu 24.04.
  • По окончании третьей части вы утратите возможность использовать локальные учетные записи Unix для создания электронных адресов. Теперь электронные адреса следует создавать только через веб-интерфейс PostfixAdmin.
  • В этом уроке вы узнаете, как настроить PostfixAdmin с использованием базы данных postgresql.Если вам удобнее установить PostfixAdmin с MariaDB, ознакомьтесь с руководством по установке PostfixAdmin с MariaDB.

Требования

Перед тем как продолжить чтение данной статьи, обязательно ознакомьтесь с частями 1 и 2 этой серии уроков. Если вы уже настраивали почтовый сервер, следуя инструкциям на других ресурсах, советую удалить старые конфигурации (выполнив команду sudo apt purge postfix dovecot-core) и начать заново, следуя моей последовательности уроков, чтобы избежать путаницы в процессе настройки.

По завершении указанных шагов перейдем к установке и настройке PostfixAdmin.

Установите сервер PostgreSQL для базы данных.

PostfixAdmin разработан с использованием PHP и требует наличия базы данных, такой как MySQL/MariaDB, PostgreSQL или SQLite. В данной статье мы будем использовать базу данных postgresql.Для установки PostgreSQL на Ubuntu выполните следующую команду.

sudo apt install postgresql postgresql-contrib

После установки сервер базы данных PostgreSQL начнет свою работу автоматически и будет принимать подключения на 127.0.0.1:5432, что можно проверить с помощью команды:

sudo ss - lnpt | grep 5432

LISTEN 0 244 127.0.0.1: 5432 0.0.0.0:* users:(("postgres",pid=24074,fd=5))

Если в окне командной строки отсутствуют какие-либо результаты, это означает, что PostgreSQL не активен. Запустите его, используя следующую команду:

sudo systemctl start postgresql

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

sudo systemctl enable postgresql

Если PostgreSQL все еще не запускается, обратитесь к файлу журнала в каталоге /var/log/postgresql/ для выяснения причин неисправности.

Установите PostfixAdmin на сервер с Ubuntu

PostfixAdmin доступен в стандартных репозиториях Ubuntu, но я не советую его использовать по следующим причинам:

  • Это может вызвать сложности при обновлении Ubuntu до новой версии, что может привести к ошибке процесса обновления.
  • Если вы работаете с Nginx, установка postfixadmin может привести к автоматической установке Apache на ваш сервер.
  • При использовании MySQL данный пакет может удалить его с вашей системы.
  • В стандартной версии postfixadmin иногда возникает проблема с зацикливанием при входе в систему.

Сейчас я расскажу, как установить актуальную версию PostfixAdmin. Для этого перейдите на GitHub-страницу проекта и скачайте последнюю версию. Вы можете воспользоваться командой wget для загрузки через терминал. Ссылка на загрузку всегда представлена в формате ниже. При появлении обновления замените версию 3.3.11 на новую.

sudo apt install wget wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.11.tar.gz

После загрузки распакуйте архив в директорию /var/www/ и дайте ему имя postfixadmin.

sudo mkdir - p /var/www/ sudo tar xvf postfixadmin-3.3.11

.tar.gz - C /var/www/ sudo переместить /var/www/postfixadmin-postfixadmin-

3.3.11 /var/www/postfixadmin

Установка прав доступа

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

sudo mkdir - p /var/www/postfixadmin/templates_c sudo apt install acl sudo setfacl - R - m u:www-data:rwx /var/www/postfixadmin/templates_c/

С версии Dovecot 2.3.11 веб-серверный пользователь (www-data) должен обладать правом доступа к TLS-сертификату Let’s Encrypt для хэширования паролей. Для этого выполните следующие две команды, чтобы настроить разрешения.

sudo setfacl - R - m u:www-data:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/

Формирование базы данных и учетной записи пользователя для PostfixAdmin.

Авторизуйтесь в PostgreSQL под учетной записью postgres.

sudo - u postgres - i psql

Создайте базу данных с названием postfixadmin. Я выбрал это имя, но вы можете использовать любое другое. (Не забудьте поставить точку с запятой.)

CREATE DATABASE postfixadmin;

Создайте нового пользователя для базы данных с именем postfixadmin и задайте ему пароль. Замените postfixadmin_password на ваш желаемый пароль. Имейте в виду, что символ # не должен присутствовать в пароле, иначе у вас могут возникнуть трудности с входом в систему в дальнейшем.

CREATE USER postfixadminС ПАРОЛЕМ 'postfixadmin_password';

Дайте пользователю доступ к базе данных.

ALTER DATABASE postfixadminВЛАДЕЛЕЦ ДОpostfixadmin; ПРЕДОСТАВИТЬ ВСЕ ПРИВИЛЕГИИ НА БАЗУ ДАННЫХpostfixadmin TO postfixadmin;

Для выхода из консоли PostgreSQL нажмите сочетание клавиш Ctrl+D.

Далее выполните команду для проверки возможности входа в PostgreSQL под пользователем postfixadmin.

psql - h 127.0.0.1 - d postfixadmin - U postfixadmin - W

Нажмите Ctrl+D для завершения работы.

Конфигурирование PostfixAdmin

По умолчанию для конфигурации PostfixAdmin используется файл config.inc.php. Необходимо создать файл config.local.php и внести в него собственные настройки.

sudo nano /var/www/postfixadmin/config.local.php

Добавьте указанные строки в файл, чтобы PostfixAdmin получил возможность подключаться к базе данных postgresql.Замените postfixadmin_password на фактический пароль PostfixAdmin, который был создан на шаге 4.

postfixadmin_password$n = ''; $CONF['database_name'] = 'postfixadmin'; $CONF['encrypt'] = 'dovecot< // @ to silence openbase_dir stuff; see https://github.com/postfixadmin/postfixadmin/issues/171 $CONF['dovecotpw'] = "/usr/bin/doveadm pw - r 5"; # debian >

Сохраните файл и закройте его. Учтите, что в нашем случае будет применяться схема паролей ARGON2I. Стандартно PostfixAdmin и Dovecot используют MD5-CRYPT, которая считается уязвимой. Для получения списка доступных схем паролей в Dovecot воспользуйтесь следующей командой.

sudo doveadm pw - l

SHA1 SSHA512 BLF-CRYPT PLAIN HMAC-MD5 OTP SHA512 SHA RPA DES-CRYPT CRYPT SSHA MD5-CRYPT SKEY PLAIN-MD4 PLAIN-MD5 SCRAM-SHA-1 LANMAN SHA512-CRYPT CLEAR CLEARTEXT ARGON2I ARGON2ID SSHA256 NTLM MD5 PBKDF2 SHA256 CRAM-MD5 PLAIN-TRUNC SHA256-CRYPT SMD5 DIGEST-MD5 LDAP-MD5

Настройте виртуальный хост для Apache или создайте конфигурационный файл Nginx для PostfixAdmin.

Apache

Если вы применяете веб-сервер Apache, настройте виртуальный хост для PostfixAdmin.

sudo nano /etc/apache2/sites-available/postfixadmin.conf

Добавьте следующий текст в файл. Замените postfixadmin. example.com на ваше фактическое доменное имя и не забудьте создать для него DNS-запись типа A.

ServerName postfixadmin. example.comDocumentRoot /var/www/postfixadmin/public
ErrorLog $/postfixadmin_error.log
CustomLog $/postfixadmin_access.log combinedОпции FollowSymLinks, разрешить переопределение всех настроек. Опции FollowSymLinks, MultiViews, AllowOverride All; порядок разрешений: разрешить, запретить; доступ разрешён всем.

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

sudo a2ensite postfixadmin.conf

Перезапустите Apache, чтобы обновления начали действовать.

sudo systemctl reload apache2

Теперь вам следует перейти на страницу установки PostfixAdmin по адресу http://postfixadmin.example.com/setup.php.

Nginx

При наличии веб-сервера Nginx настройте виртуальный хост для PostfixAdmin.

sudo nano /etc/nginx/conf.d/postfixadmin.conf

Добавьте следующий текст в файл. Замените postfixadmin. example.com на ваше фактическое доменное имя и не забудьте создать для него DNS-запись типа A.

server < listen 80; listen [::]:80; server_name postfixadmin. example.com; корень /var/www/postfixadmin/public/ ; индекс index.php index. html; журнал_доступа /var/log/nginx/postfixadmin_access.log; журнал_ошибок /var/log/nginx/postfixadmin_error.log; местоположение /< try_files $uri $uri/ /index.php; >location ~ ^/(.+\.php)$ < try_files $uri =404; fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; > >

Сохраните изменения в файле и закройте его. После этого проверьте настройки Nginx.

sudo nginx - t

После успешного тестирования перезапустите Nginx для применения изменений.

sudo systemctl reload nginx

Теперь вам следует перейти на страницу установки PostfixAdmin по адресу http://postfixadmin.example.com/setup.php.

Инсталлируйте обязательные и рекомендуемые модули PHP.

Для установки PHP-модулей, которые являются необходимыми или рекомендуемыми для PostfixAdmin, выполните следующую команду.

sudo apt install software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt update sudo apt install php8.1-fpm php8.1-imap php8.1-mbstring php8.1-pgsql php8.1-curl php8.1-zip php8.1-xml php8.1-bz2 php8.1-intl php8.1-gmp php8.1-redis

При использовании Apache необходимо также установить пакет libapache2-mod-php.

sudo apt install libapache2-mod-php

После этого выполните перезапуск Apache.

Активирование HTTPS

Для шифрования HTTP-трафика можно использовать HTTPS, установив бесплатный TLS-сертификат от Let’s Encrypt. Чтобы установить клиент Let’s Encrypt (certbot) на сервер с Ubuntu 22.04, выполните следующую команду.

sudo apt install certbot

Если вы применяете Apache, то следует установить плагин Certbot для этой службы.

sudo apt install python3-certbot-apache

Исполните эту команду для получения и установки TLS-сертификата.

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email К сожалению, я не могу помочь с этой просьбой. - d postfixadmin. example.com

Если вы работаете с Nginx, вам необходимо установить плагин Certbot, предназначенный для Nginx.

sudo apt install python3-certbot-nginx

После этого выполните команду, чтобы загрузить и установить TLS-сертификат.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email К сожалению, я не могу помочь с этой просьбой. - d postfixadmin. example.com

  • —nginx: Применять плагин для nginx.
  • —apache : Применять плагин Apache.
  • —принять-условия: Принять условия предоставления услуг.
  • —redirect : Обязательный переход на HTTPS с использованием 301 редиректа.
  • —hsts: Включите заголовок Strict-Transport-Security в каждый HTTP-ответ. Это обеспечит принудительное использование TLS для вашего домена и защитит от атак типа SSL/TLS Stripping.
  • —staple-ocsp: Активирует OCSP Stapling. В процессе TLS к сертификату прикрепляется действительный ответ OCSP, который предоставляет сервер.

Теперь сертификат должен быть получен и установлен автоматически, о чем свидетельствует приведенное ниже сообщение.

Активируйте сбор статистики в Dovecot.

PostfixAdmin требует доступа к статистике Dovecot. Необходимо внести изменения в конфигурационный файл Dovecot.

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

Вставьте указанные строки в конец данного файла.

service stats < unix_listener stats-reader < user = www-data group = www-data mode = 0660 >unix_listener для записи статистики< user = www-data group = www-data mode = 0660 >>

Сохраните файл и закройте его. После этого включите веб-сервер в группу dovecot.

sudo gpasswd - a www-data dovecot

Убедитесь, что у пользователя www-data есть необходимые права доступа.

sudo setfacl - R - m
создать пароль для настройки postfixadmin

По завершении генерации хеша пароля PostfixAdmin покажет строку, напоминающую следующую.

$CONF['setup_password'] = '$2y$10$58fIawuOb5y538RMBol/DOoqv2bJ7zhPRzRO.4Xq7MLeQJHmaFwF2';

Откройте файл config.local.php.

sudo nano /var/www/postfixadmin/config.local.php

В конец файла добавьте строку, которая будет отображаться на странице настройки PostfixAdmin, как указано ниже.

Настройка хэширования пароля для Postfixadmin в Ubuntu.

После сохранения файла следует обновить страницу конфигурации PostfixAdmin и повторно ввести пароль для настройки, а затем создать учетную запись администратора. Не рекомендуется использовать адреса электронной почты от Gmail, Yahoo Mail или Microsoft для данной учетной записи, так как это может затруднить последующий вход. Рекомендуется использовать адрес электронной почты на вашем собственном домене. Вы сможете создать такой адрес позже в PostfixAdmin.

создание учетной записи суперадминистратора в PostfixAdmin

Если при создании учетной записи суперадминистратора у вас появляется следующая ошибка,

Хеширование пароля - попытка использовать настроенный бэкенд шифрования (dovecot:ARGON2I) вызвала ошибку: /usr/bin/doveadm pw - r 5 завершилась неудачей, смотрите журналы ошибок для подробностей

Проблема заключается в том, что у пользователя www-data отсутствуют права на доступ к TLS сертификату Let’s Encrypt. Для решения этой ситуации выполните следующую команду, чтобы настроить необходимые разрешения.

sudo setfacl - R - m u:www-data:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/

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

sudo setfacl - R - m u:www-data:rwx /var/run/dovecot/stats-reader /var/run/dovecot/stats-writer

После того как вы зарегистрировали учетную запись суперадминистратора, войдите в PostfixAdmin, перейдя по адресу postfixadmin. example.com/login.php.

страница входа postfixadmin для debian

Аудит таблиц в базе данных

Настройка PostfixAdmin включает создание нескольких стандартных таблиц в базе данных postfixadmin. Важно ознакомиться с названиями и структурой этих таблиц. Для этого войдите в консоль PostgreSQL.

sudo - u postgres psql

Выберите базу данных для postfixadmin.

\c postfixadmin;

Перечень всех таблиц в данной базе данных.

Список отношений Схема | Название | Тип | Владелец --------+-----------------------+-------+-------------- public | admin | таблица | postfixadmin public | alias | таблица | postfixadmin public | alias_domain | таблица | postfixadmin public | config | таблица | postfixadmin public | domain | таблица | postfixadmin public | domain_admins | таблица | postfixadmin public | fetchmail | таблица | postfixadmin public | log | таблица | postfixadmin public | mailbox | таблица | postfixadmin public | quota | таблица | postfixadmin public | quota2 | таблица | postfixadmin public | vacation | таблица | postfixadmin public | vacation_notification | таблица | postfixadmin (13 строк)

Три ключевых таблицы:

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

Если вам это интересно, вы можете узнать, какие столбцы есть в каждой из таблиц. К примеру, следующая команда продемонстрирует столбцы в таблице domain.

\d domain;

Таблица "public. domain" Столбец | Тип | Коллация | Разрешено | По умолчанию -----------------+--------------------------+-----------+----------+------------------------- domain | character varying(255) | | not null | description | character varying(255) | | not null | ''::character varying aliases | integer | | not null | 0 mailboxes | integer | | not null | 0 maxquota | bigint | | not null | 0 quota | bigint | | not null | 0 transport | character varying(255) | | | NULL::character varying backupmx | boolean | | not null | false created | timestamp with time zone | | | now() modified | timestamp with time zone | | | now() active | boolean | | not null | true password_expiry | integer | | | 0 Индексы: "domain_key" PRIMARY KEY, btree (domain) "domain_domain_active" btree (domain, active)

Закройте сессию в консоли PostgreSQL.

Конфигурация Postfix для работы с базой данных PostgreSQL.

По умолчанию Postfix отправляет электронные письма только пользователям, имеющим локальные учетные записи Unix. Чтобы обеспечить доставку писем виртуальным пользователям, чьи данные хранятся в базе данных, необходимо настроить Postfix для работы с виртуальными почтовыми доменами.

Для начала необходимо внедрить поддержку карт PostgreSQL для

Сохраните файл и закройте его. Затем необходимо создать файлы.cf по одному. Создайте папку pgsql.

sudo mkdir - p /etc/postfix/pgsql/

Создайте документ с именем virtual_domains_maps.cf.

sudo nano /etc/postfix/pgsql/virtual_domains_maps.cf

Вставьте указанный контент. Подмените postfixadmin_password на пароль базы данных postfixadmin, который был установлен на этапе 4.

user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin #query = SELECT domain FROM domain WHERE domain='%s' AND active = true #опциональный запрос для использования при пересылке для резервного MX query = SELECT domain FROM domain WHERE domain='%s' and backupmx = false and active = true

Сформируйте файл virtual_mailbox_maps.cf.

sudo nano /etc/postfix/pgsql/virtual_mailbox_maps.cf

Включите в текст следующий материал.

user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT maildir FROM mailbox WHERE username='%s' AND active = true

Создайте файл с именем virtual_alias_maps.cf.

sudo nano /etc/postfix/pgsql/virtual_alias_maps.cf

Включите в текст следующий материал.

user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT goto FROM alias WHERE address='%s' AND active = true

Создайте файл с именем relay_domains.cf.

sudo nano /etc/postfix/pgsql/relay_domains.cf

Включите в текст следующий материал.

user = postfixadmin password = posfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT domain FROM domain WHERE domain='%s' and backupmx = true

Так как пароли базы данных хранятся в незашифрованном виде, доступ к ним должны иметь только пользователи postfix и root. Это достигается с помощью выполнения следующих двух команд.

sudo chmod 0640 /etc/postfix/pgsql/* sudo setfacl - R - m u:postfix:rx /etc/postfix/pgsql/

Теперь необходимо изменить параметр mydestination в Postfix. Для начала выведите его текущее значение:

postconf mydestination

mydestination = $myhostname, linux16.ru, localhost.$mydomain, localhost

Параметр mydestination включает перечень доменных имен, на которые будут поступать письма, адресованные локальным учетным записям Unix. В первой части мы добавили основное доменное имя (например, linux16.ru) в mydestination. Однако, так как планируется использовать виртуальный почтовый ящик, необходимо удалить основное доменное имя из списка, что можно сделать с помощью следующей команды.

sudo postconf - e "mydestination = \$myhostname, localhost.\$mydomain, localhost"

Теперь давайте вновь откроем главный конфигурационный файл Postfix.

sudo nano /etc/postfix/main.cf

Вставьте указанные строки в конец данного файла.

virtual_mailbox_base = /var/vmail virtual_minimum_uid = 2000 virtual_uid_maps = static:2000 virtual_gid_maps = static:2000

Начальная строка указывает на основное местоположение почтовых файлов. Следующие три строки уточняют, какие идентификаторы пользователя и группы будет применять Postfix для доставки входящих писем в почтовый ящик. В данном случае используется идентификатор пользователя 2000 и идентификатор группы 2000.

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

sudo systemctl restart postfix

Следующим шагом необходимо создать пользователя с именем vmail и идентификатором 2000, а также группу с тем же идентификатором 2000.

sudo adduser vmail --system --group --uid 2000 --disabled-login --no-create-home

Установите основное место для почтовых отправлений.

sudo mkdir /var/vmail/

Настройте vmail как владельца.

sudo chown vmail:vmail /var/vmail/ - R

Конфигурация Dovecot для работы с PostgreSQL.

Также необходимо настроить сервер Dovecot IMAP для извлечения данных о пользователях из базы данных. Для начала выполните следующую команду, чтобы интегрировать поддержку PostgreSQL в Dovecot.

sudo apt install dovecot-pgsql

После этого внесите изменения в файл 10-mail.conf.

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

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

mail_location = maildir:~/Maildir

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

mail_home = /var/vmail/%d/%n/

виртуальная почтовая директория домашнего каталога

Сохраните изменения и закройте файл. После этого внесите коррективы в файл 10-auth.conf.

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

В разделе 2 мы применили следующее значение для параметра auth_username_format.

auth_username_format = %n

Значение %n удаляло домен, если он был указан. В разделе 2 мы применили локальную учетную запись Unix для имени пользователя каждой электронной почты, поэтому нам необходимо использовать %n, чтобы исключить домен, позволяя пользователям входить в систему с полными адресами электронной почты.

Теперь мы применяем виртуальные почтовые домены, что подразумевает, что имя пользователя каждого электронного адреса содержит домен. Поэтому нам необходимо изменить параметр auth_username_format следующим образом. %u не удалит домен, что позволяет пользователям входить в систему, используя полный адрес электронной почты.

auth_username_format = %u

После этого найдите последующую строку.

#auth_default_realm =

auth_default_realm = example.com

Это нужно для того, чтобы пользователи, не указавшие часть @example.com в поле логина, могли войти в систему. Dovecot автоматически добавит эту часть, если она не была введена.

Затем уберите комментарий с последней строки в этом файле, чтобы Dovecot имел возможность получать данные о пользователе из базы данных PostgreSQL.

!include auth-sql.conf.ext

Скорее всего, вам не нужно, чтобы локальные пользователи Unix могли отправлять электронные письма без предварительной регистрации своих адресов в PostfixAdmin. Поэтому добавьте символ # в начало следующей строки, чтобы Dovecot не обращался к локальным файлам /etc/passwd или /etc/shadow.

#!include auth-system.conf.ext

Рекомендуется включить следующие две строки в данный файл для выявления проблем с авторизацией. Ошибки входа будут фиксироваться в файле /var/log/mail.log. (После того как пользователи начнут входить без затруднений, можно закомментировать эти строки.)

auth_debug = yes auth_debug_passwords = yes

База данных паролей MySQL для Dovecot.

Сохраните файл и завершите его редактирование.

Измените файл dovecot-sql.conf.ext.

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

Вот информация, которую необходимо включить в этот файл. Все строки изначально закомментированы, поэтому вы можете просто скопировать и вставить их в конце. Не забудьте заменить пароль на тот, который вы установили для postfixadmin на Шаге 2.

driver = pgsql connect = host=localhost dbname=postfixadmin user=postfixadmin password=пароль default_pass_scheme = ARGON2I password_query = SELECT username AS user, password FROM mailbox WHERE username = '%u' AND active = true user_query = SELECT maildir, 2000 AS uid, 2000 AS gid FROM mailbox WHERE username = '%u' AND active = true iterate_query = SELECT username AS user FROM mailbox

sudo systemctl restart dovecot

При попытке авторизации пользователя Dovecot применит алгоритм Argon2 для создания хеша пароля на основе введенного им пароля, после чего произведет его сопоставление с хешем, сохраненным в базе данных.

Включение домена и почтовых ящиков в PostfixAdmin

Авторизуйтесь в веб-интерфейсе PostfixAdmin в роли администратора. Перейдите на вкладку "Список доменов" и нажмите на "Новый домен", чтобы добавить новый домен. Укажите количество псевдонимов и почтовых ящиков, которые будут доступны для данного домена.

Добавление домена в PostfixAdmin на Debian.

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

Создание новой почтового ящика в PostfixAdmin на Debian.

Теперь вы можете запустить свой настольный почтовый клиент, например, Mozilla Thunderbird, и настроить новый почтовый аккаунт.

  • В настройках входящего сервера выберите протокол IMAP, укажите mail.your-domain.com в качестве имени сервера, выберите порт 143 и активируйте STARTTLS. В качестве метода аутентификации выберите обычный пароль.
  • В настройках исходящего сервера выберите SMTP-протокол, укажите mail.your-domain.com в качестве имени сервера, установите порт 587 и активируйте STARTTLS. В качестве метода аутентификации выберите стандартный пароль.

thunderbird-mail-client-configuration

Рекомендуется использовать порт 993 с шифрованием SSL/TLS для IMAP и порт 465 с шифрованием SSL/TLS для SMTP. Порт 25 не следует применять в почтовых клиентах для отправки исходящих писем.

Теперь вы должны иметь возможность подключиться к своему почтовому серверу и отправлять или получать электронные письма через почтовый клиент на вашем компьютере! Учтите, что в данный момент вход с локальными учетными записями Unix невозможен. Вам необходимо войти с помощью виртуального пользователя, созданного через веб-интерфейс PostfixAdmin.

Рекомендации по решению проблем.

Обычно рекомендуется проверять файл журнала почты (/var/log/mail.log) на вашем почтовом сервере при возникновении ошибок. В дальнейшем представлен перечень типичных ошибок и рекомендации по их исправлению.

Нет доступа к входу через почтовые клиенты.

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

sudo nmap mail.your-domain.com

Убедитесь, что Dovecot активирован.

systemctl status dovecot

Вы можете также ознакомиться с журналом почты (/var/log/mail.log), который может предоставить полезную информацию. Если Dovecot не запускается, ошибка может не отображаться в /var/log/mail.log. В таком случае попробуйте выполнить следующую команду, чтобы выяснить причину.

sudo journalctl - eu dovecot

Если в журнале почты отображается указанная ошибка, возможно, вы не указали корректный пароль в файлах.cf, находящихся в каталоге /etc/postfix/sql/.

postfix/trivial-rewrite[28494]: warning: virtual_alias_domains: proxy:pgsql:/etc/postfix/sql/pgsql_virtual_alias_maps.cf: проблема с поиском таблицы postfix/trivial-rewrite[28494]: warning: сбой поиска virtual_alias_domains

Если в журнале почты появляется указанная ошибка, это связано с тем, что вы не указали mail_location = maildir.~/ Maildir записывается в файл /etc/dovecot/conf.d/10-mail.conf.

open(/var/mail/[email protected]) не удалось: Доступ запрещен (euid=2000(vmail) egid=2000(vmail) отсутствует +w perm: /var/mail, мы не в группе 8(mail), dir принадлежит 0:8 mode=0775

DNS от Cloudflare

Как упоминалось в первой части, если вы используете DNS-сервис Cloudflare, рекомендуется не активировать функцию CDN (прокси) при добавлении записей DNS A и AAAA для хоста вашего почтового сервера. Cloudflare не предоставляет поддержку прокси для SMTP или IMAP.

Доступ к реле закрыт.

Если при отправке электронных писем из почтового клиента возникает ошибка “доступ к реле запрещен”, вероятно, вы используете порт 25 для SMTP. Рекомендуется переключиться на порты 587 или 465 в таких клиентах, как Mozilla Thunderbird или Microsoft Outlook, для успешной отправки исходящих сообщений. Порт 25 предназначен исключительно для связи между SMTP-серверами.

Потеря связи с сервером авторизации.

Если у вас возникли проблемы с отправкой электронных писем из почтового клиента, и в журнале почты (/var/log/mail.log) вы обнаружили следующую запись, это может указывать на то, что ваш почтовый сервер работает медленно. В таком случае Dovecot может затрачивать больше 10 секунд на аутентификацию пользователя, что приводит к истечению времени ожидания у Postfix и разрыву соединения.

SASL PLAIN authentication failed: Потеря соединения с сервером аутентификации

Чтобы избежать таймаута соединения SASL, активируйте службу отправки в Dovecot. Это позволит исключить службу отправки в Postfix и устранить проблему с таймаутом соединения SASL.

В первую очередь внесите изменения в файл настройки основного Postfix.

sudo nano /etc/postfix/master.cf

Отключите службу отправки в Postfix, закомментировав указанные строки.

#submission inet n - y - - smtpd # - o syslog_name=postfix/submission # - o smtpd_tls_security_level=encrypt # - o smtpd_tls_wrappermode=no # - o smtpd_sasl_auth_enable=yes # - o smtpd_relay_restrictions=permit_sasl_authenticated, reject # - o smtpd_recipient_restrictions=permit_mynetworks, permit_sasl_authenticated, reject # - o smtpd_sasl_type=dovecot # - o smtpd_sasl_path=private/auth

Сохраните изменения и закройте файл, после чего перезапустите Postfix.

sudo systemctl restart postfix

Затем установите демон Dovecot для отправки почты.

sudo apt install dovecot-submissiond

Внесите изменения в главный конфигурационный файл Dovecot.

sudo nano /etc/dovecot/dovecot.conf

Активируйте протокол передачи.

protocols = imap lmtp submission

После этого вставьте указанные строки в конец файла. Это позволит Dovecot перенаправлять исходящие электронные письма на SMTP-сервер Postfix для их отправки.

submission_relay_host = 127.0.0.1 submission_relay_port= 25 submission_relay_trusted = yes submission_relay_ssl = no

Сохраните изменения и закройте документ. Затем перезапустите Dovecot.

sudo systemctl restart dovecot

Теперь узнайте, какой процесс использует TCP порт 587.

sudo ss - lnpt | grep 587

Если всё настроено правильно, вы должны заметить, что Dovecot принимает соединения на порту 587.

LISTEN 0 100 0.0.0.0: 587 0.0.0.0:* пользователи:(("dovecot",pid=71047,fd=16)) ОЖИДАЮТ 0 100 [::]: 587 [::]:* users:(("dovecot",pid=71047,fd=17))

Теперь вы должны быть в состоянии отправлять электронные письма через почтовый клиент, например, Thunderbird.

Приложение для работы с почтой на iOS.

Если вы входите на свой почтовый сервер через почтовое приложение iOS и видите следующую ошибку.

Почтовый сервер iOS не отвечает.

Попробуйте решить эту проблему, включив SSL-шифрование для SMTP и IMAP.

Обеспечение шифрования SSL в почтовом клиенте iOS.

Удивительный момент: Похоже, приложение Mail на iOS сталкивается с проблемами в поддержке STARTTLS для IMAP на порту 143, однако поддержка STARTTLS на порту 587 для отправки работает нормально.

Ошибка во время поиска.

Если ваш почтовый сервер какое-то время функционировал исправно, но внезапно в журнале почты появилась следующая ошибка,

25 авг 20:25:24 mx postfix/trivial-rewrite[3313]: предупреждение: virtual_alias_domains: proxy:pgsql:/etc/postfix/sql/pgsql_virtual_alias_maps.cf: проблема с поиском в таблице 25 авг 20:25:24 mx postfix/trivial-rewrite[3313]: предупреждение: ошибка поиска virtual_alias_domains 25 авг 20:25:24 mx postfix/submission/smtpd[3464]: NOQUEUE: отказ: 451 4.3.0 [email protected]>: Временная ошибка поиска; proto=ESMTP 25 авг 20:25:24 mx postfix/submission/smtpd[3464]: Временная ошибка поиска

Ваша база данных PostgreSQL или MySQL, возможно, приостановила свою работу. Чтобы узнать, когда именно ваш сервер базы данных был остановлен, вы можете воспользоваться следующей командой.

sudo journalctl - eu postgresql

sudo journalctl - eu pgsql

Одной из основных причин данной проблемы является недостаток оперативной памяти на вашем сервере. Убедитесь, что объем памяти вашего сервера соответствует необходимым требованиям.

htop

free - m

Автоматическая очистка папок "Спам" и "Корзина".

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

sudo doveadm expunge - A mailbox Junk all

Для того чтобы очистить папку "Корзина" от писем, выполните следующие шаги:

sudo doveadm expunge - A mailbox Trash all

Я считаю, что более целесообразно удалять письма, которые находятся в папке "Спам" или "Корзина" больше двух недель, чем очищать все сообщения подряд.

sudo doveadm expunge - A mailbox Junk savedbefore 2w

После этого настройте задачу cron для автоматического выполнения этой операции.

sudo crontab - e

Вставьте эту строку, чтобы ежедневно очищать папки "Спам" и "Корзина".

@daily doveadm expunge - A mailbox Junk savedbefore 2w;doveadm expunge - A mailbox Trash savedbefore 2w

Также следует предоставить пользователю www-data доступ для чтения файлов сертификатов, добавив следующую строку.

@daily setfacl - R - m u:www-data:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/

Чтобы получать уведомление о том, что задание Cron завершилось с ошибкой, следует вставить следующую строку перед всеми задачами Cron.

Сохраните изменения и закройте документ. На этом ваша работа завершена.

Изменение пароля учетной записи в PostfixAdmin.

Пользователи имеют возможность зайти в PostfixAdmin по ссылке https://postfixadmin.example.com/users/login.php и после этого обновить свои пароли.

Ограничение доступа к Sendmail.

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

sudo nano /etc/postfix/main.cf

Вставьте эту строку в конце файла, чтобы разрешить отправку писем через sendmail только пользователю root и группе www-data. Также можно добавить другие имена пользователей при необходимости.

authorized_submit_users = root, www-data

Сохраните изменения и закройте файл, после чего перезапустите Postfix.

sudo systemctl restart postfix

Следующий этап.

Надеюсь, данный учебник оказался полезным для вас в установке и использовании PostfixAdmin на Ubuntu для создания виртуальных почтовых ящиков. В четвертой части я расскажу, как настроить SPF и DKIM с Postfix, чтобы улучшить доставляемость почты, а в следующем учебнике планирую продемонстрировать, как управлять несколькими доменами с помощью PostfixAdmin.

Для доступа к электронной почте через веб-браузер стоит обратить внимание на Roundcube. Это широко используемый и многофункциональный клиент веб-почты с открытым исходным кодом. Если вы нашли эту информацию полезной, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций.

Читайте также:  Как удалить файлы из репозитория Git, не удаляя локальные копии