Меню Рубрики

Установка postfix roundcube debian

Tefnet / mail-setup.sh forked from trungpv93/mail-setup.sh

#! /usr/bin/env bash
ESC_SEQ= » \x1b[ «
COL_RESET= $ESC_SEQ » 39;49;00m «
COL_RED= $ESC_SEQ » 31;01m «
COL_GREEN= $ESC_SEQ » 32;01m «
COL_YELLOW= $ESC_SEQ » 33;01m «
DOMAIN= » xxx.vn «
PASS_DB_ROUNDCUBE= » xxx «
if [ » $UID » -ne 0 ]
then echo » Please run as root «
exit
fi
function error_check <
if [ » $? » = » 0 » ] ; then
echo -e » $COL_GREEN OK. $COL_RESET «
else
echo -e » $COL_RED An error has occured. $COL_RESET «
read -p » Press enter or space to ignore it. Press any other key to abort. » -n 1 key
if [[ $key != » » ]] ; then
exit
fi
fi
>
echo » [======= Updating system =======] «
apt-get update
apt-get upgrade -y
echo » [======= Updating system => $( error_check ) =======] «
echo » [======= Install Postfix =======] «
debconf-set-selections » postfix postfix/mailname string $DOMAIN «
debconf-set-selections » postfix postfix/main_mailer_type string ‘Internet Site’ «
apt-get install postfix -y
# #Configure postfix main.cf config
postconf -e ‘ inet_protocols = ipv4 ‘
postconf -e ‘ home_mailbox = Maildir/ ‘
service postfix restart
echo » [======= Install Postfix => $( error_check ) =======] «
echo » [======= Install Dovecot =======] «
apt-get install dovecot-imapd dovecot-pop3d -y
# uncomment !include conf.d/*.conf
sed -i ‘ /\!include conf\.d\/\*\.conf/s/^#// ‘ /etc/dovecot/dovecot.conf
# add protocols = imap pop3 > /etc/dovecot/dovecot.conf
checkProtocols= ` grep » protocols = imap pop3 » /etc/dovecot/dovecot.conf `
if [ -z » $checkProtocols » ] ; then
echo » protocols = imap pop3 » >> /etc/dovecot/dovecot.conf
fi
# add listen = * > /etc/dovecot/dovecot.conf
echo » listen = * » >> /etc/dovecot/dovecot.conf
# 10-auth.conf
sed -i ‘ /\disable_plaintext_auth =.*/s/^#//g ‘ /etc/dovecot/conf.d/10-auth.conf
sed -i ‘ /^auth_mechanisms =.*/s/^/#/g ‘ /etc/dovecot/conf.d/10-auth.conf
echo » auth_mechanisms = plain login » >> /etc/dovecot/conf.d/10-auth.conf
# 10-mail.conf
sed -i ‘ /^mail_location =.*/s/^/#/g ‘ /etc/dovecot/conf.d/10-mail.conf # comment default mail_location
echo » mail_location = maildir:/home/%u/Maildir » >> /etc/dovecot/conf.d/10-mail.conf
# 10-master.conf
if [[ ! -f /etc/dovecot/conf.d/10-master.conf.orig ]] ; then
mv /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
fi
dovecotmaster= » service imap-login <\n
inet_listener imap <\n
port = 143\n
>\n
inet_listener imaps <\n
>\n
>\n
\n
service pop3-login <\n
inet_listener pop3 <\n
port = 110\n
>\n
inet_listener pop3s <\n
>\n
>\n
\n
service lmtp <\n
unix_listener lmtp <\n
>\n
>\n
\n
service imap <\n
>\n
\n
service pop3 <\n
>\n
\n
service auth <\n
unix_listener auth-userdb <\n
mode = 0600\n
user = postfix\n
group = postfix\n
>\n
>\n
\n
service auth-worker <\n
>\n
\n
service dict <\n
unix_listener dict <\n
>\n
>\n
«
echo -e $dovecotmaster > /etc/dovecot/conf.d/10-master.conf
# /etc/dovecot/conf.d/20-imap.conf
if [[ ! -f /etc/dovecot/conf.d/20-imap.conf.orig ]] ; then
mv /etc/dovecot/conf.d/20-imap.conf /etc/dovecot/conf.d/20-imap.conf.orig
fi
dovecotimap= «
protocol imap <\n
mail_plugins = $mail_plugins autocreate\n
>\n
\n
plugin < \n
autocreate = Trash \n
autocreate2 = Junk \n
autocreate3 = Drafts \n
autocreate4 = Sent \n
autosubscribe = Trash \n
autosubscribe2 = Junk \n
autosubscribe3 = Drafts \n
autosubscribe4 = Sent \n
>\n
«
echo -e $dovecotimap > /etc/dovecot/conf.d/20-imap.conf
service dovecot restart
service postfix restart
echo » [======= Install Dovecot => $( error_check ) =======] «
echo » [======= Install RoundCube =======] «
echo » [======= Install LAMP Server =======] «
apt-get install lamp-server^ -y
echo » [======= Install LAMP Server => $( error_check ) =======] «
# Create Database for Round Cube user/pass = mailadmin
echo » [======= Input Password Mysql =======] «
echo » create database roundcubedb; create user ‘mailadmin’ >$PASS_DB_ROUNDCUBE ‘; grant all privileges on roundcubedb.* to ‘mailadmin’; FLUSH PRIVILEGES; » | mysql -u root -p
cd /tmp
wget https://github.com/roundcube/roundcubemail/releases/download/1.2.3/roundcubemail-1.2.3-complete.tar.gz
tar -xzvf roundcubemail-1.2.3-complete.tar.gz -C /var/www/html
mv /var/www/html/roundcubemail-1.2.3/ /var/www/html/webmail
chown -R www-data:www-data /var/www/html/webmail/ *
chown -R www-data:www-data /var/www/html/webmail/
echo » [======= Input Password Mysql =======] «
mysql -u root -p roundcubedb /var/www/html/webmail/SQL/mysql.initial.sql
# set host
echo » 127.0.0.1 $DOMAIN » >> /etc/hosts
apt-get install -y php-intl php-ldap php-json php-xml php-mbstring
service apache2 restart
echo » Open http://localhost/webmail/installer «
echo » Database: roundcubedb «
echo » User Name: mailadmin «
echo » Password: $PASS_DB_ROUNDCUBE «
echo » Documents: «
echo » https://www.youtube.com/watch?v=uQ2tQuiJmxs «
echo » http://linox >»
echo » https://easyengine.io/tutorials/linux/ubuntu-postfix-gmail-smtp/ «
echo » [======= Install RoundCube => $( error_check ) =======] «

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

источник

Полный пример установки всех пакетов и настройки конфигурационных файлов

Пример настройки всех основных конфигов всех элементов рассматриваемой в этой серии заметок почтовой системы. Список всех пакетов для установки в Debian. Этот пример — всего лишь частный случай, для определенных конкретных задач.

Речь идет о такой конфигурации:
Postfix + Dovecot 2 + MySQL + PostfixAdmin + Postgrey + Postscreen + ClamAV + DKIM + Sieve + RoundCube (+плагины к RoundCube, включая парочку, написанных тут же, «с лету», своих экспериментальных). OC — Debian.

ВАЖНО! Эта страница является частью списка заметок о настройке почтовой системы.
Родительская страница — обязательна к просмотру: Установка и настройка почтового сервера

Подробнее о конфигурации к которой относятся примеры в этой статье — см. ссылку выше.
Тем же — коротко об основных терминах (MTA, MDA, MUA и т.п.).

Эта заметка имеет характер исследования. Пожалуйста не используйте слепое копирование примеров. Автор не гарантирует, что применение изложенной здесь информации не приведет к потере данных.

Содержание

Описание конфигурации

Здесь рассматривается случай, когда всё находится на одном сервере.

RoundCube будет настроен так, что админ будет видеть ящики остальных пользователей в списке папок.

PostfixAdmin будет использовать два порта: 25 — для коннекта с другими MTA, 587 — для подключения пользователей при отправке почты.

Dovecot будет использовать только IMAP для MUA. Протоколы: LMTP, IMAP, Sieve.
Dovecot-LDA будет использоваться только для рефильтеринга уже полученной ранее почты. Формат почтовых ящиков — Maildir.

  • — имя машины.
  • — домен в примере.
  • — почтовый субдомен.
  • — левая часть логина почтового ящика админа и мастер-пользователя postmaster @ domain.tld .
  • — левая часть логина почтового ящика для авто-BCC неизвестных пользователей родных доменов bccsnd @ domain.tld .
  • , — левая часть логинов почтовых ящиков пользователей user1 @ domain.tld и user2 @ domain.tld .
  • — IP адрес домена, и он же IP адрес почтового субдомена.
  • , — GUID, группа пользователей виртуальных ящиков.
  • , — UID, системный пользователь виртуальных ящиков.
  • — базовый каталог почты Maildir. Формат: .
  • — каталог глобальных ACL.
  • — каталог, в котором будет создан вложенный подкаталог «sieve» с глобальными (каталог «global») и персональными (каталог «personal») Sieve-скриптами.
  • — каталог виртуальных папок плагина «virtual» Dovecot.
  • — порт OpenDKIM.
  • — порт ClamAV-Milter.
  • — порт Postgrey.
  • — порт ManageSieve.
  • — файл SQL-запроса виртуального почтового ящика.
  • — файл SQL-запроса домена.
  • — файл SQL-запроса почтового ящика, для которого запрашиваемый является алиасом.
  • — файл SQL-запроса ящика домена, для которого домен запрашиваемого ящика является алиасом.
  • — файл SQL-запроса для авто-BCC в ящики зарегистрированных отправителей.
  • — файл SQL-запроса ящика для авто-BCC не зарегистрированных отправителей родных доменов.
  • — Postfix SSL ключ.
  • — Postfix SSL сертификат.
  • — Dovecot SSL ключ.
  • — Dovecot SSL сертификат.
  • — Количество дней на которые действительны SSL-сертификаты.
  • — путь к папке с пост-скриптами PostfixAdmin.
  • — размер почтового ящика (в байтах).
  • — максимальный размер письма (в байтах).
  • — путь к корневой папке с web-файлами для https Apache2

— имя MySQL базы PostfixAdmin

— имя пользователя MySQL базы PostfixAdmin

— пароль пользователя MySQL базы PostfixAdmin

— имя пользователя MySQL базы Roundcube

— пароль пользователя MySQL базы Roundcube

USER PROCESS PID PROTO SOURCE ADDRESS FOREIGN ADDRESS STATE

opendkim opendkim . tcp4 127.0.0.1: 8891 *:* LISTEN

clamav clamav-milter . tcp4 127.0.0.1: 7357 *:* LISTEN

root /usr/sbin/postg . tcp4 127.0.0.1: 10023 *:* LISTEN

root dovecot . tcp4 127.0.0.1:143 *:* LISTEN

root dovecot . tcp4 127.0.0.1: 4190 *:* LISTEN

root master . tcp4 127.0.0.1:25 *:* LISTEN

root master . tcp4 ip1.ip2.ip3.ip4 :25 *:* LISTEN

root master . tcp4 127.0.0.1:587 *:* LISTEN

root master . tcp4 ip1.ip2.ip3.ip4 :587 *:* LISTEN

Настройка операционной системы (Debian)

Файлы конфигурации могут выглядеть примерно так:

127.0.0.1 localhost
ip1.ip2.ip3.ip4 mail.domain.tld
ip1.ip2.ip3.ip4 domain.tld
.

Возможно понадобится дополнительная настройка IPv6.

Рекомендую удалить в т.ч. строки с комментариями <информация нуждается в проверке> .

PTR настраивается скорее всего у провайдера, где находится сервер. Необходимо указать для IP своего сервера.

Проверка PTR должна выдавать примерно следующее:

# nslookup ip1.ip2.ip3.ip4
.
ip4.ip3.ip2.ip1.in-addr.arpa name = mail.domain.tld

Результат в левой части последней строки содержит IP наоборот.

Соответственно, и в DNS тоже, IP сервера должен быть сопоставлен указанному почтовому домену (он может быть там на том же IP, что и сайт).

DKIM и SPF

DKIM требует установки и настройки соответствующего пакета (см. ниже).
Policyd-SPF требует установки и настройки соответствующего пакета (см. ниже).

DKIM и SPF настраивается в DNS в виде TXT-записей.

SPF в DNS может выглядеть примерно так:

domain.tld . IN TXT «v=spf1 a mx ip4: ip1.ip2.ip3.ip4

ВАЖНО! После домена должны быть точка.

DKIM в DNS может выглядеть примерно так:

mail._domainkey IN TXT «v=DKIM1;k=rsa;p=_КЛЮЧ_СГЕНЕРИРОВАННЫЙ_СООТВЕТСТВУЮЩИМ_СОФТОМ_»

Определяем политику использования DKIM в домене — добавляем в DNS еще одну TXT-запись

_adsp._domainkey IN TXT «dkim=all»

Где:
unknown — отправка не подписанных сообщений разрешена (значение по умолчанию)
all — отправка не подписанных сообщений запрещена
discardable — все не подписанные сообщения должны быть заблокированы на стороне получателя

Итого: для DKIM 2 записи + 1 для SPF.

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

MySQL

Предполагается, что уже установлен — установка MySQL здесь не рассматривается.

В конфигурационном файле MySQL, в этом примере, указан не домен, а IP.

Важно, чтобы этот параметр совпадал с настройками в почтовых программах. Если здесь будет указано , а в других местах — , то это может вызвать проблемы. Рекомендую здесь указывать именно IP.

PostfixAdmin

Postfixadmin лучше установить до Postfix, чтобы потом сразу использовать правильные имена MySQL-таблиц Postfixadmin в конфигах Postfix.

Предполагается, что , и — уже установлены. Их установка здесь не рассматривается.

Нужно в MySQL создать базу и пользователя для PostfixAdmin.

В вопросах установки ставим пометку на Apache2, и на вопрос о создании базы отвечаем — нет.

PostfixAdmin установился сюда:

При установке PostfixAdmin создал ссылку на файл с описанием алиаса для Apache2 здесь:

Подправляем алиас (установим доступ только через SSL)

Необходимо будет внести логин и пароль в файл — это здесь не рассматривается.

Правим настройки для MySQL:

.
$dbuser=’ _POSTFIXADMIN_SQL_USER_‘;
$dbpass=’ _POSTFIXADMIN_SQL_PASSWORD_‘;
$basepath=»;
$dbname=’ _POSTFIXADMIN_SQL_BASE_‘;
$dbserver=’127.0.0.1′;
$dbport=’3306′;
$dbtype=’mysql’;
.

Заходим в установщик (через браузер) по адресу:
https:// domain.tld /postfixadmin/setup.php

Выполнив, то что предложит установщик, вписываем пароль на доступ к setup в файл

Создаем через setup суперадмина () и новый пароль для него (нужно будет вводить еще раз пароль к setup для доступа).

Там же (здесь указаны только ключевые строки файла конфигурации):

$CONF[‘admin_email’] = ‘ postmaster @ domain.tld ‘;

//$CONF[‘dovecotpw’] = «/usr/bin/doveadm pw»;

//$CONF[‘default_aliases’] = array ( // ‘ postmaster @ domain.tld ‘

‘virtual’, // for virtual accounts

‘local’, // for system accounts

$CONF[‘footer_text’] = ‘Return to domain.tld ‘;

$CONF[‘footer_link’] = ‘http:// domain.tld ‘

// This message is send to every newly created mailbox.

// Change the text between EOM.

$CONF[‘welcome_text’] = domain «,»localhost»);

$CONF[‘create_mailbox_subdirs’]=array(‘Drafts’, ‘Sent’, ‘Junk’, ‘Trash’, ‘Archive’);

$CONF[‘mailbox_postcreation_script’]=’ /etc/postfixadmin/scripts/ addmail.sh’;

$CONF[‘mailbox_postedit_script’]=’ /etc/postfixadmin/scripts/ editmail.sh’;

$CONF[‘mailbox_postdeletion_script’]=’ /etc/postfixadmin/scripts/ delmail.sh’;

Создаем папку (владелец ). В ней будут сохраняться логи.

Вкатаем в нее сортировку по дате для файлов

Vacation

Автоответчик («я в отпуске») Postfix на мой взгляд не очень удачно реализован (требует выделения домена) — сложен в настройке, и требует установки дополнительных Perl-модулей. Намного удобнее использовать автоответчик на базе Sieve в Dovecot.

Хотя для некоторых специфических потребностей он может быть использован, т.к. имеет и определенные преимущества (ранний перехват писем).

Здесь его настройка пока не рассматривается.

Скрипты

Не все скрипты нужны, но на будущее будет легче быстро вносить изменения, если они уже будут готовы и настроены.
Первые два скрипта просто пишут логи. Последний — удаляет юзера из RoundCube и папку пользователя MailDir.

Создаем папку для скриптов (владелец «www-data»):

Создаем скрипт, автоматом выполняемый после добавления новой почты через web-интерфейс PostfixAdmin

printf «$daten \n CREATE mailbox: $1\n Domain: $2\n MailDir: $3\n Quota: $4 B\n\n» >> /var/www/html/ssl/ postfixadmin-log/addmailbox.log

# if [[ -d /home/vmail/ incron_mailuser_monitor/ ]]

# touch /home/vmail/ incron_mailuser_monitor/$@$

ВАЖНО! Закомментированные строки в конце — раскомментим позже, когда будем настраивать автоматический мониторинг через incron папки «Отправленные» для каждого ящика (см. ниже).

Создаем скрипт, автоматом выполняемый после редактирования ящика через web-интерфейс PostfixAdmin

printf «$daten \n EDIT mailbox: $1\n Domain: $2\n MailDir: $3\n Quota: $4 B\n\n» >> /var/www/html/ssl/ postfixadmin-log/editmailbox.log

Создаем скрипт после удаления ящика через web-интерфейс PostfixAdmin (удаляет из RoundCube и папки* в папке почты домена)
Почтовые папки удалит incron (т.к. владелец не «www-data», а » vmail «) !

RES=`mysql —host=$host —port=3306 —user=$user —password=$pass —database=$db —execute=»$sql»`

printf «$daten \n DELETE mailbox: $1\n Domain: $2\n MailDir: $3\n Quota: $4 B\n» >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

printf » >>> RoundCube SQL-query START \n» >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

printf » ! FOUND RECORD: USER_ >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

printf » SQL: $sql \n» >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

sql=»DELETE FROM cache WHERE user_ >

RESD=`mysql —host=$host —port=3306 —user=$user —password=$pass —database=$db —execute=»$sql»`

printf » SQL: $sql\n» >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

# Delete user from ContactGroupMembers:

sql=»DELETE FROM contactgroupmembers WHERE contactgroup_ >

RESD=`mysql —host=$host —port=3306 —user=$user —password=$pass —database=$db —execute=»$sql»`

printf » SQL: $sql\n» >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

# Delete user from ContactGroups:

sql=»DELETE FROM contactgroups WHERE user_ >

RESD=`mysql —host=$host —port=3306 —user=$user —password=$pass —database=$db —execute=»$sql»`

printf » SQL: $sql\n» >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

# Delete user from Contacts:

sql=»DELETE FROM contacts WHERE user_ >

RESD=`mysql —host=$host —port=3306 —user=$user —password=$pass —database=$db —execute=»$sql»`

printf » SQL: $sql\n» >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

# Delete user from Identities:

RESD=`mysql —host=$host —port=3306 —user=$user —password=$pass —database=$db —execute=»$sql»`

printf » SQL: $sql\n» >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

# Delete user from Cache Messages

sql=»DELETE FROM cache_messages WHERE user_ >

RESD=`mysql —host=$host —port=3306 —user=$user —password=$pass —database=$db —execute=»$sql»`

printf » SQL: $sql\n» >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

# Delete user from Cache Thread

sql=»DELETE FROM cache_thread WHERE user_ >

RESD=`mysql —host=$host —port=3306 —user=$user —password=$pass —database=$db —execute=»$sql»`

printf » SQL: $sql\n» >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

sql=»DELETE FROM users WHERE user_ >

RESD=`mysql —host=$host —port=3306 —user=$user —password=$pass —database=$db —execute=»$sql»`

printf » SQL: $sql\n» >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

printf » >>> RoundCube SQL-query END \n\n» >> /var/www/html/ssl/ postfixadmin-log/delmailbox.log

# if [[ -d /home/vmail/ incron_mailuser_monitor/ ]]

# rm /home/vmail/ incron_mailuser_monitor/$@$

ВАЖНО! Закомментированные строки в конце — раскомментим позже, когда будем настраивать автоматический мониторинг через incron папки «Отправленные» для каждого ящика (см. ниже).

ВАЖНО! Возможно придется в скриптах откорректировать имена таблиц Postfixadmin.

PostfixAdmin запускает эти скрипты примерно так:

Если пробовать скрипты из консоли — надо не забывать менять пользователя, в т.ч. у лог-фалов, т.к. будет «permission denied». Если что не так — смотреть Apache2.

Исправляем перекос в дизайне для таблицы списка ящиков:

Смотрим что вышло в браузере (требует пароль ранее созданного суперадмина): https:// domain.tld /postfixadmin/

ВАЖНО! Кодировка таблиц должна быть UTF-8 (иначе будет выдавать ошибку «temporary lookup failure»).

На этом пока прервемся и установим Dovecot и Postfix.

Установка Postfix и Dovecot

Заметка с описанием подробностей настройки Postfix.

Предполагается, что и — уже установлены. Их установка здесь не рассматривается.

Удаляем Sendmail, Heirloom Mailx (nail) и другие почтовые программы, если они есть.

Удаление Heirloom Mailx (nail) может выглядеть примерно так:

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

То теперь, после удаления, попытка отправить письмо из консоли через «mail» должна выдать ошибку:

Остальные программы удаляются аналогично.

ВАЖНО! Если ранее была почта, то имеет смысл сделать ее резервирование с предварительным экспортом в формат Maildir. Впрочем формат mbox можно будет позднее временно подключить в Dovecot и сделать копирование сообщений, поэтому для этого формата достаточно сделать только резервное копирование самой почты.

Далее установим сразу Dovecot и Postfix:

Предполагается, что и — уже установлены. Их установка здесь не рассматривается.

В процессе установки будут заданы вопросы — о них в следующем разделе.

Проверяем Postfix (в консоли):

Postfix — конфигурационные файлы

ВАЖНО! На вопросы установки Postfix нужно хоть что-нибудь ответить, иначе могут быть проблемы с файлами конфигурации.

Ответы на вопросы установки Postfix могут быть примерно такими:

  1. General type of mail configuration — Internet Site
  2. System mail name — mail.domain.tld
  3. Root and postmaster mail recipient — postmaster @ domain.tld
  4. Other destinations to accept mail for (blank for none) — оставляем пустым (все равно это перекрывается виртуальными обработчиками)
  5. Форсировать изменения? — Нет
  6. Local networks — 127.0.0.0/32
  7. Mailbox size limit — 1024000000 (1 гиг)
  8. Local address extension character — пустое поле
  9. Internet protocols to use — IPv4

Если что-то пойдет не так, можно повторить операцию командой (в консоли):

# groupadd -r -g 5000 vmail
# useradd -r -g vmail -u 5000 vmail -d /home/vmail -m

Сделаем копию основных конфигурационных файлов:

Создадим новые с таким содержимым

# Postfix master process configuration file. For details on the format

# of the file, see the master(5) manual page (command: «man 5 master»).

# service type private unpriv chroot wakeup maxproc command + args

smtp inet n — n — 1 postscreen

tlsproxy unix — — n — 0 tlsproxy

#dnsblog unix — — n — 0 dnsblog

# Remap 25 port to 587 port

submission inet n — — — — smtpd

-o smtpd_sender_login_maps=mysql: /etc/postfix/mysql_virtual_maps.cf

pickup fifo n — — 60 1 pickup

cleanup unix n — — — 0 cleanup

qmgr fifo n — n 300 1 qmgr

#qmgr fifo n — — 300 1 oqmgr

tlsmgr unix — — — 1000? 1 tlsmgr

rewrite unix — — — — — trivial-rewrite

flush unix n — — 1000? 0 flush

proxymap unix — — n — — proxymap

-o smtp_helo_timeout=5 -o smtp_connect_timeout=5

discard unix — — — — — discard

#virtual unix — n n — — virtual

# Interfaces to non-Postfix software. Be sure to examine the manual

# pages of the non-Postfix software to find out what options it wants.

# Many of the following services use the Postfix pipe(8) delivery

# agent. See the pipe(8) man page for information about $

# and other message envelope options.

# maildrop. See the Postfix MAILDROP_README file for details.

# Also specify in main.cf: maildrop_destination_recipient_limit=1

maildrop unix — n n — — pipe

flags=DRhu user= vmail argv=/usr/bin/maildrop -d $

# See the Postfix UUCP_README file for configuration details.

flags=Fqhu user=uucp argv=uux -r -n -z -a$sender — $nexthop!rmail ($recipient)

# Other external delivery methods.

flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)

flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient

scalemail-backend unix — n n — 2 pipe

flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store $ $ $

flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py

policyd-spf unix — n n — 0 spawn

user=nobody argv=/usr/bin/python /usr/bin/policyd-spf

#debug_peer_list = 127.0.0.1, domain.tld user@host.$mydomain (default=yes)

# + myorigin (add after ‘@’ for output)

# . Do not use $mydomain for mydestination .

#mydestination = $myhostname, localhost.$mydomain

mydestination = $myhostname, localhost, localhost.$mydomain

# If this parameter apply — «mynetworks_style» ignore

inet_interfaces = ip1.ip2.ip3.ip4 , 127.0.0.1

# Replace address «user@host» => «user@$myorigin » (default: yes)

# + relayhost (default — no relay host)

#always_bcc = bccsnd @ domain.tld

#sender_bcc_maps = mysql: /etc/postfix/mysql_bcc_mailbox_maps.cf

sender_bcc_maps = mysql: /etc/postfix/mysql_bcc_mailbox_maps.cf , mysql: /etc/postfix/mysql_bcc_domain_maps.cf

# parameter specifies the directory where UNIX-style mailboxes are kept.

# default # mailbox file is /var/spool/mail/user or /var/mail/user

# For a non virtual user setup ( as when Dovecot mail_location = maildir:

# address MAIL FROM for probe with «verify» (default=double-bounce@$myorigin)

# This uses non-persistent storage only.

# default = btree:$data_directory/verify_cache # ($data_directory = /var/lib/postfix)

# not needed if the Dovecot LDA or LMTP is used

# (these options are only relevant for the Postfix LDA: «virtual»):

# End symbol «/» — maildir format

#virtual_mailbox_domains = domain.tld , domain1.tld

# virtual_mailbox_domains = $mydomain, mysql: /etc/postfix/mysql_virtual_domains.cf

virtual_mailbox_domains = mysql: /etc/postfix/mysql_virtual_domains.cf

virtual_mailbox_maps = mysql: /etc/postfix/mysql_virtual_maps.cf

#virtual_alias_maps = mysql: /etc/postfix/mysql_virtual_alias_maps.cf

virtual_alias_maps = mysql: /etc/postfix/mysql_virtual_alias_domain_maps.cf ,mysql: /etc/postfix/mysql_virtual_alias_maps.cf

# Use «strict_rfc821_envelopes = no» to accept «RCPT TO: >».

# Postfix will ignore the «User Name» part and deliver to the address.

# Disable for: stops some methods used to harvest email addresses during the connection to the server.

# If a remote SMTP client is authenticated, the permit_sasl_authenticated access restriction can be used to permit relay (for dovecot?) access.

# . permit_sasl_authenticated — MOVE TO master.cf for submission (587 port for MUA)

# reject — for all others, which do not permit

# permit — for all others, which do not reject

# note! Postfix no check MX. need Policy

# check spam (blacklist servers)

# reject_rhsbl_client blackhole.securitysage.com, 10023 ,

#127.0.0.1: 10023 _time_limit = 180

# Need: install dkim-milter and sid-milter

#smtpd_milters = inet:localhost: 8891

#non_smtpd_milters = inet:localhost: 8891

smtpd_milters = inet:127.0.0.1: 8891 , inet:127.0.0.1: 7357

non_smtpd_milters = inet:127.0.0.1: 8891 , inet:127.0.0.1: 7357

#postscreen_watchdog_timeout = 10 (default: 10s)

#postscreen_cache_cleanup_interval (default: 12h)

#postscreen_cache_retention_time (default: 7d)

#postscreen_reject_footer = Postscreen Test

# wait greet banner before send:

postscreen_greet_banner = Hello from $mydomain !

# non-SMTP command and header («. text»)

# (old — «smtpd_use_tls»). Value: «no», «may» (at client), «encript» (TLS only)

# setting «smtpd_tls_security_level = encrypt» implies «smtpd_tls_auth_only = yes»

# data_directory > Postfix 2.5

#lmtp_generic_maps = mysql: /etc/postfix/mysql_virtual_alias_domain_maps.cf ,mysql: /etc/postfix/mysql_virtual_alias_maps.cf ,hash:/etc/postfix/aliases_lmtp

# after «user» before «@» extension — user+extension@ domain.tld

#local_recipient_maps = unix:passwd.byname $alias_maps

#local_recipient_maps = proxy:unix:passwd.byname $alias_maps

#content_filter = Email content filter

# Mail notice (default «postmaster») :

delay_notice_recipient = postmaster @ domain.tld

bounce_notice_recipient = postmaster @ domain.tld

2bounce_notice_recipient = postmaster @ domain.tld

error_notice_recipient = postmaster @ domain.tld

reject_rbl_client — имеет смысл включать только на период спам-атак. Иначе они могут сильно навредить, поскольку сторонние сервисы: во-первых — часто ошибаются, во-вторых — замедляют работу почты и создают дополнительную нагрузку.

reject_unverified_sender — аналогично, поскольку проверка всех отправителей приведет к тому, что не будут доходить письма списков рассылки, которые чаще всего не принимают обратных писем (при проверке используется эмуляция отправки обратного письма).

Дополнительные файлы с параметрами и данными

Заметка с описанием подробностей настройки Postfix.

Форматы таблиц данных — в основном «hash» (возможны «cidr» и др.). После создания файла формата «hash», должна быть создана база, командой postmap (см. ниже пример). Особенностью некоторых форматов является то, что после изменений необходимо перечитать (или перезагрузить) Postfix («postfix reload»), иначе изменения не будут задействованы (зато выше скорость чтения данных).

ВАЖНО! Необходимо создать файлы и базы со списками, которые были подключены в конфиге выше, даже если они будут пустыми.

Файл для правила «check_helo_access hash:/etc/postfix/hello_access» (если будет использоваться)

mail.domain.tld REJECT Don’t use my server name

domain.tld REJECT Don’t use my server name

Тестирование может выглядеть примерно так (в консоли из внешнего сервера — после окончания всей настройки!):

Connected to mail.domain.tld .

# rcpt to: postmaster @ domain.tld >

554 5.7.1 mail.domain.tld >: Helo command rejected: Don’t use my server name

Файл для правила «check_client_access hash:/etc/postfix/client_access» (если будет использоваться)

ВАЖНО! — необходимо заменить «ip.ip.ip.ip» и «ПРАВИЛО» на те для которых это будет выполняться (например «1.2.3.4 REJECT»).

Аналогично, если это будет использоваться, необходимо создать файлы и базы (таблицы) для правил:

  • «check_recipient_access hash:/etc/postfix/maps/access_recipient» — список получателей и правил для них (можно отсекать прием для ящика рассылки)
  • «canonical_maps = hash:/etc/postfix/canonical» — см. описание в соответствующем разделе в заметке.
  • «smtp_generic_maps = hash:/etc/postfix/aliases_smtp_output» — см. описание в соответствующем разделе в заметке.
  • «lmtp_generic_maps = hash:/etc/postfix/aliases_lmtp» — см. описание в соответствующем разделе в заметке.

ВАЖНО! Для вышеперечисленных файлов обязательно завершающее создание базы для каждого командой: postmap .

  • «alias_maps = hash:/etc/aliases»
  • «alias_database = hash:/etc/aliases»

— создаются следующим образом (см. описание в соответствующем разделе в заметке):

ВАЖНО! — необходимо заменить «Получатель» и «Новый_получатель» на те для которых это будет выполняться
(например «www-data: postmaster @ domain.tld «).

ВАЖНО! — двоеточие обязательно!

«postmap /etc/aliases» — здесь НЕ подходит!

Файл для правила «postscreen_access_list permit_mynetworks, cidr:/etc/postfix/postscreen_access.cidr» (если будет использоваться специальный список доступа для Postscreen)

ВАЖНО! — необходимо заменить «ip.ip.ip.ip» и «ПРАВИЛО» на те для которых это будет выполняться (например «1.2.3.4/32 permit»).
Этот формат не требует никаких последующих действий для создания базы.

ВАЖНО! Некоторые файлы могут быть пустыми, но они должны быть созданы!

После создания всех файлов необходимо выполнить в консоли:

Создадим файлы, хранящие SQL-запросы, проверяя имена таблиц и полей (в очередной версии PostfixAdmin они могут измениться — был прецедент)

query = SELECT domain FROM domain WHERE domain = ‘%s’ AND backupmx = ‘0’ AND active = ‘1’

query = SELECT username FROM mailbox WHERE username=’%s’ AND active = ‘1’

Запрос для авто-BCC ящика зарегистрированного пользователя

query = SELECT CONCAT(‘%u’, ‘+bccflag’, ‘@’, ‘%d’) FROM mailbox WHERE username=’%s’ AND active = ‘1’

Запрос ящика для авто-BCC не зарегистрированных пользователей родного домена

query = SELECT bccsnd +bccflag@ domain.tld ‘ FROM domain WHERE domain=’%d’ AND active = ‘1’

См. заметку про использование BCC.

query = SELECT goto FROM alias WHERE address=’%s’ AND active = ‘1’

query = SELECT CONCAT(‘%u’, ‘@’, target_domain) FROM alias_domain WHERE alias_domain = ‘%d’ AND active = 1

Выставим права на все конфиги, чтобы пароли из них не были доступны всем подряд (в консоли):

# chgrp postfix /etc/postfix/*.cf

# chmod u=rw,g=r,o= /etc/postfix/*.cf

ВАЖНО! Здесь параметр hosts надо указывать тот же, что указан в «my.cnf» MySQL (bind-address)!

Первые данные

Теперь вернемся к Posfixadmin и внесем первые данные через его web-интерфейс по адресу:

  1. Внесем свой новый домен — domain.tld
  2. Временно внесем еще один тестовый домен — test.com (его потом надо будет удалить . )
  3. Алиас ДЛЯ домена domain.tld — вся почта домена test.com перенаправляется на domain.tld
  4. Создаем ящик — postmaster @ domain.tld
  5. Превращаем ящик postmaster @ domain.tld в алиас для test@ domain.tld (этот ящик заводить не нужно — достаточно вписать его, как целевой для postmaster @ domain.tld ).
  6. Обязательно (!) создаем ящик — bccsnd @ domain.tld

* Тут важно не запутаться. В редактировании домена создется алиас ДЛЯ редактируемого домена, а в редактировании ящика — уже сам редактируемый ящик превращается в алиас для перечисленных.

** Кстати при создании ящика обязательно надо слать приветственное письмо, т.к. за создание папки отвечает Dovecot (Posfix вообще к этим папкам не имеет доступа — любой физический доступ осуществляется ЧЕРЕЗ Dovecot).

*** Аутентификация будет происходить очень интересно. Наличие/отсутствие имен ящиков, Postfix будет проверять сам в таблицах PostfixAdmin. Пароли Postfix в своих таблицах запрашивать не будет — они будут проверяться средствами Dovecot, но. в таблицах PostfixAdmin. 🙂

(должно вернуть postmaster @ domain.tld )

(должно вернуть postmaster +bccflag@ domain.tld )

(должно вернуть bccsnd +bccflag@ domain.tld )

Для ящика-алиаса:
* вернет список ящиков для пересылки (рассылки) для ящика X — список может содержать любые валидные (домены ящиков проверяется через DNS) имена (напр ***@gmail.com)!

(должно вернуть ‘test@ domain.tld ‘)

Для домена-алиаса:
В данном экзотическом варианте — вернет список рассылки ящика-алиаса, ДЛЯ которого запрашиваемый ящик является алиасом.
* К алиас-домену привязываются имена ВСЕХ ящиков основного домена, но ТОЛЬКО те, что есть в основном домене.
(должно вернуть ‘test@ domain.tld ‘)

См. также заметку про использование BCC.

Postgrey

Проверка настойчивости входящих.

Заметка с описанием подробностей настройки Postgrey.

Настройка Postgrey в Postfix — в файле «/etc/postfix/main.cf» (см. выше).

Строки оттуда (продублировано — повтор):

check_policy_service inet:127.0.0.1: 10023

POSTGREY_OPTS=»—inet= 10023 —delay=200 —max-age=40 —auto-whitelist-clients=4″

200 сек отказывать новичкам (по умолчанию 300 сек),
40 дней без обновления хранить информацию о них в белом листе (по умолчанию 35 дней),
4 раза принимать письма с проверкой, после чего автоматом добавлять в белый лист.

Применить изменения (в консоли):

Получение отчета из лога о текущих «отказниках» (в консоли):

Postscreen

Детектор и блокировщик почтовых зомби-ботов.

Заметка с описанием подробностей настройки Postscreen.

Postscreen не нуждается в отдельной установке, поскольку является частью Postfix с версии 2.8.

Настройка в конфигах и — см. выше.

Там же — описание для параметра postscreen_access_list в файле .

Policyd-SPF

SPF — это TXT-запись в DNS, в которой, в простейшем варианте должен быть указан IP сервера, которому разрешено отправлять почту.

Описание того как это должно выглядеть в DNS см. выше.

Соответственно, Policyd-SPF — это проверка для входящих писем на наличие такой записи. Результат этой проверки дописывается в заголовок письма. В дальнейшем это можно использовать для подсчета оценки вероятности спама или просто наблюдать результат в почтовом клиенте (при наличии такой возможности у него).

Есть разные реализации, — здесь использован скрипт на Python.

Настройка в конфигах и — см. выше.

# For a fully commented sample config file see policyd-spf.conf.commented

#skip_addresses = 127.0.0.0/8. ffff:127.0.0.0//104. 1//128

Посылаем письмо снаружи и смотрим на заголовки у себя. В письме, прошедшем SPF-проверку, должно быть что-то вроде:

Received-SPF: Pass (sender SPF authorized) >postmaster @ domain.tld

OpenDKIM

О настройке DKIM в DNS см. выше.

(установит в т.ч. библиотеку libmilter)

# chown -Rv opendkim:opendkim /etc/opendkim

Сначала создаем файл в котором перечислены хосты, для которых подпись не нужна

# Your IP addresses (one per line)

#Your hostnames (one per line)

-r — означает, что только для почты
-s — селектор

Всё комментим и добавляем:

Всё комментим и добавляем:

SOCKET=»inet: 8891 @localhost»

Настройки DKIM в Postfix — в файле «/etc/postfix/main.cf» (см. выше).

Строки оттуда (продублировано — повтор):

smtpd_milters = inet:localhost: 8891

non_smtpd_milters = inet:localhost: 8891

Первая строка говорит о том, чтобы все же принимать даже ту почту, которая не подписана.

Открытый ключ (сгенерированный ранее) должен быть здесь:

Копируем его в DNS (см. выше как). Там же создаем TXT-запись о политике использования DKIM в домене.

ВАЖНО! Ключ в DNS должен быть указан одной длинной строкой. Добавляется только то, что в кавычках — вместе с кавычками.

ClamAV-Milter

Заметка с описанием подробностей настройки ClamAV.

Будет подключен через Milter-протокол.

Установятся также пакеты: clamav, clamav-base, clamav-daemon, clamav-freshclam, libclamav6, libtommath0.
Предложенные дополнительно пакеты: clamav-docs, daemon, libclamunrar6.

После установки пишет про три фейла:

[FAIL] Clamav signatures not found in /var/lib/clamav . failed!

[FAIL] Please retrieve them using freshclam . failed!

[FAIL] Then run ‘/etc/init.d/clamav-daemon start’ . failed!

Это по-видимому потому, что не было баз.
Как только они обновились демон стартовал успешно (в консоли):

«clamav-milter.log» — не должен содержать ошибок конфигурации и предупреждений. В нем будет записываться информация о письмах, в которых обнаружены вирусы.
«clamav.log» — логиирует рестарты и обновление баз (одной строкой) + краткая информация об обнаруженных вирусах.
«freshclam.log» — логгирует обновление баз.

Можно сохранить оригинальные файлы конфигурации:

# cp /etc/clamav/clamav-milter.conf /etc/clamav/clamav-milter.cong.original

# cp /etc/clamav/clamd.conf /etc/clamav/clamd.cong.original

# cp /etc/clamav/freshclam.conf /etc/clamav/freshclam.cong.original

Запускаем скрипт автонастройки:

Ответы на вопросы могут быть такими:

  1. Handle the configuration file automaticaly? — Yes
  2. User tu run clamav-milter as: — clamav
  3. Groups for clamav-milter (space-separated): — (ничего — просто Enter)
  4. Communications interface with Sendmail — inet: 7357 @127.0.0.1
  5. Group owner of clamav-milter local (UNIX) socket: — clamav
  6. Creation mode for clamav-milter local (UNIX) socket: — 600
  7. Remove stale socket after unclean shutdown — Yes
  8. Wait timeout for data coming from clamd — 120 (можно увеличить, например до 240)
  9. Should clamav-milter stay in foreground (not forking)? — No
  10. Chroot to directory — (ничего — просто Enter)
  11. Pid file (оставляем как есть) — /var/run/clamav/clamav-milter.pid
  12. Temporary directory path (предлагает «/tmp») — очищаем предложенное и Enter. Будет используется $TEMPDIR или $TEMP.
  13. Clamav socket to connect to for scanning: — unix:/var/run/clamav/clamd.ctl
  14. Host excludes for scanning: — хосты, которые исключить из сканирования. Если оставить пустым, то вся почта будет сканироваться, — оставляем пустым.
  15. Mail address whitelist: — пусто
  16. Action to perform on infected messages (что делать если найдено зараженное письмо): — Reject (550)
  17. Action to perform on error conditions (если ошибка: таймаут, ошибка сканера, нарушение структуры данных и т.п.) — Reject
  18. Specific rejection reason for infected messages (сообщение для ответа на зараженное письмо): Virus detected: «%v». Mail delivery error (reject from virus scanner).
  19. Add headers to processed messages? — Add
  20. Log-file for clamav-milter: — /var/log/clamav/clamav-milter.log
  21. Disable log file locking? — Yes
  22. Maximum size of the log file (MB) — 50
  23. Log time with each message? — Yes
  24. Use system logger? — No
  25. Type of the syslog messages — LOG_LOCAL6
  26. Enable verbose logging? (подробное логгирование) — No
  27. Information to log on infected messages — Full
  28. Information to log if no threat is found — Off
  29. Size limit for scanned messages (MB) — 25

Подредактируем некоторые строки в файлах конфигурации.

Сокет в указанном выше файле должен совпадать с тем, что указан в файле

Настройка обновлений баз данных вирусов

LogFileMaxSize 10M — Максимальный размер лога обновления баз 10 MB (а зачем больше?), т.к. «0», по умолчанию — без ограничения.
Checks 4 — количество проверок обновлений базы, в день. Слишком часто по-видимому бессмысленно.

Изменяем размер лога (поскольку «0» — без ограничения)

Необходимо также всё закомментить в файле:

clamav clamav-milter . tcp4 127.0.0.1: 7357 *:* LISTEN

(должна присутствовать указанная строка)

В конфигурационном файле Postfix (см. выше), необходимо добавить через запятую к параметрам smtpd_milters и non_smtpd_milters значения, касющиеся ClamAV.

Строки оттуда (продублировано — повтор):

smtpd_milters = inet:127.0.0.1: 8891 , inet:127.0.0.1: 7357

non_smtpd_milters = inet:127.0.0.1: 8891 , inet:127.0.0.1: 7357

Здесь ранее было только значение «inet:127.0.0.1: 8891 «, касающееся DKIM. А теперь добавилось «».

В письме присланном снаружи должны присутствовать строки заголовка подобные следующим:

X-Virus-Scanned: clamav-milter 0.97.8 at domain

Кроме того не должно быть испорчено «DKIM pass» и «SPF pass»

Тоже самое должно быть (появиться) в письме отосланном наружу.

Чтобы проверить работу антивируса, нужно послать себе письмо, содержащее тестовый вирус EICAR-Test-File. Этот вирус, на самом деле не является вирусом, а предназначен для проверки антивирусных программ и является тестовой строкой, которую можно скопировать в письмо, либо в файл, вложенный в письмо. Информации о нем достаточно много в Интернет.

Dovecot — конфигурационные файлы

Dovecot уже был установлен ранее — одновременно с Postfix (см. выше). Здесь будет рассмотрена только настройка конфигурационных файлов.

то получим все текущие настройки.

Можно использовать что-то вроде:

Далее перечислены конфигурационные файлы Dovecot, в отредактированном под рассматриваемую здесь конфигурацию виде.

ВАЖНО! Все неуказанные параметры ниже необходимо удалить или закомментировать. Некоторые незадействованные параметры оставлены закомментированными, поскольку они могут быть полезны в дальнейшем.

Автозагрузка должна быть включена в файле

Dovecot будет слушать только 143 (IMAP) порт и только на локалхосте (127.0.0.1).

На этот порт будет подключаться MUA — RoundCube. Наружу используется 25 порт (Postfix). При этом для отправки писем RoundCube использует другой порт — 587 (Postfix).

Можно удалить неиспользуемые протоколы из каталога:

protocols = imap lmtp sieve

# Enable installed protocols
#!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp sieve

dict <
#quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
#expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
>

!include conf.d/*.conf
#!include_try local.conf

# Connect only after start SSL/TLS
# If not local network only !
disable_plaintext_auth = yes
auth_cache_size = 1M
auth_cache_negative_ttl = 0
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
auth_master_user_separator = *
auth_mechanisms = plain

#!include auth-deny.conf.ext
#!include auth-master.conf.ext
#!include auth-system.conf.ext
!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

Здесь может понадобиться изменить права (только при необходимости) для на 666.

Информацию об ошибках и прочих событиях следует искать так же в следующих лог-файлах:

Возможно будет иметь смысл произвести еще несколько дополнительных настроек логгирования.

Для этого отредактируем файл:

Комментируем один из них (в том же конфиге):

Отключение логгирования почтовых событий в syslog (тот же конфиг):

Создадим скрипт ротации логов

Владелец этого скрипта должен быть «root», права 644.

В следующем конфиге () присутствует namespace virt, для которого плагин virtual должен быть включен в трех конфигах:

ВАЖНО! В конфигах и включение плагинов должно быть без дублирования уже включенных: , а в остальных — с дублированием:

В конфиге строка для настраивает плагин так, что каталог с правилами будет общий для всех пользователей, а индексные каталоги — у каждого свои.

Но сначала создадим необходимые каталоги (в консоли):

# mkdir /var/lib/dovecot/virtual /Folder1

# chown -hR vmail : vmail /var/lib/dovecot/virtual

# chmod -R 700 /var/lib/dovecot/virtual

ВАЖНО! В дальнейшем для всех подпапок внутри /var/lib/dovecot/virtual нужно будет так же изменять владельца и права!

Папка с индексами «virtual_index» для виртуальных каталогов будет создаваться у каждого ящика автоматически при любом доступе.

Файл с фильтрами для виртуального каталога может выглядеть так (для виртуальной папки Folder1):

inthread refs x-mailbox INBOX

Подробнее об этом — см. соответствующий раздел заметки.

mail_location = maildir: /home/vmail/ %d/%n:INBOX= /home/vmail/ %d/%n

location = virtual: /var/lib/dovecot/virtual :INDEX= /home/vmail/ %d/%n/virtual_index:CONTROL= /home/vmail/ %d/%n/virtual_index

location = maildir: /home/vmail/ %d:LAYOUT=fs:INDEX= /home/vmail/ %d/%n/allmail_index

location = mbox:/var/mail/:INDEX= /home/vmail/ system_users_index

#mail_attachment_fs = sis posix

# Hash format to use in attachment filenames. You can add any text and

# Variables can be truncated, e.g. % returns only first 80 bits

* Чтобы читать почту системных юзеров (namespace system_users) надо дать разрешение на папку «/var/mail/» и на файл каждого пользователя — чтение и запись для всех

# Max. number of IMAP processes (connections)

# Max. number of POP3 processes (connections)

# Detail Process title in ps

# service name for hosts. are those defined as

# inet_listener in master.conf

postmaster_address = postmaster @ domain.tld

#rejection_subject = Rejected: %s

# %n = CRLF, %r = reason, %s = original subject, %t = recipient

rejection_reason = Your message to was automatically rejected:%n%r

mail_plugins = sieve virtual

# global_script_path = /var/lib/dovecot/ sieve/global/globalsieverc

Отключим следующий конфиг, поскольку он не используется (в консоли):

mail_plugins = $mail_plugins imap_acl imap_quota mail_log notify acl quota virtual

# IMAP logout format string:

# %i — total number of bytes read from client

# %o — total number of bytes sent to client

# Workarounds for various client bugs:

# The list is space-separated.

mail_plugins = $mail_plugins quota sieve virtual

postmaster_address = postmaster @ domain.tld

# Max. number of ManageSieve processes (connections)

# MANAGESIEVE logout format string:

# %i — total number of bytes read from client

# %o — total number of bytes sent to client

#managesieve_implementation_string = Dovecot Pigeonhole

#acl = vfile: /etc/dovecot/acl/%d :cache_secs=300

acl = vfile: /etc/dovecot/acl/%d

Здесь «%d» — папка, совпадающая с доменным именем.
Чуть ниже — пара примеров настройки ACL для всех пользователей.

Следующая настройка запрещает пользователю всё, кроме чтения/просмотра/удаления, но разрешает сохранение для LDA.
В каталоге с именем домена указываем ACL для папки «.Sent».

Аналогично можно настроить остальные папки (подробности — в заметке по ссылке чуть выше).

Закрываем доступ для всех кроме LDA к файлу «.dovecot.lda-dupes«, который может быть виден в MUA как фантомная папка «lda-dupes«:

ВАЖНО! — точка воспринимается как маркер вложенной папки.

# mail_plugins = $mail_plugins mail_log notify acl quota

mail_log_fields = uid box msgid size

quota = dict:user::file: /home/vmail/ %d/%n/dovecot-quota

# Note that % needs to be escaped as %%, otherwise «% » expands to empty.

#quota_warning = storage=95%% quota-warning 95 %u

#quota_warning2 = storage=80%% quota-warning 80 %u

# executable = script /usr/local/bin/quota-warning.sh

#quota = dict:User quota::proxy::quota

Здесь указана квота для пользователя 1 ГБ, а для Корзины — 10 процентов от общей квоты.

Sieve

Все глобальные скрипты и конфигурационные файлы будут находится в соответствующих папках в: /var/lib/dovecot/ sieve/global/

Все персональные настройки и файлы будут находится либо в папках пользователей, либо в каталоге: /var/lib/dovecot/ sieve/private/ — в соответствующих папках.

# mkdir /var/lib/dovecot/ sieve/

# mkdir /var/lib/dovecot/ sieve/global/

# mkdir /var/lib/dovecot/ sieve/private/

# chown -hR root:root /var/lib/dovecot/ sieve/

# chown -hR root:root /var/lib/dovecot/ sieve/global/

# chown -hR vmail :root /var/lib/dovecot/ sieve/private/

# chmod -R 755 /var/lib/dovecot/ sieve/

# chmod -R 755 /var/lib/dovecot/ sieve/global/

# chmod -R 700 /var/lib/dovecot/ sieve/private/

После всех остальных настроек (в конфиге ниже), папки в каталоге будут создаваться автоматически (включая каталог домена) при первом доступе пользователя к фильтру в настройках MUA RoundCube.

# sieve_user_log = /var/lib/dovecot/ sieve/private/%d/%n/.main.peronal.log

sieve = /var/lib/dovecot/ sieve/private/%d/%n/.main.personal.sieve

#sieve_default = /var/lib/dovecot/ sieve/default.sieve

sieve_dir = /var/lib/dovecot/ sieve/private/%d/%n/

sieve_global_dir = /var/lib/dovecot/ sieve/global/

sieve_before = /var/lib/dovecot/ sieve/global/incoming_deduplicate.sieve

Теперь подробнее о глобальном sieve-скрипте «incoming_deduplicate.sieve» и контроле всех отправляемых писем.

В этой конфигурации реализовано сохранение всей исходящей почты — в т.ч. отправленной с неучтенных ящиков или из внешнего MUA. Реализация включает в себя Sieve-скрипты в Dovecot, а также некоторые настройки Postfix.
В этой заметке — подробности метода (настоятельно рекомендую прочитать).

Суть метода в том, что для любых писем отправленных через Postfix создается дополнительная копия, доставляемая отправителю (только если отправитель в «родном» домене). При этом, если отправитель неучтенный (отсутствует в базе Postfixadmin), то доставляется в единый ящик для неизвестных отправителей. Эта копия маркируется прямо в Postfix — в заголовке письма модифицируется адрес доставки примерно так: «user+bccflag@ domain.tld » (либо » bccsnd +bccflag@ domain.tld » — для неучтенных отправителей). При доставке письма в ящик (через Dovecot) Sieve-скрипт отлавливает эти маркированные письма и пропускает их через временную базу учета дубликатов с помощью расширения (дубликаты отслеживаются по уникальному ID письма). Кроме того, проверке подвергаются письма, принудительно «перепосланные» из папки «Отправленные» — пропускаются через ту же базу дубликатов. Для этого, письма, отправленные «родным» MUA, проверяются (с помощью incron они «ловятся» при появлении в папке «Отправленные») и, если нет маркера — маркируются (заголовок модифицируется — добавляется ) и пересылаются через во «Входящие», где распознаются как подлежащие проверке на предмет дублирования. Какое из маркированных (с помощью Postfix или incron) писем придет первым — то и сохранится окончательно в «Отправленные» (последующие дубликаты уничтожаются).
Побочным эффектом всей схемы является проблема при принудительном перемещении писем в Отправленные через MUA (например мышью в web-интерфейсе) — некоторые из таких писем просто попадают во «Входящие». Эта проблема может быть частично решена через .

За подробностями еще раз настоятельно рекомендую обратиться к этой заметке.

В этом процессе задействованы:

  • Posfix — параметр sender_bcc_maps, конфига «main.cf» см. выше
  • Posfix — файлы /etc/postfix/mysql_bcc_mailbox_maps.cf и /etc/postfix/mysql_bcc_domain_maps.cf — для параметра sender_bcc_mapsсм. выше
  • Posfix — параметр recipient_delimiter (конфиг «main.cf») см. выше
  • Dovecot — параметры sieve_before, sieve_extensions, sieve_global_extensions и прочие конфига «90-sieve.conf» см. выше
  • Dovecot — параметр recipient_delimiter (конфиг «15-lda.conf») см. выше
  • Dovecot — параметр recipient_delimiter (конфиг «90-sieve.conf») см. выше
  • Dovecot — Sieve-скрипт «incoming_deduplicate.sieve» контроля дубликатов во входящих.
  • Dovecot — Sieve-скрипт «move_to_lda_refiltering.sieve» переотправки письма из «Отправленные» во «Входящие» через .
  • Roundcube — распознавание маркированного «двойного» адреса, параметр: см. ниже
  • Postfixadmin — скрипты постобработки добавления/удаления ящика, для файлов в служебной папке «incron_mailuser_monitor» см. выше
  • incron — задание наблюдения за удалением файлов из служебной папки .
  • incron — задание наблюдения за добавлением файлов в служебную папку .
  • Скрипт — «/etc/dovecot/add_del_mailuser_monitor.sh» запускающийся из заданий и .
  • incron — файлы заданий наблюдения за папками пользователей «Отправленные» (каждому ящику — в отдельном файле). Эти задания создаются/удаляются скриптом «add_del_mailuser_monitor.sh».
  • Скрипт — «/etc/dovecot/sent_refilter.sh» запускающийся из заданий наблюдения за папками пользователей «Отправленные».

ВАЖНО! Рекомендую изменить названия служебных папок для большей безопасности.

Добавим глобальный скрипт, который будет запускаться по событию входящей почты.

Sieve-скрипт для sieve_before конфига «90-sieve.conf»

require [«vnd.dovecot.duplicate», «editheader», «fileinto», «envelope», «subaddress», «imap4flags»];

if allof (not exists «X-Deduplicate», anyof (envelope :detail «to» «bccflag», not exists «Delivered-To»)) <

источник

Читайте также:  Установка заднего камеры bmw x6

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

Adblock
detector