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

Материал из BSD Howto
Перейти к навигации Перейти к поиску
Отмена версии 103, сделанной Igor (обсуждение)
Метки: отмена отменено
Метка: отменено
Строка 301: Строка 301:


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

Версия от 19:42, 2 мая 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
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:

# 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/nginx;
        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

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

Копирование файла настройки:

# cd /usr/local/www/mailadmin.mydomain.ru
# cp config.inc.php config.local.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'] = '<IP-адрес СУБД>';
$CONF['database_user'] = 'mailadmin';
$CONF['database_password'] = '<пароль>';
$CONF['database_name'] = 'mailadmin';

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

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

Создание базы данных 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

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

Hosting Environment Check
Information
✅ PHP version - 8.4.5
✅ 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:mysql:host=10.xxx.yyy.zzz;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

Дальнейший вывод сайта:

Database Update

Everything seems fine... attempting to create/update database structure

Updating database:

- old version: 0; target version: 1845

  (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 до последней актуальной версии.

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

мини