Создание простой почтовой системы (Чем проще функционал - тем сложнее оказывается сделать)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Malamut
Сообщения: 2
ОС: Ubuntu 7.10

Создание простой почтовой системы

Сообщение Malamut »

Собственно, появилась необходимость развернуть почтовую систему для небольшой фирмы. Была произведена базовая настройка Postfix + Dovecot, всё чудно работает, почта бегает, пользователи довольны. И вот чёрт меня дёрнул захотеть сделать из почтовой системы конфетку. И начались проблемы. В связи с этим и хочу поднять эту тему. В сети масса информации о настройках postfix, но практически нет ничего по поводу некоторых крайне полезных и подчас необходимых плюшек, которые я и опишу. Вкратце что хочется:

Хочется простую в использовании (для пользователя) почтовую систему с доступом откудаприспичитпользователю, но при этом максимально безопасным. Теперь конкретика по пожеланиям:

  • У пользователя должен быть единый логин и пароль для SMTP и IMAP сервера, и должен быть один Maildir++ ящик на серваке.
  • Почтовых адресов на пользователя может быть навешено сколько угодно, с каждого из них пользователь должен иметь возможность почту отправлять и почта для каждого из них должна складываться в единый Maildir++, закреплённый за пользователем.
  • На SMTP и IMAP серваках авторизация должна быть по логину в TLS сессии внутри внутренней сети (192.168.0.х), при подключении же извне кроме логина и пароля клиент пользователя должен предоставить сертификат, иначе в соединении отказывать.
  • Вся исходящая почта пользователя должна складываться в подпапочку его Maildir'а, дабы она была доступна из любого почтового клиента.
  • Ну и наконец вся почта должна полностью надёжно бекапится.


Всё просто, разумно и ИМХО полностью необходимо для любой уважающей себя конторы. Как сделал это я:

  • Dovecot выступает в качестве LDA и в качестве сервера аутентификации для Postfix, все домены обслуживаются через virtual_domains, все адреса для одного пользователя замапины на основной через virtual_alias_maps, а разрешение на отсылку через SMTP выдаётся после сверки по smtpd_sender_login_maps.
    Итого - задача решена полностью, единственная проблема - при коннекте через клиент (Thunderbird) если пользователь захочет отсылать почту с разных своих адресов ему надо будет вручную добавить несколько аккаунтов с одним логином, но разными адресами отправителя, все они будут смотреть в один и тот же maildir. Немного неудобно из-за дублирования одного и того же ящика, но это ограничение клиентов и его никак не побороть.
  • Ну собственно см. п. 1 - проблема решена почти идеально.
  • И Postfix, и Dovecot можно настроить на отказ в обслуживании при отсутствии у клиента правильного сертификата. Увы, сделать внутреннюю сеть свободной от требования сертификата по крайней мере в dovecot невозможно, а значит и в Postfix не будем пытаться, леший с ним. Хочу тогда чтобы почта ходила только если пользователь предоставил правильный сертификат и указал правильный логин и пароль. В конце концов раздать всем внутренним клиентам сети по сертификату можно, хоть и геморно. С Dovecot проблем не возникает. С Postfix же - напротив. Есть два разрешения в smtpd_recirient_restrictions - permit_sasl_authenticated и permit_tls_clientcerts. Первое разрешает отправку через SMTP почты залогиненным, второе - предоставившим правильный сертификат. Вопрос: как их объединить в одно? Чтобы разрешение выдавалось только если и залогинился, и предоставил сертификат. Итого - проблема открыта. Почему я хочу и сертификат и логин? Потому что сертификат легко украсть, и пользователь спокойно может залогиниться в кафешке и забыть выйти, как следствие ни сертификат, ни логин по отдельности от блондинок-пользователей не спасают, а вместе уже хоть что-то, надо постараться, чтобы пропалить и логин, и сертификат.
  • Собственно вообще не знаю, как на постфиксе такое организовать. Теоретически всё просто до жути: почта от одного из адресатов из списка должна перед посылкой в внешний мир отсылаться так же в dovecot с пометкой положить в папочку out. При этом ещё надо не забыть про алиасы. На практике же я вообще не нашёл хоть какого-то решения столь простой и необходимой задачи.
  • Бекап - узкое место maildir. Бекап по крону - не вариант, ибо надо гарантировать сохранность всех писем, а не только основной массы. Настраивать отдельные демоны для контроля изменений в директориях - сущий бред. Самый простой вариант - вместе с пересылкой на dovecot все письма пересылать на внутренний postfix сервак, который их тупо сложит у себя. Но тут проблема синхронизации. Ибо письма должны храниться в бекапе определённое время после удаления их пользователем из ящика, а не после их доставки. Ну да ладно, скрипт синхронизации наваяю. Итого - осталось понять, как распараллелить транспорт. То есть чтобы одно письмо одновременно отправлялось по двум транспортам. Этого я тоже не нарыл в документации к постфиксу.


В общем и целом, все мои пожелания не критичны, но с другой стороны крайне необходимы для нормальной почтовой системы. Поэтому буду благодарен любым направленным посылам в сторону полезной для решения поставленной проблемы информации. Да, postfix и dovecot - не панацея, выбраны были просто как одни из самых безопасных и стабильных.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Создание простой почтовой системы

Сообщение pelmen »

1. Решено
2. Решено
3. Из man 5 postcinf
smtpd_tls_auth_only (default: no)

When TLS encryption is optional in the Postfix SMTP server, do not announce or accept SASL authentication over unencrypted connections.

Из The Postfix Book
В Postfix существует параметр smtpd_tls_auth_only для предоставления
SMTP AUTH только после открытия зашифрованного SMTPсоедине
ния. По умолчанию этот параметр не включен, чтобы установить его,
добавьте в файл main.cf следующую строку и перезагрузите конфигу
рацию:
smtpd_tls_auth_only = yes
Думаю, что с включением этой опции разумно убрать permit_tls_clientcerts из smtpd_recirient_restrictions хотя не уверен, tls ни разу не настраивал.
4. пока не придумал
5. Алиас? Т.е. вся приходящая почта будет еще пересылаться на второй сервак (дублирующий). Идея такая:
Делаем два почтовых сервера, обслуживающих по 2 виртуальных домена каждый. Домены такие: domain.ru, mx1.domain.ru, mx2.domain.ru. MX-записи будут такими: domain.ru mx 10 ip1 и domain.ru mx 20 ip2. Каждый из серверов обслуживает domain.ru + один из дополнительных. Во всех доменах одни и те же почтовые ящики, т.е. user1@domain.ru, user1@mx1.domain.ru, user1@mx2.domain.ru. Физически все письма, которые будут храниться в /var/mail/virtual/domain.ru будут так же храниться и в /var/mail/virtual/mx1.domain.ru (просто символьная ссылка). Письма будут приходить только на user@domain.ru. В алиасах пользователя будет храниться такая запись: user@domain.ru,user@mx2.domain.ru. На втором сервере соответственно user@domain.ru,user@mx1.domain.ru. Таким образом письмо, пришедшее на почтовый сервер (допустим на ip1), будет оставлено в /var/mail/virtual/domain.ru/user/ + отправлено на user@mx2.domain.ru и заляжет там в /var/mail/virtual/mx2.domain.ru/user/, что является символьной ссылкой для /var/mail/virtual/domain.ru/user/. У пользователей user@mx{1,2}.domain.ru алиасов нет, чтоб не вызывать цикл. Если сервер вышел из строя, то письма будут автоматом слаться на mx2.domain.ru, и по такой-же обратной схеме залягут на нем и будут продублированы на user@mx1.domain.ru и будут ждать очереди на отправку, пока сервер не будет восстановлен.
Спасибо сказали:
Malamut
Сообщения: 2
ОС: Ubuntu 7.10

Re: Создание простой почтовой системы

Сообщение Malamut »

pelmen писал(а):
12.02.2010 09:25
Из man 5 postcinf
smtpd_tls_auth_only (default: no)

When TLS encryption is optional in the Postfix SMTP server, do not announce or accept SASL authentication over unencrypted connections.

Из The Postfix Book
В Postfix существует параметр smtpd_tls_auth_only для предоставления
SMTP AUTH только после открытия зашифрованного SMTPсоедине
ния. По умолчанию этот параметр не включен, чтобы установить его,
добавьте в файл main.cf следующую строку и перезагрузите конфигу
рацию:
smtpd_tls_auth_only = yes
Думаю, что с включением этой опции разумно убрать permit_tls_clientcerts из smtpd_recirient_restrictions хотя не уверен, tls ни разу не настраивал.

Вот вы-то не уверены, а я уверен, что это не то))) smtpd_tls_auth_only = yes у меня конечно стоит, но эта опция лишь позволяет обеспечить сохранность передаваемой информации по сети, а авторизацию более жёсткой она не делает.
Спасибо сказали: