Установка Postfixadmin

Материал из wiki.lissyara.su
Перейти к: навигация, поиск

Postfixadmin написан на PHP, поэтому для его работы потребуется WEB-Сервер с поддержкой PHP и база данных (mysql или PostgreSQL). Я устанавливаю себе Nginx + php-cgi и базу данных mysql.


Установка Postfixadmin:

cd/usr/ports/mail/postfixadmin
make install clean

Если ранее PHP и его модули не устанавливали, тогда они будут установлены автоматически:

php5-pcre
php5-session
php5-mysql

Рекомендуется для работы postfixadmin установить ещё:

php5-imap
php5-mbstring

Всё что необходимо для работы Postfixadmin находится в /usr/local/www/postfixadmin/.
Можно попробовать сразу зайти через http://ИМЯ_ИЛИ_IP/postfixadmin и посмотреть на результат.

Обратите внимание на строку:

You can now run setup to make sure that all the PHP functions are available for Postfix Admin
to run.

При посещении setup нам покажут требования, которые нам необходимо выполнить, чтобы Postfixadmin заработал (В скобочках я указал цифры, смысл которых будет дан далее):

Postfix Admin Setup Checker
Running software: 
•	PHP version 5.2.6 (1)
Checking for dependencies: 
•	Magic Quotes: Disabled - OK (2)
•	Depends on: presence config.inc.php - OK (3)
•	Warning: $CONF['configured'] is 'false'. (4)
You must edit your config.inc.php and change this to true (this indicates you've created the
database and user) 
•	Depends on: MySQL 3.23, 4.0 - OK (5)
•	Error: Can't connect to database (6)
Please edit the $CONF['database_*'] parameters in config.inc.php. 
DEBUG INFORMATION:
Connect: Access denied for user 'postfix'@'localhost' (using password: YES) 
•	Depends on: session - OK (7)
•	Depends on: pcre - OK (8)
•	Depends on: multibyte string - OK (9)
•	Depends on: IMAP functions - OK (10)
Please fix the errors listed above.

1 - Версия установленного PHP.
2 - php.ini содержит переменную magic_quotes_gpc, которая отвечает за экранирование спецсимволов. Её нужно отключить.
Подробнее по безопасности можно почитать тут: http://www.lissyara.su/?id=1450
3 - Существует ли конфигурационный файл config.inc.php? Если его нет, будет error чё-то там.
4 - В конфигурационном файле /usr/local/www/postfixadmin/config.inc.php есть такая опция (она в самом начале):
$CONF['configured'] = false;
Данную опцию нужно будет изменить на true, когда все остальные проблемы будут решены. (т.е. создана база данных, возможно установлены дополнительные модули и т.д.)
5 - Есть ли в PHP поддержка mysql? (Смысл для Linux скорее имеет, т.к. на FreeBSD сам ставится)
6 - Сообщение означает, что postfixadmin не может подключиться к базе данных Mysql. Это нормально, т.к. предстоит создать базу и пользователя и внести соответствующие изменения в config.inc.php.
7 - Есть ли в PHP поддержка session?
8 - Есть ли в PHP поддержка pcre?
9 - Есть ли в PHP поддержка multibyte?
10 - Есть ли в PHP поддержка IMAP?


Выполняем пункт 6, т.к. с остальными проблем не должно возникнуть.
Postfixadmin сам создаёт таблицы, ему нужно только создать базу и пользователя, к примеру так:

Создаём файл под именем postfixadmin.sql:

# Создание базы, пользователя, прав доступа.

CREATE DATABASE eximbase;
GRANT ALL PRIVILEGES ON eximbase.* TO eximuser@localhost IDENTIFIED BY 'eximpassword';
FLUSH PRIVILEGES;

Теперь создаём пользователя и базу:

#mysql -uroot -ppassword < postfixadmin.sql

Правим конфиг.

Находим и устанавливаем нужные нам данные:
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'eximuser';
$CONF['database_password'] = 'eximpassword';
$CONF['database_name'] = 'eximbase';
$CONF['database_prefix'] = ;

Конечно, лучше сразу все переменные установить так, как нам нужно.
К примеру, я себе установил такие опции (Которые не по умолчанию):
$CONF['default_language'] = 'ru'; - Язык интерфейса.
$CONF['admin_email'] = 'admin@mydomain.ru'; - При отправке письма из Postfixadmin, это адрес ОТ.

При создании домена, можно будет создать сразу необходимые алиасы.
$CONF['default_aliases'] = array (
    'abuse' => 'admin@mydomain.ru',
    'hostmaster' => 'admin@mydomain.ru',
    'postmaster' => 'admin@mydomain.ru',
    'webmaster' => 'admin@mydomain.ru'

$CONF['domain_path'] = 'YES'; - Будет ли домен отдельной папкой. Очень удобно.
К примеру, у нас пользователи по умолчанию планируются в /mail
Если у нас несколько доменов, тогда будет такая структура:
/mail/MYDOMAIN.RU/user
/mail/MYDOMAIN2.RU/user 
/mail/MYDOMAIN3.RU/user

$CONF['domain_in_mailbox'] = 'NO'; - Добавление домена к имени пользователя.
К примеру, у нас пользователи по умолчанию планируются в /mail/MYDOMAIN.RU/
Тогда будет такая структура:
/mail/MYDOMAIN.RU/user1
/mail/MYDOMAIN.RU/user2
/mail/MYDOMAIN.RU/user3

Иначе(YES) будет добавляться домен:
/mail/MYDOMAIN.RU/user1@mydomain.ru
/mail/MYDOMAIN.RU/user2@mydomain.ru
/mail/MYDOMAIN.RU/user3@mydomain.ru

Соответственно и выглядит запись в базе данных (поле maildir с отсутствующим началом /mail, 
которое указывается не в postfixadmin, а в dovecot, courier-imap и т.п.):
mysql> select maildir from mailbox;
+--------------------------+
| maildir                  |
+--------------------------+
| mydomain1.ru/user1/      |
| mydomain2.ru/user2/      |
| mydomain3.ru/user3/      |
+--------------------------+
3 rows in set (0.01 sec)

Квоты по умолчанию (0 - отсутствуют):
$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '0';

Поддержка квот:
$CONF['quota'] = 'YES'; 

$CONF['transport'] = 'YES';
# разрешим переопределение вида домена: virtual, local или relay

И другие несущественные уже мелочи.

Теперь снова возвращаемся на http://ИМЯ_ИЛИ_IP/postfixadmin/setup.php и наблюдаем создание таблиц в базе и приглашение ввести данные супер администратора:

Everything seems fine... attempting to create/update database structure
Updating database:
old version: 0; target version: 397
updating to version 1 (all databases)...upgrade_1   done
updating to version 1 (MySQL)...   done
updating to version 2 (MySQL)...   done
updating to version 3 (MySQL)...   done
updating to version 4 (MySQL)...   done
updating to version 5 (MySQL)...   done
updating to version 79 (MySQL)...   done
updating to version 81 (MySQL)...   done
updating to version 90 (all databases)...   done
updating to version 169 (MySQL)...   done
updating to version 318 (MySQL)...   done
updating to version 344 (MySQL)...   done
updating to version 373 (MySQL)...   done 

Admin:
Password:
Password (again):

Если всё прошло удачно радуемся полученным достижениям:

Postfix Admin Setup Checker
Running software: 
•	PHP version 5.2.6
Checking for dependencies: 
•	Magic Quotes: Disabled - OK
•	Depends on: presence config.inc.php - OK
•	Checking $CONF['configured'] - OK 
•	Depends on: MySQL 3.23, 4.0 - OK
•	Testing database connection - OK - mysql://eximuser:xxxxx@localhost/eximbase
•	Depends on: session - OK
•	Depends on: pcre - OK
•	Depends on: multibyte string - OK
•	Depends on: IMAP functions - OK
Everything seems fine... attempting to create/update database structure
Database is up to date
Admin has been added!
(superadmin@megadomain.ru)
You can now log in to Postfix Admin.
Make sure you delete this setup.php file!
Also check the config.inc.php file for any settings that you might need to change!

Выполняем требование удалить setup.php и снова идём на: http://ИМЯ_ИЛИ_IP/postfixadmin/

Тут вводим данные нашего супер админа и наслаждаемся нашим интерфейсом.



Проблемы в версии postfixadmin-2.2.1.1:

1. Проблема с вкладкой backup:

DEBUG INFORMATION:
Invalid query: Table 'eximbase.alias_domain' doesn't exist 
Please check the documentation and website for more information. 

2. Проблема с синхронизацией.

SMTP protocol synchronization error (input sent without waiting for greeting): rejected connection
from H=[127.0.0.1]

3. Проблема с автоматическим созданием папок.
Читать про всё тут: http://forum.lissyara.su/viewtopic.php?f=20&t=10123&start=25


Проблема №2 средствами exim решается так:

acl_smtp_connect = acl_check_connect
...

acl_check_connect:

warn hosts = 127.0.0.1
     control = no_enforce_sync

accept

... а средствами postfix:

 mynetworks = xx.xx.xx.xx/16, ...., 127.0.0.0/8
 
 ...
 ...
 ...
 
 smtpd_recipient_restrictions =
   permit_mynetworks,
   ...
   reject_unauth_pipelining,
   ...
   ...