Предлагаю всем простейшую задачку из жизни, которую я не могу уже неделю решить.Собственно, появилась необходимость развернуть почтовую систему для небольшой фирмы. Была произведена базовая настройка Postfix + Dovecot, всё чудно работает, почта бегает, пользователи довольны. И вот чёрт меня дёрнул захотеть сделать из почтовой системы конфетку. И начались проблемы. В связи с этим и хочу поднять эту тему. В сети масса информации о настройках postfix, но практически нет ничего по поводу некоторых крайне полезных и подчас необходимых плюшек, которые я и опишу. Вкратце что хочется:
Хочется простую в использовании (для пользователя) почтовую систему с доступом откудаприспичитпользователю, но при этом максимально безопасным. Теперь конкретика по пожеланиям:
1. У пользователя должен быть единый логин и пароль для SMTP и IMAP сервера, и должен быть один Maildir++ ящик на серваке.
2. Почтовых адресов на пользователя может быть навешено сколько угодно, с каждого из них пользователь должен иметь возможность почту отправлять и почта для каждого из них должна складываться в единый Maildir++, закреплённый за пользователем.
3. На SMTP и IMAP серваках авторизация должна быть по логину в TLS сессии внутри внутренней сети (192.168.0.х), при подключении же извне кроме логина и пароля клиент пользователя должен предоставить сертификат, иначе в соединении отказывать.
4. Вся исходящая почта пользователя должна складываться в подпапочку его Maildir'а, дабы она была доступна из любого почтового клиента.
5. Ну и наконец вся почта должна полностью надёжно бекапится.Всё просто, разумно и ИМХО полностью необходимо для любой уважающей себя конторы. Как сделал это я:
1. Dovecot выступает в качестве LDA и в качестве сервера аутентификации для Postfix, все домены обслуживаются через virtual_domains, все адреса для одного пользователя замапины на основной через virtual_alias_maps, а разрешение на отсылку через SMTP выдаётся после сверки по smtpd_sender_login_maps. Итого - задача решена полностью, единственная проблема - при коннекте через клиент (Thunderbird) если пользователь захочет отсылать почту с разных своих адресов ему надо будет вручную добавить несколько аккаунтов с одним логином, но разными адресами отправителя, все они будут смотреть в один и тот же maildir. Немного неудобно из-за дублирования одного и того же ящика, но это ограничение клиентов и его никак не побороть.
2. Ну собственно см. п. 1 - проблема решена почти идеально.
3. И Postfix, и Dovecot можно настроить на отказ в обслуживании при отсутствии у клиента правильного сертификата. Увы, сделать внутреннюю сеть свободной от требования сертификата по крайней мере в dovecot невозможно, а значит и в Postfix не будем пытаться, леший с ним. Хочу тогда чтобы почта ходила только если пользователь предоставил правильный сертификат И указал правильный логин и пароль. В конце концов раздать всем внутренним клиентам сети по сертификату можно, хоть и геморно. С Dovecot проблем не возникает. С Postfix же - напротив. Есть два разрешения в smtpd_recirient_restrictions - permit_sasl_authenticated и permit_tls_clientcerts. Первое разрешает отправку через SMTP почты залогиненным, второе - предоставившим правильный сертификат. Вопрос: как их объединить в одно? Чтобы разрешение выдавалось только если И залогинился, И предоставил сертификат. Итого - проблема открыта. Почему я хочу и сертификат и логин? Потому что сертификат легко украсть, и пользователь спокойно может залогиниться в кафешке и забыть выйти, как следствие ни сертификат, ни логин по отдельности от блондинок-пользователей не спасают, а вместе уже хоть что-то, надо постараться, чтобы пропалить и логин, и сертификат.
4. Собственно вообще не знаю, как на постфиксе такое организовать. Теоретически всё просто до жути: почта от одного из адресатов из списка должна перед посылкой в внешний мир отсылаться так же в dovecot с пометкой положить в папочку out. При этом ещё надо не забыть про алиасы. На практике же я вообще не нашёл хоть какого-то решения столь простой и необходимой задачи.
5. Бекап - узкое место maildir. Бекап по крону - не вариант, ибо надо гарантировать сохранность всех писем, а не только основной массы. Настраивать отдельные демоны для контроля изменений в директориях - сущий бред. Самый простой вариант - вместе с пересылкой на dovecot все письма пересылать на внутренний postfix сервак, который их тупо сложит у себя. Но тут проблема синхронизации. Ибо письма должны храниться в бекапе определённое время после удаления их пользователем из ящика, а не после их доставки. Ну да ладно, скрипт синхронизации наваяю. Итого - осталось понять, как распараллелить транспорт. То есть чтобы одно письмо одновременно отправлялось по двум транспортам. Этого я тоже не нарыл в документации к постфиксу.В общем и целом, все мои пожелания не критичны, но с другой стороны крайне необходимы для нормальной почтовой системы. Поэтому буду благодарен любым направленным посылам в сторону полезной для решения поставленной проблемы информации. Да, postfix и dovecot - не панацея, выбраны были просто как одни из самых безопасных и стабильных.
пользователи должны с собой таскать сертификат на дискетке?
>пользователи должны с собой таскать сертификат на дискетке?Весь смысл в том, чтобы случайно нельзя было зайти на почту извне. Тем кому надо да, должны поставить сертификат на свой компьютер. Нет, будет ещё доступ через веб-морду, это для хомячков. А по IMAP и SMTP нужен сертификат.
>>пользователи должны с собой таскать сертификат на дискетке?
>
>Весь смысл в том, чтобы случайно нельзя было зайти на почту извне.
>Тем кому надо да, должны поставить сертификат на свой компьютер.... или на компьютер в интернет-кафешке...
>>>пользователи должны с собой таскать сертификат на дискетке?
>>
>>Весь смысл в том, чтобы случайно нельзя было зайти на почту извне.
>>Тем кому надо да, должны поставить сертификат на свой компьютер.
>
>... или на компьютер в интернет-кафешке...Если ко мне придёт пользователь и скажет, что он поставил свой личный сертификат на комп в кафешке, потом ввёл свой личный пароль и при этом ещё и забыл выйти из аккаунта, в результате чего у него утекла важная почта, то я ему с чистой совестью скажу, что он идиот. Если же у меня будет только один способ авторизации, то я рискую наткнуться на пользователя, который скажет, что я виноват в том, что не обезопасил его от простейшей ошибки, и виноват буду я. Как известно, система резервирования всегда должна быть двойной. Иначе она просто не имеет смысла.
3. Повесить два dovecot'а с разными конфигами на внутренний и внешний ип. Или на разные порты и сделать редирект в пакетном фильтре, на основании ип адреса клиента.4. Используйте sender_bcc_maps, как и предлагали на постфикс.ру. Но писать скрипт я бы не стал. Лучше в качестве lookup table использовать sql table. В нем можно написать как минимум
query = SELECT 'out_%s'
а в dovecot'е через sieve письмо скинуть в outbox. Причем в sql можно и реальную выборку с БД сделать.
>3. Повесить два dovecot'а с разными конфигами на внутренний и внешний ип.
>Или на разные порты и сделать редирект в пакетном фильтре, на
>основании ип адреса клиента.Да с довекотом-то не проблема, проблема с постфиксом))) И заключается она в том, что у меня не получается сделать одновременную проверку и на SASL, и на сертификат, они блин работают в связке ИЛИ только.
>4. Используйте sender_bcc_maps, как и предлагали на постфикс.ру. Но писать скрипт я
>бы не стал. Лучше в качестве lookup table использовать sql table.
>В нем можно написать как минимум
>
>query = SELECT 'out_%s'
>
>а в dovecot'е через sieve письмо скинуть в outbox. Причем в sql
>можно и реальную выборку с БД сделать.Ага, собственно можно и проще: можно через sender_bcc_maps добавить расширения к адресу (вместо user@example.com сделать user+out@example.com), ну и немного перенастроить транспорт на dovecot, чтобы он клал письмо в папки в зависимости от расширения. Но пожалуй Sieve будет поконфигурабильней)))
>Да с довекотом-то не проблема, проблема с постфиксом))) И заключается она в
>том, что у меня не получается сделать одновременную проверку и на
>SASL, и на сертификат, они блин работают в связке ИЛИ только.Как вариант - полисинг http://www.postfix.org/SMTPD_POLICY_README.html
Во внешней программе можно описать любую логику.
Добрый день!
По пунктам 1, 2, 4, 5 можно посмотреть в сторону данного продукта - http://www.dbmail.org/
Особенно по пункту 5 бакапь как хочешь. Хочешь настраивай кластер, хочешь настраивай репликацию. Хотя может я сильно ошибаюсь и этот вариант не тривиален. По поводу пункта 3 от человеческих ошибок и глупости ничего не спасёт и при особой изворотливости обвинить можно хоть кого хоть в чём. Да и так ли остро стоит необходимость в таких серьёзных мерах защиты? Секреты Пентагона, что ли в этой небольшой фирме.