PostfixAdmin – Настройка виртуальных почтовых ящиков на сервере с Rocky Linux 9/Alma Linux 9

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

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

Содержание статьи

Возможности PostfixAdmin

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

Внимание: По завершении третьей части вы не сможете использовать локальные учетные записи Unix в качестве почтовых адресов. Все почтовые адреса должны создаваться через веб-интерфейс PostfixAdmin.

Требуемые условия

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

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

Установка сервера базы данных MariaDB на Rocky Linux 9 или Alma Linux 9.

PostfixAdmin разработан на языке PHP и требует наличия базы данных (MySQL/MariaDB, PostgreSQL или SQLite). В данной статье будет рассматриваться MariaDB, которая служит альтернативой MySQL. Чтобы установить MariaDB на Rocky Linux 9 или Alma Linux 9, выполните следующую команду.

sudo dnf install mariadb-server mariadb - y

После установки нужно запустить программу.

sudo systemctl start mariadb

Активируйте автоматический запуск при старте системы.

sudo systemctl enable mariadb

systemctl status mariadb

mariadb.service - Сервер базы данных MariaDB версии 10.5
Статус: загружен (/usr/lib/systemd/system/mariadb.service; включен; предустановка поставщика: отключена)
Состояние: активен:действуетС понедельника, 29 августа 2022 года, 09:41:46 UTC; 8 секунд назад. Документация: man51166 /usr/libexec/mariadbd --базовый_каталог=/usr

«Включено» указывает на то, что автозапуск при загрузке активирован, и сервер MariaDB функционирует. Теперь необходимо запустить скрипт для повышения безопасности.

sudo mysql_secure_installation

Если вас попросят ввести пароль root для MariaDB, просто нажмите клавишу Enter, поскольку пароль на данный момент не установлен. После этого введите y, чтобы задать пароль root для сервера MariaDB.

Установите MariaDB на Red Hat 8 или CentOS 8.

После этого вы можете нажать Enter, чтобы ответить на все оставшиеся вопросы. Это приведет к удалению анонимного пользователя, отключению удаленного доступа для root и удалению тестовой базы данных. Этот шаг является важным требованием для обеспечения безопасности базы данных MariaDB. (Имейте в виду, что буква Y написана с заглавной буквы, что указывает на то, что это значение по умолчанию.)

Настройка безопасности MySQL на RHEL 8 и CentOS 8.

Установка PostfixAdmin на сервер Rocky Linux 9/Alma Linux 9

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

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

Извлеките архив после его загрузки.

Если вы применяете Apache, разархивируйте его в папку /var/www/ и измените имя на postfixadmin.

sudo dnf install tar - y7 sudo tar xvf postfixadmin-3.3.11

.tar.gz - C /var/www/ sudo mv /var/www/postfixadmin-postfixadmin-

3.3.11 /var/www/postfixadmin

Если вы применяете Nginx, распакуйте его в папку /usr/share/nginx/ и измените имя на postfixadmin.

sudo dnf install tar - y sudo tar xvf postfixadmin-3.3.11

bash3.3.11 /usr/share/nginx/postfixadmin

Инсталляция необходимых и рекомендуемых модулей PHP

PostfixAdmin нуждается в модуле php-imap для формирования подпапок в почтовых ящиках. Однако модуль php-imap отсутствует в стандартном репозитории Rocky Linux 9/Alma Linux 9. Поэтому для его установки необходимо воспользоваться репозиторием Remi.

Добавьте репозиторий Remi.

sudo dnf install - y https://rpms.remirepo.net/enterprise/remi-release-9.rpm

После этого отключите потоки модулей PHP.

sudo dnf module reset php

Активируйте поток модуля php

sudo dnf module enable php:remi-8.0 - y

После этого введите следующую команду для установки необходимых или рекомендованных модулей PHP для PostfixAdmin.

sudo dnf install - y php-fpm php-imap php-mbstring php-mysqlnd php-gd php-opcache php-json php-curl php-zip php-xml php-bz2 php-intl php-gmp

Необходимо выполнить следующую команду, чтобы указать SELinux разрешить Apache исполнять PHP код с использованием PHP-FPM.

sudo setsebool - P httpd_execmem 1

Если вы применяете Nginx, внесите изменения в конфигурационный файл PHP-FPM:

nano /etc/php-fpm.d/www.conf

По умолчанию PHP-FPM запускается от имени пользователя apache. Поскольку вы используете веб-сервер Nginx, необходимо внести изменения. Обратите внимание на следующие две строки.

user = apache group = apache

user = nginx group = nginx

Сохраните файл и закройте его. После этого запустите PHP-FPM.

sudo systemctl start php-fpm

Активируйте автоматический запуск при старте системы.

sudo systemctl enable php-fpm

Перезагрузите сервер Apache или Nginx.

sudo systemctl restart httpd sudo systemctl restart nginx

Конфигурация прав доступа

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

sudo mkdir /var/www/postfixadmin/templates_c sudo setfacl - R - m u:apache:rwx /var/www/postfixadmin/templates_c/ sudo chcon - t httpd_sys_rw_content_t /var/www/postfixadmin/templates_c/ - R

sudo mkdir /usr/share/nginx/postfixadmin/templates_c sudo setfacl - R - m u:nginx:rwx /usr/share/nginx/postfixadmin/templates_c/ sudo chcon - t httpd_sys_rw_content_t /usr/share/nginx/postfixadmin/templates_c/ - R

По умолчанию SELinux не разрешает Apache/Nginx отправлять сетевые запросы на другие серверы. Однако впоследствии Apache/Nginx потребуется получить статус TLS сертификата от сервера Let’s Encrypt CA для реализации OCSP stapling, поэтому необходимо разрешить выполнение этой операции с помощью следующей команды.

sudo setsebool - P httpd_can_network_connect 1

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

sudo setfacl - R - m u:nginx:rwx /var/lib/php/opcache/ /var/lib/php/session/ /var/lib/php/wsdlcache/

sudo systemctl restart httpd sudo systemctl restart nginx

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

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

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

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

Зайдите в оболочку MySQL/MariaDB в качестве пользователя root, используя команду ниже.

mysql - u root

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

create database postfixadmin;

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

grant all privileges on postfixadminpostfixadmin'@'localhost' установлен с паролем 'postfixadmin_password';

Обновите таблицу привилегий, чтобы изменения вступили в силу, и завершите сессию MariaDB.

flush privileges; exit;

Конфигурация PostfixAdmin

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

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

sudo nano /usr/share/nginx/postfixadmin/config.local.php

Вставьте указанные строки в файл, чтобы PostfixAdmin получил доступ к базе данных MySQL/MariaDB. Не забудьте заменить postfixadmin_password на фактический пароль, который вы создали на шаге 4.

postfixadmin_password'; $CONF['database_name'] = 'postfixadmin'; $CONF['encrypt'] = 'dovecot:BLF-CRYPT'; $CONF['dovecotpw'] = "/usr/bin/doveadm pw - r 12";

Сохраните файл и закройте его. Имейте в виду, что мы применим схему шифрования паролей BLF-CRYPT.

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

Apache

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

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

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

ServerName postfixadmin. example.comКорень документа: /var/www/postfixadmin/public/ Лог ошибок: /var/log/httpd/postfixadmin_error.log Лог доступа: /var/log/httpd/postfixadmin_access.log (формат: combined)Опции FollowSymLinks и разрешение All для AllowOverride. Опции FollowSymLinks, MultiViews и AllowOverride All. Порядок: разрешить, запретить; доступ разрешен для всех.

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

sudo systemctl reload httpd

Теперь вам следует перейти по адресу http://postfixadmin.example.com/setup.php, чтобы ознакомиться с установкой PostfixAdmin через веб-интерфейс.

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корень /usr/share/nginx/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-fpm/www. 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

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

Активация HTTPS

Чтобы зашифровать HTTP-трафик, можно активировать HTTPS, установив бесплатный TLS-сертификат от Let’s Encrypt.

Чтобы получить и установить TLS-сертификат при использовании Apache, выполните следующую команду.

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

Для получения и установки TLS-сертификата при использовании Nginx, выполните следующую команду.

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

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

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

Активация статистики в Dovecot

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

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

Вставьте указанные строки в нижнюю часть этого файла. Если вы применяете Nginx, замените apache на nginx.

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

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

sudo gpasswd - a apache dovecot

sudo gpasswd - a nginx dovecot

sudo systemctl restart dovecot

Завершение процесса установки в браузере.

Откройте адрес postfixadmin. example.com/setup.php, чтобы начать процесс настройки. В первую очередь вам потребуется установить пароль для конфигурации PostfixAdmin.

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

$CONF['setup_password'] = 'db1b019982a6ba878bdc6bd923bef03e:4e29fdd341b570364064a5ad69652f3d8bee0bb4';

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

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

sudo nano /usr/share/nginx/postfixadmin/config.local.php

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

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

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

После регистрации учетной записи супер-администратора у вас появится возможность войти в PostfixAdmin по следующему адресу: postfixadmin. example.com/login.php.

вход в домены виртуальных почтовых ящиков PostfixAdmin

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

не удается зашифровать пароль с помощью dovecotpw, см. журнал ошибок для подробностей

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

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

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

Если вы столкнулись с указанной ошибкой,

Неверный запрос: Указанный ключ был слишком длинным; максимальная длина ключа — 1000 байт

Вам необходимо войти на сервер базы данных MySQL или MariaDB с правами пользователя root через терминал.

mysql - u root - p

и заменить стандартную сортировку с utf8mb4_general_ci на utf8_general_ci.

MariaDB [(none)]> alter database postfixadmin collate ='utf8_general_ci';

Выйдите из консоли MySQL/MariaDB и обновите страницу setup.php.

Конфигурация SELinux

При установке PostfixAdmin требуется доступ к конфигурационным файлам Dovecot для генерации пароля. Однако по умолчанию SELinux блокирует веб-серверу возможность чтения этих файлов. Для устранения данной проблемы следуйте приведённой инструкции.

Установите нужные пакеты.

sudo dnf install - y binutils rpm-build setools-console policycoreutils-python3 policycoreutils-devel

Если PostfixAdmin не удается установить пароль или вы не можете войти в систему и получаете сообщение «Ваш адрес электронной почты или пароль неверны», проверьте, не блокирует ли SELinux эти действия с помощью следующей команды.

sudo ausearch - m AVC - ts recent

Данная команда отобразит события SELinux за последние 10 минут.

  • ausearch — это утилита, предназначенная для выполнения запросов к записям, создаваемым демоном аудита (auditd.service).
  • -m AVC: запрос сообщений формата AVC. AVC расшифровывается как Access Vector Cache.
  • Установите временную метку на последние 10 минут.

Пример результата выполнения команды:

type=AVC msg=audit(1662279808.864:90942): avc: отказано < connectto > для pid=46820 comm="doveadm" path="/run/dovecot/stats-writer" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:dovecot_t:s0 tclass=unix_stream_socket permissive=0

С помощью следующей команды вы можете создать загружаемый пакет для модуля SELinux:

sudo ausearch - m AVC - ts recent | audit2allow - M nginx_dovecot

В приведенном примере я обозначил данный пакет как nginx_dovecot, поскольку SELinux не разрешал Nginx доступ к конфигурационному файлу Dovecot. После этого необходимо установить модульный пакет.

sudo semodule - i nginx_doveconf.pp

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

sudo ausearch - m AVC - ts recent | audit2allow - w

type=AVC msg=audit(1662279808.864:90942): avc: отказано < connectto > для pid=46820 comm="doveadm" path="/run/dovecot/stats-writer" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:dovecot_t:s0 tclass=unix_stream_socket permissive=0 Причиной было: Переменная daemons_enable_cluster_mode была установлена неправильно. Описание: Включите кластерный режим для демонов. Разрешите доступ, выполнив: # setsebool - P daemons_enable_cluster_mode 1

Как вы можете заметить, указано основание для отказа в доступе, а также предложен способ его устранения:

sudo setsebool - P daemons_enable_cluster_mode 1

После этого мой PostfixAdmin функциониирует безупречно.

Конфигурирование Postfix для работы с базой данных MySQL/MariaDB

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

Для начала необходимо установить пакет postfix-mysql, чтобы добавить поддержку MySQL для карт в Postfix.

sudo dnf install - y postfix-mysql

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

sudo nano /etc/postfix/main.cf

В конце данного файла вставьте следующие строки. (В текстовом редакторе Nano можно использовать комбинацию клавиш Ctrl+W, а затем Ctrl+V, чтобы переместиться в конец файла.)

virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

  • Параметр virtual_mailbox_domains ссылается на файл, который предоставляет Postfix инструкции о том, как извлекать данные о доменах из базы данных.
  • virtual_mailbox_maps указывает на файлы, которые информируют Postfix о том, как извлекать данные email-адресов из базы данных.
  • Параметр virtual_alias_maps указывает на файлы, которые информируют Postfix о том, как извлекать данные об алиасах из базы данных.

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

virtual_transport = lmtp:unix:private/dovecot-lmtp

Настройка Postfix для работы с базой данных MySQL MariaDB.

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

sudo mkdir /etc/postfix/sql/

Сформируйте файл с именем mysql_virtual_domains_maps.cf.

sudo nano /etc/postfix/sql/mysql_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 = '1' #query = SELECT domain FROM domain WHERE domain='%s' #optional query to use when relaying for backup MX #query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1' #expansion_limit = 100

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

sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf

Включите следующую информацию.

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

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

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf

Включите следующую информацию.

user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT maildir FROM mailbox, alias_domain WHERE alias_domain. alias_domain = '%d' and mailbox. username = CONCAT('%u', '@', alias_domain. target_domain) AND mailbox. active = 1 AND alias_domain. active='1'

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

sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf

Включите следующую информацию.

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

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

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf

Включите следующую информацию.

user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT goto FROM alias, alias_domain WHERE alias_domain. alias_domain = '%d' and alias. address = CONCAT('%u', '@', alias_domain. target_domain) AND alias. active = 1 AND alias_domain. active='1'

Создайте файл с названием mysql_virtual_alias_domain_catchall_maps.

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

Включите следующую информацию.

# отвечает за настройки catch-all доменов user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT goto FROM alias, alias_domain WHERE alias_domain. alias_domain = '%d' and alias. address = CONCAT('@', alias_domain. target_domain) AND alias. active = 1 AND alias_domain. active='1'

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

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

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

postconf mydestination

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

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

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 --uid 2000 --user-group --no-create-home

Разработайте основное оформление для электронной почты.

sudo mkdir /var/vmail/

Сделайте владельцем vmail.

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

Необходимо также изменить контекст SELinux, чтобы разрешить запись.

sudo chcon - t mail_spool_t /var/vmail/ - R

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

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

sudo dnf install - y dovecot-mysql

После этого внесите изменения в файл 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

Почтовая система для виртуальных пользователей на базах RHEL, CentOS и Rocky Linux.

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

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

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

auth_username_format = %n

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

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

auth_username_format = %u

Добавьте следующую строку в конце файла, чтобы Dovecot имел возможность извлекать данные о пользователе из базы данных.

!include auth-sql.conf.ext

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

#!include auth-system.conf.ext

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

auth_debug = yes auth_debug_passwords = yes

dovecot-mysql-Password-database-authentication

Запишите изменения и закройте документ.

Сформируйте файл с именем dovecot-sql.conf.ext.

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

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

driver = mysql connect = host=localhost dbname=postfixadmin user=postfixadmin password=postfixadmin_password default_pass_scheme = BLF-CRYPT password_query = SELECT username AS user, password FROM mailbox WHERE username = '%u' AND active='1' user_query = SELECT maildir, 2000 AS uid, 2000 AS gid FROM mailbox WHERE username = '%u' AND active='1' iterate_query = SELECT username AS user FROM mailbox

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

sudo systemctl restart dovecot

При попытке входа пользователя Dovecot создает хеш BLF-CRYPT из введенного пароля и затем сверяет его с хешем, который хранится в базе данных.

Внести домен и почтовые ящики в PostfixAdmin.

Зайдите в веб-интерфейс PostfixAdmin с правами администратора. Перейдите на вкладку «Список доменов» и нажмите на «Новый домен», чтобы создать новый домен. Здесь вы сможете указать количество разрешённых псевдонимов и почтовых ящиков для этого домена.

добавить домен в postfixadmin

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

Добавление почтового ящика в PostfixAdmin.

Запустите свой почтовый клиент на компьютере, например, Mozilla Thunderbird, и добавьте свой почтовый аккаунт. Если Thunderbird успешно определил настройки вашего почтового сервера, как показано ниже, просто нажмите кнопку «Готово», и вы сможете отправлять и получать электронные письма.

Настройка уже существующей учетной записи электронной почты в Mozilla Thunderbird

Если Thunderbird не смог обнаружить настройки вашего почтового сервера, нажмите на кнопку «Ручная настройка», чтобы ввести информацию о сервере.

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

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

Теперь вы должны иметь возможность подключиться к своему почтовому серверу и отправлять и получать электронные письма через ваш настольный почтовый клиент!

Рекомендации по диагностике и устранению проблем

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

Не получается войти в почтовые программы.

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

sudo nmap mail.your-domain.com

Убедитесь, что Dovecot функционирует корректно.

systemctl status dovecot

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

sudo journalctl - eu dovecot

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

postfix/trivial-rewrite[28494]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_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]) failed: Permission denied (euid=2000(vmail) egid=2000(vmail) отсутствует +w perm: /var/mail, мы не в группе 8(mail), dir owned by 0:8 mode=0775

Cloudflare DNS

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

Доступ к реле ограничен.

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

Приложение Почта для iOS

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

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

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

iOS Mail требует обязательного использования шифрования SSL.

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

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

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

25 авг 20:25:24 mx postfix/trivial-rewrite[3313]: предупреждение: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_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]: Временная ошибка поиска

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

sudo journalctl - eu mariadb

sudo journalctl - eu mysql

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

htop

free - m

Смена пароля для пользователя в PostfixAdmin.

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

Автоматическая уборка папок «Спам» и «Корзина».

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

sudo doveadm expunge - u *@example.com mailbox Junk all

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

sudo doveadm expunge - u *@example.com mailbox Trash all

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

sudo doveadm expunge - u *@example.com mailbox Junk savedbefore 2w

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

sudo crontab - e

Вставьте данную команду для автоматической очистки папок Нежелательная почта и Корзина ежедневно.

@daily doveadm expunge - u *@example.comпочтовый ящик Спам сохранен более 2 недель; doveadm очистка - u *@example.com mailbox Trash savedbefore 2w

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

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

sudo nano /etc/postfix/main.cf

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

authorized_submit_users = root, www-data, vmail

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

sudo systemctl restart postfix

Далее следует шаг.

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

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

Читайте также:  Простой и удобный способ установить ArchLinux с графическим интерфейсом