Postfix Admin: различия между версиями

Материал из BSD Howto
Перейти к навигации Перейти к поиску
 
(не показана 31 промежуточная версия этого же участника)
Строка 7: Строка 7:
Установка из пакета (предварительная установка пакетов PKG и PHP не требуется, дополнительная информация о которых в статьях [[PKG]] и [[PHP+Nginx|Установка lang/php84]]; потребуется установка СУБД, например - MySQL, дополнительная информация о которой в статье [[MySQL]]):
Установка из пакета (предварительная установка пакетов PKG и PHP не требуется, дополнительная информация о которых в статьях [[PKG]] и [[PHP+Nginx|Установка lang/php84]]; потребуется установка СУБД, например - MySQL, дополнительная информация о которой в статье [[MySQL]]):
  # pkg install postfixadmin-php84
  # pkg install postfixadmin-php84
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 49 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
        gettext-runtime: 0.23.1
        libedit: 3.1.20250104,1
        oniguruma: 6.9.10
        p5-Algorithm-C3: 0.11
        p5-Class-C3: 0.35
        '''[пропущен список пакетов для установки]'''
Number of packages to be installed: 49
The process will require 95 MiB more space.
26 MiB to be downloaded.
Proceed with this action? [y/N]: y
[1/49] Fetching p5-Try-Tiny-0.32.pkg: 100%  18 KiB  18.2kB/s    00:01
[2/49] Fetching p5-Moo-2.005005.pkg: 100%  50 KiB  51.0kB/s    00:01
[3/49] Fetching php84-session-8.4.5_1.pkg: 100%  42 KiB  43.0kB/s    00:01
[4/49] Fetching p5-Sub-Quote-2.006008_1.pkg: 100%  25 KiB  25.2kB/s    00:01
[5/49] Fetching p5-MooX-Types-MooseLike-0.29.pkg: 100%  16 KiB  16.4kB/s    00:01
'''[пропущен список скачиваемых пакетов]'''
Checking integrity... done (0 conflicting)
[1/49] Installing gettext-runtime-0.23.1...
[1/49] Extracting gettext-runtime-0.23.1: 100%
[2/49] Installing libedit-3.1.20250104,1...
[2/49] Extracting libedit-3.1.20250104,1: 100%
[3/49] Installing oniguruma-6.9.10...
[3/49] Extracting oniguruma-6.9.10: 100%
[4/49] Installing panda-cclient-20130621_3...
[4/49] Extracting panda-cclient-20130621_3: 100%
[5/49] Installing perl5-5.36.3_3...
[5/49] Extracting perl5-5.36.3_3: 100%
'''[пропущен список устанавливаемых пакетов]'''
=====
Message from panda-cclient-20130621_3:
--
Warning: You have chosen to include SSL support. Applications/ports that use
the cclient library but do not support SSL may stop working or have problems
linking. Linking them explicitly with ssl (-lssl -lcrypto) may or may not help.
=====
Message from php84-mbstring-8.4.5_1:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-mbstring.ini.sample
=====
Message from php84-pdo-8.4.5_1:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-pdo.ini.sample
=====
Message from php84-pecl-imap-1.0.3:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-20-imap.ini.sample
=====
Message from php84-session-8.4.5_1:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-18-session.ini.sample
=====
Message from php84-pdo_sqlite-8.4.5_1:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-30-pdo_sqlite.ini.sample
=====
Message from postfixadmin-php84-3.4.d.20211018:
--
If you are upgrading, you may need to update your existing database.
You can do so by browsing to [URL]/setup.php where [URL] is the
postfixadmin root.
To avoid checksum errors when uninstalling or upgrading postfixadmin,
do not edit config.inc.php.  Instead, put your configuration settings
in config.local.php in the postfixadmin webroot.  That file will be
included automatically by config.inc.php.
For detailed information, please see the complete installation steps
in /usr/local/share/doc/postfixadmin/INSTALL.TXT.


Проверка установки postfixadmin-php84:
Проверка установки postfixadmin-php84:
Строка 172: Строка 83:
   
   
     location / {
     location / {
         root  /usr/local/www/nginx;
         root  /usr/local/www/mailadmin.mydomain.ru/public;
         index  index.php;
         index  index.php;
     }
     }
Строка 215: Строка 126:
== Окончательная настройка сайта ==
== Окончательная настройка сайта ==


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


Параметр подразумевает, что все необходимые настройки внесены в файл /usr/local/www/mailadmin.mydomain.ru/config.local.php:
Редактирование настроек следует делать в файле /usr/local/www/mailadmin.mydomain.ru/config.local.php (он должен начинаться с префикса):
<?php
 
Параметр означает, что все необходимые настройки внесены в файл /usr/local/www/mailadmin.mydomain.ru/config.local.php:
  $CONF['configured'] = true;
  $CONF['configured'] = true;


Строка 226: Строка 138:
  $2y$12$w7H3Vo2EIuHOHRxObmUWZ.DpsujtU5yy8PWbfYxzXBSe2tun/qjTG
  $2y$12$w7H3Vo2EIuHOHRxObmUWZ.DpsujtU5yy8PWbfYxzXBSe2tun/qjTG


Добавление полученного хеша файл настроек /usr/local/www/mailadmin.mydomain.ru/config.local.php:
Добавление полученного хеша в файл настроек /usr/local/www/mailadmin.mydomain.ru/config.local.php:
  $CONF['setup_password'] = '$2y$12$w7H3Vo2EIuHOHRxObmUWZ.DpsujtU5yy8PWbfYxzXBSe2tun/qjTG';
  $CONF['setup_password'] = '$2y$12$w7H3Vo2EIuHOHRxObmUWZ.DpsujtU5yy8PWbfYxzXBSe2tun/qjTG';


Настройка языка:
Настройка языка:
Строка 234: Строка 146:
Пример настройки доступа Postfix Admin к СУБД в файле /usr/local/www/mailadmin.mydomain.ru/config.local.php
Пример настройки доступа Postfix Admin к СУБД в файле /usr/local/www/mailadmin.mydomain.ru/config.local.php
  $CONF['database_type'] = 'mysqli';
  $CONF['database_type'] = 'mysqli';
  $CONF['database_host'] = '<IP-адрес СУБД>';
  $CONF['database_host'] = '192.168.0.103';
  $CONF['database_user'] = 'mailadmin';
  $CONF['database_user'] = 'mailadmin';
  $CONF['database_password'] = '<пароль>';
  $CONF['database_password'] = <пароль к базе данных Postfix Admin>;
  $CONF['database_name'] = 'mailadmin';
  $CONF['database_name'] = 'mailadmin';


Пример способа шифрования паролей почтовых ящиков (в данном случае пароли сохраняються в базе данных Postfix Admin в открытом виде, что небезопасно):
Настройка SMTP-сервера, куда будут отправляться уведомления о создании почтовых ящиков:
$CONF['smtp_server'] = '192.68.0.105';
$CONF['smtp_port'] = '25';
 
Настройка способа шифрования паролей почтовых ящиков (в данном случае пароли сохраняются в базе данных Postfix Admin в открытом виде, что небезопасно):
  $CONF['encrypt'] = 'cleartext';
  $CONF['encrypt'] = 'cleartext';
Настройка автоматической генерации паролей:
$CONF['generate_password'] = 'YES';
Настройка хранение почтовых ящиков в папках вида domain/username@domain:
$CONF['domain_in_mailbox'] = 'YES';


Создание базы данных Postfix Admin:
Создание базы данных Postfix Admin:
Строка 260: Строка 182:
Переход на сайт:
Переход на сайт:
  https://mailadmin.mydomain.ru/setup.php
  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']}";


Пример вывода сайта:
Пример вывода сайта:
'''Hosting Environment Check'''
  ✅ PHP version - 8.4.12
'''Information'''
  ✅ PHP version - 8.4.5
  ✅ Postfixadmin public url detected as http://mailadmin.mydomain.ru/ use $CONF['site_url'] to override
  ✅ 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
  ✅ Postfixadmin installed at - /usr/local/www/mailadmin.mydomain.ru/public
Строка 272: Строка 212:
  ✅ Password hashing - $CONF["encrypt"] = cleartext
  ✅ Password hashing - $CONF["encrypt"] = cleartext
  ✅ Password hashing - $CONF["encrypt"] - hash generation OK
  ✅ Password hashing - $CONF["encrypt"] - hash generation OK
  ✅ Database connection configured OK (using PDO mysql:mysql:host=10.xxx.yyy.zzz;dbname=mailadmin;charset=UTF8)
  ✅ Database connection configured OK (using PDO mysql:host=192.168.0.103;dbname=mailadmin;charset=UTF8)
  ✅ Database connection - Connected OK
  ✅ Database connection - Connected OK
  ✅ Depends on: PHP session support - OK
  ✅ Depends on: PHP session support - OK
Строка 279: Строка 219:
  ✅ Optional - PHP IMAP functions - OK
  ✅ Optional - PHP IMAP functions - OK


Дальнейший вывод сайта:
Сайт предложит настроить учётную запись администратора, после чего можно использовать Postfix Admin для администрирования почтовых доменов, ящиков и алиасов.
Database Update
 
Приглашение в управление Postfix Admin:
Everything seems fine... attempting to create/update database structure
[[Файл:2025050201.png|left|мини]]
 
Updating database:
<div style="clear: both"></div>
Вид главной страницы Postfix Admin:
- old version: 0; target version: 1845
[[Файл:2025050202.png|left|мини]]
  (If the update doesn't work, run setup.php?debug=1 to see the detailed error messages and SQL queries.)
updating to version 1 (MySQL)...  done
updating to version 2 (MySQL)...  done
updating to version 3 (MySQL)...  done
'''[список пропущен]'''
updating to version 1843 (all databases)...  done
updating to version 1844 (all databases)...  done
updating to version 1845 (all databases)...  done


Последняя строка сообщает об обновлении базы данных Postfix Admin до последней актуальной версии.
<div style="clear: both"></div>
Пример почтового алиаса домена и домена, на который будет приходить почта:
[[Файл:2025050203.png|left|мини]]

Текущая версия от 20:56, 5 декабря 2025

Установка 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:

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