Postfix Admin

Материал из BSD Howto
Перейти к навигации Перейти к поиску

Установка postfixadmin-php84

Postfix Admin — веб-инструмент управления, написанный на PHP для Postfix (но прекрасно подходит и для Exim) с виртуальными доменами в стиле Postfix, использующими поиск в MySQL или PostgreSQL. Так-же Postfix Admin работает на Apache, Lighttpd и на любом веб-сервере с поддержкой PHP 5.1.2+.

Подробная информация о Postfix Admin на сайте http://www.postfixadmin.org/

Установка из пакета (предварительная установка пакетов PKG и PHP не требуется, дополнительная информация о которых в статьях PKG и Установка lang/php84; потребуется установка СУБД, например - MySQL, дополнительная информация о которой в статье MySQL):

# pkg install postfixadmin-php84

Проверка установки postfixadmin-php84:

# pkg version -v | grep php84
php84-8.4.5_1                      =   up-to-date with remote
php84-mbstring-8.4.5_1             =   up-to-date with remote
php84-pdo-8.4.5_1                  =   up-to-date with remote
php84-pdo_sqlite-8.4.5_1           =   up-to-date with remote
php84-pecl-imap-1.0.3              =   up-to-date with remote
php84-session-8.4.5_1              =   up-to-date with remote
postfixadmin-php84-3.4.d.20211018  =   up-to-date with remote

Вывод команды содержит список установленных расширений PHP. В списке отсутствует расширение php84-pdo_mysql, которое требуется для СУБД MySQL, если для Postfix Admin будет использована она.

Установка из пакета расширения php84-pdo_mysql:

# pkg install php84-pdo_mysql
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        php84-pdo_mysql: 8.4.5_1

Number of packages to be installed: 1

19 KiB to be downloaded.

Proceed with this action? [y/N]: y
[1/1] Fetching php84-pdo_mysql-8.4.5_1.pkg: 100%   19 KiB  19.7kB/s    00:01
Checking integrity... done (0 conflicting)
[1/1] Installing php84-pdo_mysql-8.4.5_1...
[1/1] Extracting php84-pdo_mysql-8.4.5_1: 100%
=====
Message from php84-pdo_mysql-8.4.5_1:

--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-30-pdo_mysql.ini.sample

Повторная проверка установки:

# pkg version -v | grep php84
php84-8.4.5_1                      =   up-to-date with remote
php84-mbstring-8.4.5_1             =   up-to-date with remote
php84-pdo-8.4.5_1                  =   up-to-date with remote
php84-pdo_mysql-8.4.5_1            =   up-to-date with remote
php84-pdo_sqlite-8.4.5_1           =   up-to-date with remote
php84-pecl-imap-1.0.3              =   up-to-date with remote
php84-session-8.4.5_1              =   up-to-date with remote
postfixadmin-php84-3.4.d.20211018  =   up-to-date with remote

Вывод команды содержит список всех необходимых установленных расширений PHP.

Перезапуск PHP-FPM после установки расширений PHP:

# service php_fpm restart
Performing sanity check on php-fpm configuration:
[28-Apr-2025 16:58:14] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
Stopping php_fpm.
Performing sanity check on php-fpm configuration:
[28-Apr-2025 16:58:14] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
Starting php_fpm.

Начальная настройка postfixadmin-php84

Копирование структуры сайта:

# cd /usr/local/www
# cp -Rp postfixadmin mailadmin.mydomain.ru

Настройка сайта Postfix Admin в файле /usr/local/etc/nginx/mailadmin.mydomain.ru.conf:

server {
    listen       80;
    server_name  mailadmin.mydomain.ru;

    access_log   /var/log/nginx/mailadmin.mydomain.ru.access.log;
    error_log    /var/log/nginx/mailadmin.mydomain.ru.error.log;

    location / {
        root   /usr/local/www/mailadmin.mydomain.ru/public;
        index  index.php;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/local/www/mailadmin.mydomain.ru/public$fastcgi_script_name;
        include        fastcgi_params;
    }
}

Включение конфигурации сайта Postfix Admin в файл /usr/local/etc/nginx/nginx.conf:

    include /usr/local/etc/nginx/mailadmin.mydomain.ru.conf;

Перезагрузка конфигурации Nginx после первоначальной настройки сайта для доступа к нему со стороны Let's Encrypt по HTTP:

# service nginx reload
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

Получение сертификата

Получение сертификата для домена:

# certbot --nginx -d mailadmin.mydomain.ru

Скрипт включит следующие строки в файл конфигурации сайта /usr/local/etc/nginx/mailadmin.mydomain.ru.conf:

    listen 443 ssl; # managed by Certbot
    ssl_certificate /usr/local/etc/letsencrypt/live/mailadmin.mydomain.ru/fullchain.pem; # managed by Certbot
    ssl_certificate_key /usr/local/etc/letsencrypt/live/mailadmin.mydomain.ru/privkey.pem; # managed by Certbot
    include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

Перезагрузка конфигурации Nginx для включения доступа по HTTPS:

# service nginx reload
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

Окончательная настройка сайта

Настройки Postfix Admin по умолчанию находятся в файле /usr/local/www/mailadmin.mydomain.ru/config.inc.php. Его не рекомендуется изменять на случай обновлений пакета.

Редактирование настроек следует делать в файле /usr/local/www/mailadmin.mydomain.ru/config.local.php (он должен начинаться с префикса):

<?php

Параметр означает, что все необходимые настройки внесены в файл /usr/local/www/mailadmin.mydomain.ru/config.local.php:

$CONF['configured'] = true;

Создание хеша установочного пароля:

# php -r 'echo password_hash("<пароль>", PASSWORD_DEFAULT); echo "\n";'
$2y$12$w7H3Vo2EIuHOHRxObmUWZ.DpsujtU5yy8PWbfYxzXBSe2tun/qjTG

Добавление полученного хеша в файл настроек /usr/local/www/mailadmin.mydomain.ru/config.local.php:

$CONF['setup_password'] = '$2y$12$w7H3Vo2EIuHOHRxObmUWZ.DpsujtU5yy8PWbfYxzXBSe2tun/qjTG';

Настройка языка:

$CONF['default_language'] = 'ru';

Пример настройки доступа Postfix Admin к СУБД в файле /usr/local/www/mailadmin.mydomain.ru/config.local.php

$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = '192.168.0.103';
$CONF['database_user'] = 'mailadmin';
$CONF['database_password'] = <пароль к базе данных Postfix Admin>;
$CONF['database_name'] = 'mailadmin';

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

$CONF['smtp_server'] = '192.68.0.105';
$CONF['smtp_port'] = '25';

Настройка способа шифрования паролей почтовых ящиков (в данном случае пароли сохраняются в базе данных Postfix Admin в открытом виде, что небезопасно):

$CONF['encrypt'] = 'cleartext';

Настройка автоматической генерации паролей:

$CONF['generate_password'] = 'YES';

Настройка хранение почтовых ящиков в папках вида domain/username@domain: $CONF['domain_in_mailbox'] = 'YES';

Создание базы данных Postfix Admin:

# mysql -u root -p

> create database mailadmin;
Query OK, 1 row affected (0.01 sec)

Предоставление доступа пользователю 'mailadmin' к базе данных 'mailadmin' с хоста '<IP-адрес>' (потребуется доступ с хостов, где расположены Postfix Admin, SMTP-сервер и IMAP-сервер) и применение изменений:

> create user 'mailadmin'@'<IP-адрес>' identified by '<пароль>';
Query OK, 0 rows affected (0.04 sec)

> grant all on mailadmin.* to 'mailadmin'@'<IP-адрес>';
Query OK, 0 rows affected (0.00 sec)

> flush privileges;
Query OK, 0 rows affected (0.01 sec)

Переход на сайт:

https://mailadmin.mydomain.ru/setup.php

Вывод команды содержит ошибки:

Errors (MUST be fixed)
⛔Database connection string : mysql:mysql:host=192.168.128.13;dbname=mailadmin;charset=UTF8
⛔Problem connecting to database, check database configuration ($CONF['database_*'] entries in config.local.php)
⛔SQLSTATE[HY000] [2002] No such file or directory

Параметр "Database connection string" содержит строку "mysql:mysql:host=192.168.0.103;dbname=mailadmin;charset=UTF8", в которой дублируется подстрока "mysql:". Требуется исправление ошибки в функции "function db_connection_string()" в файле /usr/local/www/mailadmin.mydomain.ru/functions.inc.php:

$dsn = 'mysql:';
if ($socket) {
    $dsn .= "unix_socket={$socket}";
} else {
    $dsn .= "mysql:host={$CONF['database_host']}";
}

Необходима замена строки:

    $dsn .= "mysql:host={$CONF['database_host']}";

на строку:

    $dsn .= "host={$CONF['database_host']}";

Пример вывода сайта:

✅ PHP version - 8.4.12 
✅ Postfixadmin public url detected as http://mailadmin.mydomain.ru/ use $CONF['site_url'] to override
✅ Postfixadmin installed at - /usr/local/www/mailadmin.mydomain.ru/public
✅ config.local.php file found : /usr/local/www/mailadmin.mydomain.ru/config.local.php
✅ Database - MySQL support available
✅ Database - SQLite support available
✅ Password hashing - $CONF["encrypt"] = cleartext
✅ Password hashing - $CONF["encrypt"] - hash generation OK
✅ Database connection configured OK (using PDO mysql:host=192.168.0.103;dbname=mailadmin;charset=UTF8)
✅ Database connection - Connected OK
✅ Depends on: PHP session support - OK
✅ Depends on: PHP pcre support - OK
✅ Depends on: PHP mbstring support - OK
✅ Optional - PHP IMAP functions - OK

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

Приглашение в управление Postfix Admin:

Вид главной страницы Postfix Admin:

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