Конфигурация почты

Материал из ISPWiki
Версия от 17:59, 15 мая 2015; Fly (обсуждение | вклад) (Настройка почтовых служб)
Перейти к: навигация, поиск

Общее по почте

Почтовые службы в ISPmanager 5 реализуются связкой POP3-сервера dovecot (только 2-й версии) и SMTP-сервера Exim. Все создаваемые через панель почтовые домены и почтовые ящики являются виртуальными и не требуют реальных пользователей в системе. Формат хранения почты - Maildir (http://ru.wikipedia.org/wiki/Maildir). SMTP-авторизация может осуществляться средствами sasldb2 или через сокет dovecot. Доставка сообщений и учет квот осуществляется средствами dovecot.

Настройка почтовых служб

ISPmanager Lite

ISPmanager Lite предоставляет возможность выбора используемых почтовых служб в разделе "Возможности".


Maillite-features.png


Общее о Exim

При установке, для настройки почтового сервера используется шаблон конфигурационного файла. Он копируется из etc/templates/exim.config в рабочую директорию exim. В нем есть уже все необходимое для работы.

Подробный разбор шаблона конфигурационного файла в статье - ISPmanager: Конфигурационный файл Exim

Основные файлы

Перечень файлов, используемых в работе панели с почтовым сервером Exim (пути могут быть найдены в конфигурационном файле ISPmanager - etc/ispmgr.conf):

  • exim-passwd - файл, где перечислены все почтовые ящики, пути до них, а так же uid/gid реальных пользователей, которым ящики принадлежат, а так же перенаправления почтовых ящиков
  • exim-domains - здесь перечислены все почтовые домены, создаваемые панелью, а так же перенаправления для них и действия по умолчанию.
  • exim-aliases - здесь перечислены псевдонимы почтовых ящиков
  • exim-whitelist - белый список почтового сервера, домены, ip-адреса, ящики, с которых всегда будет приниматься почта
  • exim-blacklist - черный список почтового сервера, домены, ip-адреса, ящики, с которых всегда будет отклоняться почта
  • exim-domainips - соответствие почтовых доменов и ip-адресов, с которых будет отправляться почта от них

Формат записи действий по умолчанию для доменов

В файле exim-domains:

 company.me:company.me::no  -  "Действие по умолчанию" имеет значение "Сообщение об ошибке"
 company.me:company.me:/dev/null:no  -  "Действие по умолчанию" имеет значение "Игнорировать и удалить"
 company.me:company.me:mary@me.ru:no  -  "Действие по умолчанию" имеет значение "Перенаправить"

Создание ящика

После создания ящика "aaa@test.dom" будут прописаны такие записи в конфигах:

в exim-passwd:

 aaa@test.dom:500:500:160:/var/www/user/data/email/test.dom/aaa:no
  • aaa@test.dom - имя ящика
  • 500:500 - uid:gid пользователя владельца
  • 160 - квота в мегабайтах
  • /var/www/user/data/email/test.dom/aaa - путь до директории ящика
  • no - выкличен ли ящик

в exim-aliases:

 ccc@test.dom:aaa@test.dom:fwd
 aaa@test.dom:aaa@test.dom,aaa@test2.dom:user
  • ccc@test.dom - псевдоним
  • aaa@test2.dom - куда слать копии писем

Общее о Sendmail

Для sendmail используется smtp-авторизация только через sasldb2. Так же sendmail не умеет работать с ip-адресами. Директория конфигурационных файлов всегда - /etc/mail Для FreeBSD конфигурационный файл sendmail называется по имени хостнейм сервера - <hostname>.mc, для Linux - sendmail.mc. На его основе автоматически будет собираться рабочий файл sendmail.cf. (Коммандой 'make -C /etc/mail' или 'make -C /etc/mail install' для FreeBSD) Подробный разбор конфигурационного файла в статье - ISPmanager: Конфигурационный файл Sendmail

Основные файлы

Перечень файлов, используемых в работе панели с почтовым сервером Sendmail (пути могут быть найдены в конфигурационном файле ISPmanager - etc/ispmgr.conf):

  • sendmail-aliases - здесь прописываются включенные автоответчики и перенаправления почтовых ящиков.
  • sendmail-accessdb - файл с настройками доступа, здесь прописываются отключенные ящики и домены, списки вайт и блэклистов
  • sendmail-virtusertable - здесь прописаны все ящики, их псевдонимы, а так же действия по умолчанию для доменов
  • sendmail-localhostnames - сюда прописываются все почтовые домены, созданные панелью

Формат записи действий по умолчанию для доменов

 @company.me error:nouser No such user here - сообщение об ошибке 
 @company.me devnull - игнорировать и удалить 
 @company.me me@gmail.com - перенаправить на адрес me@gmail.com 
 @company.me %1@me.ispvds.com - перенаправить на домен me.ispvds.com

Создание ящика

После создания ящика "aaa@test.dom" будут прописаны такие записи в конфигах:

в sendmail-virtusertable:

 ccc@test.dom	aaa@test.dom
 aaa@test.dom	aaa+test.dom
 @test.dom	error:nouser No such user here
  • ccc@test.dom - псевдоним
  • aaa+test.dom - соответствие этой записи из virtusertable записи в aliases
  • @test.dom - все почтовые ящики домена должны быть прописаны до записи с действием по умолчанию этого домена.

в sendmail-aliases:

 aaa+test.dom:	aaa@test2.dom,aaa\@test.dom
  • aaa@test2.dom - куда слать копии для почтового ящика
  • aaa\@test.dom - использована недокументированная возможность sendmail, чтобы была возможность использовать sendmail-aliases и sendmail-virtusertable вместе

Общее о Postfix

В целом принцип работы очень схож с Sendmail, тот же формат действий по умолчанию и схожие Но постфикс умеет работать с айпишниками и авторизоваться через dovecot. Подробный разбор конфигурационного файла postfix/main.cf в статье - ISPmanager: Конфигурационный файл Postfix

Основные файлы

Перечень файлов, используемых в работе панели с почтовым сервером Postfix (пути могут быть найдены в конфигурационном файле ISPmanager - etc/ispmgr.conf):

  • postfix-master - master.cf Postfix, в панели используется для настройки соответствия домена Ip-адресу
  • postfix-aliases - здесь прописываются включенные автоответчики и перенаправления почтовых ящиков.
  • postfix-localhostnames - сюда прописываются все почтовые домены, созданные панелью
  • postfix-domainips - используется для настройки соответствия домена Ip-адресу
  • postfix-accessdb - файл с настройками доступа, здесь прописываются отключенные ящики и домены, списки вайт и блэклистов
  • postfix-virtusertable - здесь прописаны все ящики, их псевдонимы, а так же действия по умолчанию для доменов


Создание ящика

После создания ящика "aaa@test.dom" будут прописаны такие записи в конфигах:

в postfix-virtusertable:

 ccc@test.dom	aaa@test.dom
 aaa@test.dom	aaa@test.dom aaa+test.dom
 @test.dom	postfix_err_nouser
  • ccc@test.dom - псевдоним
  • aaa+test.dom - соответствие этой записи из virtusertable записи в aliases
  • @test.dom - все почтовые ящики домена должны быть прописаны до записи с действием по умолчанию этого домена.

в postfix-aliases:

 aaa+test.dom:	aaa@test2.dom
  • aaa@test2.dom - куда слать копии для почтового ящика

Соответствие домену ip-адресу

После создания почтового домена test.dom с ip-адресом 1.2.3.4 будут прописаны такие записи в конфигах:

в postfix-domainips:

 /@test\.dom$/	smtp_test_dom

в postfix-master:

 smtp_test_dom   unix - - n - - smtp -o syslog_name=postfix-1_2_3_4 -o smtp_bind_address=1.2.3.4

Общее о Dovecot

Используется dovecot только второй версии. Посредством dovecot осуществляется доставка все писем в maildir'ы ящиков, для чего используется утилита dovecot-lda. Как плагины к dovecot-lda подключаются почтовые квоты и почтовый сортировщик на основе sieve (http://ru.wikipedia.org/wiki/Sieve). Разбор конфигурационных файлов dovecot в статье - ISPmanager: Конфигурационные файлы Dovecot

Основной используемый файл - dovecot-passwd, в нем хранятся все данные о ящике и шифрованные пароли. Для генерации паролей используется утилита - dovecot-doveadm.(пути могут быть найдены в конфигурационном файле ISPmanager - etc/ispmgr.conf)

Создание ящика После создания ящика "aaa@test.dom" будут добалена запись в dovecot-passwd:

 aaa@test.dom:{CRAM-MD5}59e8dc33b05d7e84fb49cf28bc20b7d55a2392631d8e16a9c522b6510692480b:500:500::/var/www/user/data/email/test.dom/aaa:::maildir:~/.maildir  userdb_quota_rule=*:bytes=160M
  • aaa@test.dom - имя ящика
  • {CRAM-MD5}59e8dc33b05d7e84fb49cf28bc20b7d55a2392631d8e16a9c522b6510692480b - пароль, зашифрованный методом CRAM-MD5
  • 500:500 - uid/gid пользователя владельца почтового ящика
  • /var/www/user/data/email/test.dom/aaa - путь до директории ящика
  • maildir:~/.maildir - указывает на формат хранения Maildir
  • userdb_quota_rule=*:bytes=160M - значение квоты в 160 мб, учитывается dovecot-lda при доставке

пароль сгенерирован вызовом:

 /usr/bin/doveadm pw -s CRAM-MD5 -u aaa@test.dom
 Enter new password:

Утилита dovecot-lda

Утилита dovecot-lda присутствует в дистрибутиве dovecot. Она прописывается для SMTP-сервером как доставщик почты по умолчанию. После передачи сообщения от SMTP-сервера, dovecot-lda берет данные для доставки из файла dovecot-passwd, делает setuid под пользователя владельца ящика.

Если подключен плагин почтового сортировщика sieve, dovecot-lda смотрит существует ли файл скрипта сортировки sieve (по умолчанию .dovecot.sieve) и запускает его на выполнение.

Для Postfix на dovecot-lda устанавливаются suid и sgid биты и ставится группа mgrsecure, которой принадлежат все пользователи, созданные в панели. (подробнее - http://wiki2.dovecot.org/LDA#multipleuids)

 chmod 06750 /usr/lib/dovecot/dovecot-lda
 chgrp mgrsecure /usr/lib/dovecot/dovecot-lda

Почтовые квоты

В <директория ящика>/.maildir/ есть файл maildirsize, какждый раз при доставке письма dovecot-lda прописывает туда размер письма и вычисляет общий размер. Этот общий размер сравнивается с квотой, прописанной в dovecot-passwd, если квота превышена - письмо отклоняется. При удалении почтовый сообщений по протоколу POP3 dovecot так же пересчитывает размер в maidirsize файле с учетом удаленных сообщений

посмотреть использованные квоты ящиков можно утилитой dovecot-doveadm:

 /usr/bin/doveadm quota get -A

Автоответчики

В <директория домена>/<имя ящика>/ создается .vacation.db и .vacation.msg В aliases прописывается соответствие почтового ящика и автоответчика.

 aaa+test.dom:  aaa@test.dom,"|/usr/local/mgr5/sbin/responder -f /home/user/data/email/test.dom/mail/.vacation.db -m /home/user/data/email/test.dom/mail/.vacation.msg"
  • .vacation.msg - сообщение автоответчика
  • .vacation.db - файл лога кому и во сколько был ответ, отвечает раз в сутки на один адресат.

Грейлистинг

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

Для exim и postfix используется Postgrey, для sendmail - milter-greylist.

Грейлистинг может быть включен и для почтового домена и для почтового ящика. Если на домене отключен - для его ящиков недоступен грейлистинг, если для домена включен - на его ящиках грейлистинг можно включать/выключать.

Существует так же отдельный белый список для грейлистинга, куда можно добавлять домены, ip-адреса и почтовые ящики.

Postgrey

Все домены и ящики на которых выключен грейлистинг записываются в файл whitelist_recipients, вайт-лист грейлистинга - файл whitelist_clients.

Пути для FreeBSD:

 /usr/local/etc/postfix/postgrey_whitelist_clients
 /usr/local/etc/postfix/postgrey_whitelist_recipients

Пути для Linux:

Если Postfix:

 /etc/postfix/postgrey_whitelist_clients
 /etc/postfix/postgrey_whitelist_recipients

Если sendmail или exim:

 /etc/postgrey/whitelist_clients
 /etc/postgrey/whitelist_recipients

Формат записи:

whitelist_clients:

 example.com
 1.2.3.4
 aaa.example.com

whitelist_recipients:

 test.dom
 ccc@test.dom
 

Milter-Greylist

Вайтлист, почтовые домены, ящики с отключенным грейлистингом хранятся в файле greylist-conf (Путь прописан в etc/ispmgr.conf, для Debian - /etc/milter-greylist/greylist.conf)

Формат записи:

  • грейлистинг отключен на домене:
 racl whitelist rcpt /.*@test.dom/
  • грейлистинг отключен на ящике:
 racl whitelist rcpt aaa@test.dom
  • вайтлист для домена:
 racl whitelist domain example.com
  • вайтлист для ящика:
 racl whitelist from aaa@example.com
  • вайтлист для ip-адреса:
 racl whitelist addr 1.2.3.4


SpamAssassin

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

SpamAssasin может быть включен и для почтового домена и для почтового ящика. Если на домене отключен - для его ящиков недоступен, если для домена включен - на его ящиках SpamAssasin можно включать/выключать.

Почтовые домены, ящики с отключенной проверкой спама, а так же настройки спамассассина хранятся в файле spamassassin-localcf (Путь прописан в etc/ispmgr.conf, для Debian - /etc/spamassassin/local.cf)

Формат записи:

  • Выключен на домене:
 all_spam_to     *@test.dom
  • Выключен на ящике:
 all_spam_to     aaa@test.dom

Настройки:

  • Требуемая оценка (исходя из алгоритмов проверки спама и обученности, SpamAssassin определяет оценку, число от 0 до 100)
 required_score  5
  • Дописывать в поле "Тема" (Если письмо расценено как спам, что дописать в теме сообщения):
 rewrite_header  Subject ****SPAM*****
  • Тип отчета (как прикладывать отче о спаме):
 report_safe     1
  • E-Mail для связи (в отчете о спаме):
 report_contact  aaa@example.com


OpenDkim

Dkim - фильтр добавляет в загоовки письма специальную сигнатуру, с помощью которой можно идентефицировать домен, с которого пришла почта, если в его днс записях есть соответствующая TXT-запись. Для этого для каждого домена создается пара приватный/публичный ключ. Opendkim к sendmail и postfix подключается через milter-интерфейс (http://en.wikipedia.org/wiki/Milter), Exim начиная с версии 4.7 умеет сам работать с Dkim, тогда opendkim используется только для генерации ключей.

Пути (в etc/ispmgr.conf):

  • opendkim-keyspath - директория где хранятся ключи
  • opendkim-genkey - утилита генерации ключей

Включение DKIM на домене

После включения DKIM на домене создадутся следующие файлы в директории opendkim-keyspath:

 test.dom.private
 test.dom.txt

Добавится TXT днс запись для доменного имени:

 dkim._domainkey	IN	TXT	"v=DKIM1\; k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDF0zQdEjbWdIkor9Qm9zelAZAUrHJfft7Rmf/dvFXZsllBMUhkZiaP44II2Q2ROJGIUywR3abakw2UWR5loHeIYByh7VqiobUWSz+RGaQrKj9svjXguZGf+YbYwYZGMNxNyWifUg7+XPse+WedRTNkDlt+iMXEBjtOxE3kSOshPwIDAQAB"

Если Sendmail или Postfix:

Так же используются файлы KeyTable, SigningTable (для для Debian - в директории /etc/opendkim/) Для домена test.dom добавятся записи:

KeyTable:

 dkim._domainkey.test.dom test.dom:dkim:/etc/opendkim/keys/test.dom.private
  • test.dom - имя домена
  • dkim - селектор (любая строка, в ISPmanager остается по умолчанию - dkim)
  • /etc/opendkim/keys/test.dom.private - путь до приватного ключа
  • dkim._domainkey.test.dom - идентификатор, прописывается в TXT записи и в SigningTable

SigningTable:

 test.dom dkim._domainkey.test.dom
  • dkim._domainkey.test.dom - идентификатор, прописывается в TXT записи и в KeyTable
  • test.dom - имя домена

Дополнительная информация

Письмо с DKIM не проходит проверку. В заголовках письма

 dkim=invalid reason=pubkey_syntax


Проблема в том, что на Centos DKIM не верно генерирует ключ (лишние скобки и пробелы генерируются).


Для решения пробелмы необходимо поправить txt запись для домена и поправить запись в файле /etc/opendkim/keys/test.dom.txt

привести все к виду

cat /etc/opendkim/keys/domain.com.txt

dkim._domainkey	IN	TXT	"v=DKIM1; k=rsa; s=email; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3bFrhfb1ofI3Ix13094HuTPz91i81MHnAqjPbb1boig17/AViH2tWBpOULVK2W5+WYpZEE4Z/x7H4yxIP7B7i7l8LrjXgKXLVtU9dbmjXn4PyVrlyM8E5azDLhArARa+i5Lrtv34waixnO6s9xRgqLeplMfz+r7UmzV3UP52XzQIDAQAB"; ----- DKIM key dkim for domain.com

Clamav

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

Домены, на которых проверка вирусов отключена записываются в clamav-whitelist (путь в etc/ispmgr.conf, для Debian - /etc/clamav.whitelist)

Запись для отключенного домена в clamav-whitelist:

Для postfix или sendmail:

 To:.*@test.dom

Exim работает с clamav без milter-интерфейса и смотрит в clamav-whitelist сам:

 test.dom


Sieve

В качестве сортировщика почты используется плагин к dovecot языка филтрации Sieve (http://ru.wikipedia.org/wiki/Sieve)

В дире ящика есть файл .dovecot.sieve, в который включаются файлы скриптов(в каждом одном условия и действия для него) из директории .sieve/ так же в директории ящика.

В каждый скрипт в заголовок добавляется инструкция подключения всех комманд, добаляемых через панель:

 require ["fileinto","reject","vacation","regex","envelope","relational","body","copy"]

Пример

Скрипт с именем "testscript" для ящика aaa@test.dom пользователя владельца user, проверяет формулировку: Если в заголовках письма "Header" или "Subject" не найдены подстроки "AAA", "BBB", "ССС" или размер письма больше 1 мегабайта, то переслать письмо ящику bbb@test.dom, а в ящике aaa@test.dom не сохранять.

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

/var/www/user/data/email/test.dom/aaa/.dovecot.sieve:

 require ["include"];
 include :personal "testscript";
  • require - заявляем что используем директиву include для включения скриптов
  • include - включаем скрипт testscript

/var/www/user/data/email/test.dom/aaa/.sieve/testscript.sieve:

 if anyof (	not header :contains ["Header","Subject"]  ["AAA","BBB","CCC"],
 	 size :over 1024K
 ) {	redirect "bbb@test.dom";
 	discard;  
 }
  • anyof - любое из условий верно

Первое условие (условия каждое на новой строке через запятую между '(' и ')'):

  • not - логическое НЕ
  • header - проверяем заголовки письма
  •  :contains - содержит
  • ["Header","Subject"] - проверяем заголовки Header или Subject
  • ["AAA","BBB","CCC"] - проверяем, что заголовки содержат "AAA", "BBB" или "ССС"

Второе условие:

  • size - проверяем размер письма
  •  :over - больше
  • 1024K - 1 мегабайт

Первое действие (действия каждое на новой строке через запятую точку с запятой между '{' и '}'):

  • redirect - перенаправить
  • "bbb@test.dom" - на адресс bbb@test.dom

Второе действие:

  • discard - удалить (не сохранять в ящике, для которого выполняется скрипт)