Установка и настройка Postfixadmin

Ранее я уже описывал настройку почтовой системы, использующей Postfixadmin в качестве веб-интерфейса для её администрирования: Настройка почтовой системы на основе Postfix, Dovecot, PostfixAdmin.

Тогда я просто скомпилировал свою заметку из различных рецептов, которые мне больше всего понравились. Сейчас я вижу в той заметке достаточное количество недостатков. Например, в той заметке настраивается SASL через плагин auxprop из Cyrrus, хотя Postfix может использовать SASL, встроенный в Dovecot. Для фильтрации спама по серым спискам был выбран Postgrey, просто потому что он был тогда на слуху. Фильтрация вирусов осуществляется с использованием SMTP-прокси, хотя есть более подходящий для этого способ - milter.

Начнём, как и в прошлый раз, с настройки Postfixadmin. Кроме Postfixadmin имеется множество других различных веб-интерфейсов для управления почтовой системой (одну я даже написал для себя сам), однако Postfixadmin наиболее популярен. Настройка начнётся с него, потому что остальные системы зависят от него, а он сам от них относительно независим.

1. Немного о терминологии

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

2. Установка сервера MySQL

Установим сервер MySQL:

# apt-get install mysql-server

Подробнее останавливаться на настройке сервера MySQL не стану.

3. Установка Postfixadmin

Ставим пакет:

# apt-get install postfixadmin

В процессе установки запустится мастер настройки базы данных:

Настройки подключения Postfixadmin к базе данных находятся в файле /etc/postfixadmin/dbconfig.inc.php, где их можно впоследствии изменить.

4. Настройка веб-сервера

Традиционно, я воспользуюсь Lighttpd. Установим веб-сервер, Postfixadmin и PHP для его работы:

# apt-get install lighttpd php5-cgi

Скопируем имеющийся в пакете файл /etc/postfixadmin/lighttpd.conf в каталог /etc/lighttpd/conf-available/ под именем 30-postfixadmin.conf:

# cp /etc/postfixadmin/lighttpd.conf /etc/lighttpd/conf-available/30-postfixadmin.conf

Я вписал в файл /etc/lighttpd/conf-available/30-postfixadmin.conf следующие настройки:

$HTTP["host"] == "mail.domain.tld" {
  alias.url += (
    "/admin" => "/usr/share/postfixadmin",
  )
}

Теперь включим модули Lighttpd, необходимые для работы Postfixadmin:

# lighty-enable-mod fastcgi fastcgi-php postfixadmin
# /etc/init.d/lighttpd force-reload

5. Веб-настройка Postfixadmin

Когда веб-сервер настроен для обслуживания веб-интерфейса Postfixadmin, можно зайти на страницу setup.php и сгенерировать хэш пароля для дальнейшей настройки:

Копируем хэш:

Вставляем хэш в файл /etc/postfixadmin/config.inc.php. Затем вводим пароль и данные учётной записи суперадминистратора, которая будет создана:

После того, как появится сообщение о добавлении администратора, можно войти под этой учётной записью в интерфейс администрирования:

6. Тонкая настройка Postfixadmin

Настройки Postfixadmin находятся в файле /etc/postfixadmin/config.inc.php. Ниже показаны полезные опции из этого файла с моими комментариями. Жирным шрифтом показаны опции, на которые следует обратить особое внимание. fetchmail и отсылку уведомлений при отсутствии адресата (vactions) я не настраивал, поэтому эти опции подробно не рассмотрены.

$CONF['configured'] = true;                    // Разрешает работу Postfixadmin
$CONF['setup_password'] = 'changeme';          // Хэш пароля, используемого при настройке Postfixadmin через веб
                                               // После настройки можно очистить
$CONF['postfix_admin_url'] = '/admin';         // База для URL интерфейса
$CONF['default_language'] = 'ru';              // Язык интерфейса
$CONF['database_prefix'] = '';                 // Префикс таблиц в базе данных
$CONF['database_tables'] = array (             // Здесь можно выполнить тонкую настройку имён таблиц
    'admin' => 'admin',
    'alias' => 'alias',
    'alias_domain' => 'alias_domain',
    'config' => 'config',
    'domain' => 'domain',
    'domain_admins' => 'domain_admins',
    'fetchmail' => 'fetchmail',
    'log' => 'log',
    'mailbox' => 'mailbox',
    'vacation' => 'vacation',
    'vacation_notification' => 'vacation_notification',
    'quota' => 'quota',
    'quota2' => 'quota2',
);

$CONF['admin_email'] = 'postmaster@domain.tld';   // Почтовый ящик,
$CONF['smtp_server'] = 'mail.domain.tld';         // Полностью определённое доменное имя SMTP-сервера и
$CONF['smtp_port'] = '25';                        // порт SMTP-сервера для отправки уведомлений о вновь созданных ящиках

$CONF['encrypt'] = 'md5crypt';                    // Алгоритм хэширования, который будет использоваться для сохранения паролей
                                                  // в базе данных
                                                  // При указании cleartext пароль будет храниться в открытом виде
$CONF['authlib_default_flavor'] = 'md5raw';       // При указании authlib здесь указывается алгоритм хэширования из authlib
$CONF['dovecotpw'] = "/usr/sbin/dovecotpw"        // При указании dovecot:* здесь указывается путь к утилите dovecotpw

$CONF['min_password_length'] = 9;                 // Минимальное количество символов в пароле - 9
$CONF['generate_password'] = 'YES';               // При заведении ящика сгенерировать пароль и показать его
$CONF['show_password'] = 'NO';                    // Не показывать пароль после создания ящика

$CONF['page_size'] = '30';                        // Количество строк в таблице, отображаемой в веб-интерфейсе
$CONF['default_aliases'] = array (                // Создавать для каждого нового домена указанные псевдонимы для пересылки писем
    'abuse' => 'admin@domain.tld',
    'hostmaster' => 'admin@domain.tld',
    'postmaster' => 'admin@domain.tld',
    'webmaster' => 'admin@domain.tld',
    'info' => 'admin@domain.tld'
);
$CONF['domain_path'] = 'YES';                     // Указывает, что каталог ящика хранится в каталоге домена
                                                  // YES - /var/mail/virtual/domain/user@domain, NO - /var/main/virtual/user@domain
$CONF['domain_in_mailbox'] = 'NO';                // Указывает, что в каталоге с именем ящика не должно быть домена
                                                  // YES - /var/mail/virtual/domain/user@domain, NO - /var/mail/virtual/domain/user
$CONF['maildir_name_hook'] = 'NO';                // Здесь можно задать собственную функцию для генерирования пути к ящику

$CONF['aliases'] = '100';                         // Максимальное количество псевдонимов по умолчанию в одном домене
$CONF['mailboxes'] = '100';                       // максимальное количество почтовых ящиков по умолчанию в одном домене
$CONF['maxquota'] = '100';                        // Максимальный объём ящика по умолчанию (см. ниже множитель квоты)
$CONF['quota'] = 'YES';                           // Использовать квоты почтовых ящиков
$CONF['quota_multiplier'] = '1048576';            // Множитель для размера квоты почтовых ящиков,
                                                  // реальный объём квоты по умолчанию составит maxquota * quota_multiplier = 100 Мегабайт

$CONF['transport'] = 'YES';                       // Использовать таблицу транспортов
$CONF['transport_options'] = array (
    'dovecot',                                    // Для виртуальных почтовых ящиков
    'relay'                                       // Транспорт для доменов, для которых почтовый сервер является резервным
);
$CONF['transport_default'] = 'dovecot';           // Транспорт по умолчанию

$CONF['vacation'] = 'NO';                         // Не использовать механизм уведомлений (для использования нужно установить плагин)
$CONF['vacation_domain'] = 'autoreply.domain.tld';// Домен для отсылки уведомлений, прописывать в DNS не обязательно
$CONF['vacation_control'] ='YES';                 // Разрешить пользователям настраивать уведомления для собственных почтовых ящиков
$CONF['vacation_control_admin'] = 'YES';          // Разрешить администраторам доменов настраивать уведомления почтовых ящиков

$CONF['alias_control'] = 'YES';                   // Разрешить суперадминам редактировать пересылки
$CONF['alias_control_admin'] = 'YES';             // Разрешить администраторам доменов редактировать пересылки
$CONF['special_alias_control'] = 'NO';            // Разрешить администраторам доменов редактировать специальные пересылки
                                                  // (см. выше default_aliases)
$CONF['alias_goto_limit'] = '0';                  // Максимальное количество пересылок, отображаемых в одной строке (0 - без лимита)
$CONF['alias_domain'] = 'NO';                     // Не "зеркалировать" пересылки и ящики в другой домен
$CONF['backup'] = 'YES';                          // Показывать вкладку резервного копирования
$CONF['sendmail'] = 'YES';                        // Показывать вкладку отправки почты
$CONF['logging'] = 'YES';                         // Вести журнал редактирований
$CONF['fetchmail'] = 'NO';                        // Не показывать вкладку получения почты с других серверов
$CONF['fetchmail_extra_options'] = 'NO';          // Не разрешить пользователям задавать дополнительные опции fetchmail
                                                  // (Разрешать опасно, т.к. пользователь сможет выполнить произвольную команду!)
$CONF['show_header_text'] = 'NO';                 // Не показывать текст заголовка
$CONF['header_text'] = ':: Postfix Admin ::';     // Текст заголовка
$CONF['user_footer_link'] = "http://domain.tld";  // Ссылка, отображаемая в главном меню при входе под обычным пользователем
$CONF['show_footer_text'] = 'YES';                // Показывать "подвал" на каждой странице
$CONF['footer_text'] = 'Вернуться на domain.tld'; // Текст "подвала"
$CONF['footer_link'] = 'http://domain.tld';       // Ссылка "подвала"
$CONF['welcome_text'] = <<<EOM                    // Текст письма, отправляемого новым пользователям
  Добрый день!

  Поздравляем вас с получением новой учётной записи!
EOM;
$CONF['emailcheck_resolve_domain'] = 'YES';       // При создании ящика или пересылки проверять наличие домена 
$CONF['used_quotas'] = 'YES';                     // Показывать использование квот из словаря Dovecot в базе данных
$CONF['new_quota_table'] = 'YES';                 // Использовать таблицу quota2 для отображения информации об использовании квот
$CONF['theme_logo'] = 'images/logo-default.png';  // Путь к своему логотипу
$CONF['theme_css'] = 'css/default.css';           // Путь к собственному файлу стилей

На этом настройку Postfixadmin можно считать оконченой. Продолжение: Установка и настройка Dovecot

Написать автору