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 в разделе Настройки
появится пункт Фильтры — можно приступать к настройке личных фильтров пользователя.
Добавить комментарий