Debian. Установка и настройка связки Postfix Devecot PostfixAdmin RoundCube OpenDKIM.

Debian. Установка и настройка связки Postfix Devecot PostfixAdmin RoundCube OpenDKIM.

В данной статье рассмотрю установку популярной связки Postfix Devecot PostfixAdmin RoundCube OpenDKIM на платформе Debian 10-12.

Подготовительные действия.

Первоначально в наличии чистый свежеустановленный Debian 10-12.

Предполагается, что настроены две ДНС-записи:

mail.mydomen.ru  A serverIP

mydomen.ru   MX 10 mail.mydomen.ru

 

Производим обновление системы:
# apt-get update && apt-get upgrade

Ставим вспомогательные пакеты:
# apt-get install wget mc htop aptitude git net-tools

Устанавливаем PHP, одновременно ставится Apache:

# apt-get install php php-zip php-gd php-mysql php php-intl php-xml php-imap php-mbstring php-sqlite3 php-ldap php-imagick php-curl

Не откладывая в долгий ящик устанавливаем сертификат от Lets Encrypt и настраиваем работу домена по протоколу https://

Ставим certbot:

# apt-get install certbot python-certbot-apache

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

# certbot certonly --apache --dry-run -d mail.mydomen.ru

На запрос водим адрес эл.почты ( ни на что не влияет, письма с подтверждением не приходят) , на все вопросы вводим Agree (A).

Если в конце работы скрипта получаем подобное сообщение, значит тест прошёл успешно:

IMPORTANT NOTES:
— The dry run was successful.
— Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.

Получаем и устанавливаем сертификат, соглашаемся на включение редиректа с HTTP на HTTPS:

# certbot --apache -d mail.mydomen.ru

После проделанной работы сайт будет открываться по адресу https://mail.mydomen.ru

 

Устанавливаем MariaDB:

# aptitude install mariadb-server mariadb-client mariadb-common

Включаем автозагрузку сервисов:

# systemctl enable apache2

# systemctl enable mariadb

 

Установка PostfixAdmin.

 

Создаём базу данных для PostfixAdmin, в таблицах этой базы будет хранится информация о доменах и почтовых ящиках:

# mysql
mysql> CREATE DATABASE postfix CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'ChangePasswd';
mysql> GRANT ALL PRIVILEGES ON postfix.* TO 'postfix'@'localhost';

 

Скачиваем и устанавливаем  PostfixAdmin:

# cd /usr/local/src

# wget https://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.2/postfixadmin-3.2.4.tar.gz

Или клонируем с git:
git clone https://github.com/postfixadmin/postfixadmin.git
git checkout master
bash ./install.sh
chown www-data templates_c && chmod 750 templates_c

# cp -r ./postfixadmin-3.2.4 /usr/share/postfixadmin

# ln -s /usr/share/postfixadmin/public /var/www/html/postfixadmin

# mkdir /usr/share/postfixadmin/templates_c

# chown www-data.www-data /usr/share/postfixadmin/templates_c

Создаём файл конфигурации:

# touch /usr/share/postfixadmin/config.local.php

Открываем данный файл в любом редакторе и вносим в него строки

<?php
$CONF['database_type'] = 'mysqli';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'ChangePasswd';
$CONF['database_name'] = 'postfix';

$CONF['configured'] = true;
?>

и открываем ссылку https://mail.mydomen.ru/postfixadmin/setup.php

 

При ошибке подключения к БД прописать сокет в переменную $CONF[‘database_socket’]: $CONF['database_socket']= '/var/run/mysql/mysql.sock';
Реальное значение сокета берётся из конфига MySQL.

Если на предыдущих этапах не было допущено ошибок — начнётся установка postfizadmin:

Внизу страницы появится запрос на ввод пароля установки:

После ввода и подтверждения пароля будет сгенерирован хеш, который требуется добавить в файл /usr/share/postfixadmin/config.local.php

Далее вводим пароль установки, придумываем и вводим логин администратора PostfixAdmin и его пароль:

После создания Администратора панель PostfixAdmin доступна по ссылке: https://mail.mydomen.ru/postfixadmin/login.php

Можно создавать почтовые домены и ящики.

 

Установка OpenDKIM.

Устанавливаю OpenDKIM:

# apt-get install opendkim opendkim-tools

# mkdir /etc/opendkim
# mkdir /etc/opendkim/mydomen.ru

В каталоге /etc/opendkim размещаем три файла KeyTable, SigningTable,TrustedHosts.

Содержимое файла KeyTable:
relay._domainkey.mydomen.ru mydomen.ru:relay:/etc/opendkim/mydomen.ru/relay.private

Содержимое файла SigningTable:
*@mydomen.ru relay._domainkey.mydomen.ru

Содержимое файла TrustedHosts:
127.0.0.1
localhost
mydomen.ru

Содержимое /etc/opendkim.conf :
Syslog yes
UMask 007
Selector default
Canonicalization relaxed/simple
Mode sv
Socket inet:12301@127.0.0.1
PidFile /var/run/opendkim/opendkim.pid
OversignHeaders From
TrustAnchorFile /usr/share/dns/root.key
UserID opendkim
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable

Создаю сертификат для домена mydomen.ru:
# opendkim-genkey -D /etc/opendkim/mydomen.ru/ --domain mydomen.ru --selector relay

Корректирую права:
# chown opendkim:opendkim -R /etc/opendkim

# systemctl enable opendkim
# systemctl restart opendkim

Установка Postfix.

Устанавливаем postfix :

# apt-get install postfix postfix-mysql

При запросе установщика можно выбрать вариант без конфигурации.

Создаём каталог для хранения файлов настроек подключения postfix к MySQL:

# mkdir /etc/postfix/mysql

В каталоге создаём файлы, которые доступны по ссылкам:

relay_domains.cf
virtual_alias_domain_maps.cf
virtual_alias_maps.cf
virtual_mailbox_domains.cf
virtual_mailbox_maps.cf

Готовые файлы main.cf и master.cf доступны по ссылкам.

Данные файлы копируем в /etc/postfix

Моменты, на которые нужно обратить внимание:

mysql, ssl, физическое хранение почты, DKIM

Создаём пользователя vmail , в домашнем каталоге этого пользователя будут физически хранится почтовые ящики:

# adduser --disabled-login vmail

Проверяем UID пользователя в системе:

# id vmail

И указываем данное значение для параметров в main.cf :

virtual_minimum_uid = 1000
virtual_uid_maps = static:1000
virtual_gid_maps = static:1000

Включение логирования в postfix.

В master.cf добавляю строку:
postlog unix-dgram n - n - 1 postlogd
В main.cf добавляю строку:
maillog_file = /var/log/postfix.log

Установка Dovecot.

# apt-get install dovecot-common dovecot-core dovecot-imapd dovecot-lmtpd dovecot-managesieved dovecot-mysql dovecot-sieve

В /etc/dovecot/dovecot.conf добавить:

service stats {
unix_listener stats-reader {
user = vmail
group = vmail
mode = 0660
}

unix_listener stats-writer {
user = vmail
group = vmail
mode = 0660
}
}

 

Установка RoundCube

При возникновении проблем с отправкой почты через RoudCube с возникновением ошибки SMTP Error: Authentication failure: SMTP server does not support authentication, нужно внимательно изучить config.inc.php:
$config['smtp_port'] = 25;
$config['smtp_user'] = '';
$config['smtp_pass'] = '';

 

Для ускорения работы можно попробовать :

$config['imap_auth_type'] = plain
$config['imap_cache'] = db;
$config['messages_cache'] = db;

Точно помогает для ускорения:
В конфиге Dovecot auth-system.conf.ext в разделе passdb заменить driver = pam на driver = passwd

Фильтрация сообщений.

Для фильтрации использую плагин sieve для dovecot.

Для этого в dovecot.conf подключаются нужные протоколы:

# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol

Содержимое:

# ls /usr/share/dovecot/protocols.d/
imapd.protocol lmtpd.protocol managesieved.protocol

В 15-lda.conf  включаю поддержку протокола sieve:

protocol lda {
mail_plugins = $mail_plugins sieve
auth_socket_path = /var/run/dovecot/auth-master
deliver_log_format = mail from %f: msgid=%m %$
log_path = /var/log/dovecot/lda-errors.log
info_log_path = /var/log/dovecot/lda-deliver.log
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
postmaster_address = postmaster@sysad.su
}

 

В 20-lmtp.conf включаю поддержку протокола sieve:

protocol lmtp {
info_log_path = /var/log/dovecot/lmtp.log
mail_plugins = $mail_plugins quota sieve
postmaster_address = postmaster@sysad.su
lmtp_save_to_detail_mailbox = yes
recipient_delimiter = +
}

 

Для последовательности обработки можно откорректировать 90-sieve.conf, в частности добавить скрипты before и after:

sieve_before = /var/lib/dovecot/sieve.d/

 

Для перенаправления писем, помеченных spamassassinom создаю файл /var/lib/dovecot/sieve.d/spam.sieve с содержимым. Остальные правила не выполняются:

require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
fileinto "Junk";
stop;
}

Компилирую:
# sievec ./spam.sieve

После этого помеченные письма будут перенаправляться в папку Junk (Спам).

Другой пример:

# rule:[from Yandex]
if header :contains "X-Yandex-Fwd" "1"
{
fileinto "INBOX/nicko2003";
}

В данном случае письма с Yandex Mail будут складываться в подпапку nicko2003 во Входящих.

 

Фильтрация сообщений в RoundCube.

 

В 15-lda.conf  включаю поддержку протокола sieve:

protocol lda {
mail_plugins = $mail_plugins sieve
auth_socket_path = /var/run/dovecot/auth-master
deliver_log_format = mail from %f: msgid=%m %$
log_path = /var/log/dovecot/lda-errors.log
info_log_path = /var/log/dovecot/lda-deliver.log
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
postmaster_address = postmaster@sysad.su
}

В 20-managesieve.conf включаю поддержку протокола sieve:

protocols = $protocols sieve

service managesieve-login {
inet_listener sieve {
port = 4190
}
...
}

Перезагружаю dovecot:
systemctl restart dovecot

В RoundCube в config.inc.php включается плагин managesieve:

$config['managesieve_port'] = 4190;
$config['managesieve_host'] = 'localhost';
$config['managesieve_mbox_encoding'] = 'UTF-8';

// List of active plugins (in plugins/ directory)
$config[‘plugins’] = [
‘archive’,
‘zipdownload’,
‘managesieve’,
];

После этого в веб-интерфейса RoundCube в разделе Настройки появится пункт Фильтры — можно приступать к настройке личных фильтров пользователя.

Добавить комментарий