LINUX.ORG.RU

Создание почтовой системы на базе exim, dbmail, amavisd-new и postgresql.


0

0

Решил поделиться наработками, интересует мнение общества. Особенно если у кого рецепты есть с exim связанные в закромах - может быть подбросят.

Целью статьи является создание простой для управления и масштабируемой почтовой системы под управлением ОС Linux с возможностью фильтрации почты, учитывающей индивидуальные пользовательские настройки.

>>> Подробности



Проверено: maxcom

Оченно даже карашо. На эту страничку я закладочку-то повешу... :) У меня exim+postgresql(+courier-imap). dbmail использовать еще пока необходимости нет, а вот amavis я бы прикрутил, посему мне эта инфа полезная.

Kasper
()
Ответ на: комментарий от Kasper

>Оченно даже карашо. На эту страничку я закладочку-то повешу... :) У меня exim+postgresql(+courier-imap). dbmail использовать еще пока необходимости нет, а вот amavis я бы прикрутил, посему мне эта инфа полезная.

у меня проверка на вирусы и спам прикручина через exiscan, попробуй классно работает! Там единственный недостаток - нельзя последовательно несколько антивирусов на проверку поставить, токо один работает. Я поставил clamav.

http://duncanthrax.net/exiscan-acl/

anonymous
()
Ответ на: комментарий от anonymous

ага postgresql в таком деле это из пушки по воробьям. там и нафик sql не нужон. уж sqlite прикрутили бы лучше

anonymous
()

Очень интересно, но не могу открыть линк

У меня используется Exim + DbMail + SpamAs. + DrWeb + WEB IMAP было бы очень интересно почитать идеи коллег, но линк не открывается :(

anonymous
()

Можно я сразу скажу не глядя, что эта гремучая смесь - какашка? ;)
exim - дырявая и сомнительная по качеству хрень, а postgresql сразу
снижает надёжность всей системы на порядок. Возражений нет?

anonymous
()
Ответ на: комментарий от Ezzh

Ха, ха. Только написал про надёжность... и вот она сразу и проявилась ;)

anonymous
()
Ответ на: комментарий от anonymous

Потенциальное количество уязвимостей и надежность уменьшается пропорционально сложности системы - в ракетостроении используют, например, дублирующие блоки. Exim используют многие провайдеры. Все остальное зависит от /dev/hands. Вы не сможете сделать так, что бы эта связка стабильно и безопасно работала? Каждому свое... Еще раз сорри за хостера...Пошел с ними ругаться...

Ezzh
() автор топика
Ответ на: комментарий от Ezzh

К сожалению, обстоятельство сложились так, что я стал клиентом Санкт-Петербургского хостера, хотя сам живу в Москве и к настройке их систем никакого отношения, кроме как покупатель, не имею. После этого случая буду искать нового хостера, если хостер не принесет мне внятных извинений и обещания, что больше такого не повторится. =(

Ezzh
() автор топика
Ответ на: комментарий от Ezzh

> надежность уменьшается пропорционально сложности системы

Тогда такой робкий вопрос: а может не надо усложнять систему? ;)

> в ракетостроении используют, например, дублирующие блоки.

И как они помогают в случае взрыва ракеты на старте? ;)

anonymous
()
Ответ на: комментарий от anonymous

>у меня проверка на вирусы и спам прикручина через exiscan, попробуй классно работает! Там единственный недостаток - нельзя последовательно несколько антивирусов на проверку поставить, токо один работает. Я поставил clamav.

Для этого есть патч ставящийся поверх exiscan'a. Поищи в архивах списка рассылки по exiscan.

anonymous
()

Раз уж тут собрались люди, знающие exim, скажите пожалуйста, может ли exim вызвать внешний фильтр (некий бинарник), отдать ему полученное письмо, и, в зависимости, от ответа фильтра, ответить smtp-клиенту соответствующим кодом на DATA? Спасибо.

abramoff
()
Ответ на: комментарий от abramoff

> Тогда такой робкий вопрос: а может не надо усложнять систему? ;)

такой же робкий ответ - конечно! если нет причин, то не надо. Простой пример репликация бд усложняет настройку системы... и каждый для себя сам решает нужна она или нет ;)

> отдать ему полученное письмо, и, в зависимости, от ответа фильтра, > ответить smtp-клиенту соответствующим кодом на DATA?

Имху можно с помощью грязных хаков, по человечески это реализовать нельзя (sendmail milter нету у exim'a), но в exim есть возможность использовать embeded perl, на котором народ делал 'pop before smtp' Утверждать не могу, c такой экзотической задачей сталкиваться не приходилось.

По поводу хостера - это они оказывается там работы проводят =) гы

Ezzh
() автор топика
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от Ezzh

значит корячка. если люди перл как ембедед сдалали, ясно что у них там за код. уж сразу бы писали екзим на перле. смешнее было бы

anonymous
()
Ответ на: комментарий от anonymous

по умолчанию perl в exim не включается. Все зависит от того, как сервер собрать. Кто-то любит извращения? Кто ж запрещает.

Ezzh
() автор топика

Что-то эта система не кажется такой уж простой, особенно смущает использование sql.

У меня уже давно используется следующая связка

exim+exiscan+clamv+spamassassin+courier

exim и courier ходят за пользователями в одну и туже базу (Berkeley DB)

пароли exim (smtp-auth) и courier тоже берут из этой базы.

swapper
()
Ответ на: комментарий от swapper

> Имху можно с помощью грязных хаков
Ну, не знаю...
Там есть lookup на stdout внешнего бинарника.
Реализуется встроенным макроязыком и через acl много чего...
Грязные хаки мне не нужны с четвёртой версии.

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

Подскажите пожалуйста тип lookup'a, если не сложно. Я бы тогда сам не отказался поместить его в acl_smtp_data и блокировать прием сообщений с определенным содержимым.

Ezzh
() автор топика
Ответ на: комментарий от swapper

to swapper (*) (06.04.2004 18:02:34) если пользователю или группе пользователей захочется установить индивидуальные правила фильтрации, создание такого правила в вашей системе будет сложнее или проще? А если кто-то захочет иметь личный белый/черный список? Или например собрать статистику по пользователям сколько и кто получил с вечера пятницы по утро понедельника? Достаточно добавления одного триггера и одного запроса... простота относительна - все зависит от потребностей К сожалению, я не ненавижу пользоваться парсерами логов, особенно тех логов которые очень быстро растут. SQL - для меня решение.

Фронтэнд к этой БД сделать - несколько дней, зато юзеры буду счастливы, что могут сами менять настройки, а тот кто управляет, будет доволен, что есть возможность просто контролировать сложную (хотя, для кого как, конечно) систему.

и вообще в описании написал, что система _проста для управления_, а не _простая_ система =)

Ezzh
() автор топика

Интересно было бы услышать сравнение со связкой Postfix/Courier-IMAP/MySQL.

-- alxz

anonymous
()
Ответ на: комментарий от anonymous

>И как они помогают в случае взрыва ракеты на старте? ;)

В таком случае взлетает дублирующая ракета с дублирующей пусковой установки ;-) (или с дублирующего космодрома с дублирующим космонавтом)

walrus
()
Ответ на: комментарий от walrus

Кстати есть AmavisNewSQL SquirrelMail Plugin Amavis - немного хака и он начнет приятно работать... http://freshmeat.net/projects/amavisnewsql/

>В таком случае взлетает дублирующая ракета с дублирующей пусковой установки ;-) (или с дублирующего космодрома с дублирующим космонавтом)

Угу. Верно. Каждый сервер - ракета. Если один взорвется - остальные пашут. Массовый взрыв маловероятен и скорее всего это будет акт терроризма.

Ezzh
() автор топика
Ответ на: комментарий от Ezzh

Я у себя не делал индивидуальные правила фильтрации, мне это не надо было, но если вы под фильтрацией понимается написание .forward, то туда пользователей лучше не пускать, а то почта к ним может вообще не доходить :). Насчет личных белых/черных списков я не думаю что это будет сложно реализовать, просто политка у нас такая что пусть лучше спам придет чем не дойдет 1-2 важных письма. А логи можно парсить и складывать в туже db (bdb). Использование какой либо SQL базы усложняет систему в общем и подвергает лишней опасности. Что будет если SQL демон перестанет работать. BDB в этом случая более надежная, а мне это главное.

swapper
()
Ответ на: комментарий от swapper

Все хранится в БД вообще - локально никто ничего не пишет. А правила для пользователя, это запись в БД, которую мы можем править сами, а можем отдать на растерзание пользователю. Эта запись отвечает на такие вопросы:
блокировать вирус?
блокировать спам?
блокировать забаненые файлы?
блокировать почту с битыми заголовками?
проверять ли почту на вирус?
проверять ли почту на спам?
проверять ли почту на забаненый файл?
проверять ли почту на заголовок?
модифицировать ли заголовок при обнаружении спама?
расположение приемника для спама
уровень спама, когда добавляется заголовок: Может быть спам
уровень спама, когда добавляется заголовок: Точно спам
уровень спама, когда блокируется письмо, если это не противоречит предыдущим правилам

упадет БД? А если упадет сервер? Лучше тогда все записи делать на глиняных дощечках (на них информация может храниться несколько тысяч лет) и с компьютером дела не иметь.

Ezzh
() автор топика
Ответ на: комментарий от Ezzh

Каждый делает как ЕМУ нравится. Я ж не спорю может вам так удобнее.
Мне удобнее чтобы было в bdb, так как у меня много виртуальных доменов и пользователей. И мне не надо ставить SQL-сервер на mail-сервере. Надеюсь не будем спорить от том какая база быстрее BDB или какой либо SQL.



swapper
()
Ответ на: комментарий от swapper

x_virtual_delivery:
  driver = smtp
#  serialize_hosts = *
  hosts_avoid_tls = *
  hosts = ${run{/usr/local/sbin/getip ${extract{uid}{${extract{2}{|}{${lookup{*@
${lookup{$domain} dbm{/usr/local/etc/exim/mail/localdomains.db}}} dbmnz*@{/usr/l
ocal/etc/userdb.dat}}}}}}}{$value}{fail}}
  hosts_override = true


тут run{} - и есть тот лукап.
Это у меня хитрая транспортировка по локалке :)

Shadow ★★★★★
()
Ответ на: комментарий от swapper

полностью согласен, но задело

>Что будет если SQL демон перестанет работать. BDB в этом случая более надежная, а мне это главное.

если бы вы написали, что для вас более BDB удобна, чем SQL, то я даже бы не отвечал на предыдущий топик ;)

Ezzh
() автор топика
Ответ на: комментарий от Shadow

А вот мой local delivery

FILEOFUSERS = /path/to/db.dat

local_delivery:
driver = appendfile
directory = ${extract{mail}{${tr{${lookup{$local_part@$domain}dbmnz{FILEOFUSERS}}}{|}{ }}}}
maildir_format
mode_fail_narrower = false
delivery_date_add = true
envelope_to_add = true
return_path_add = true
mode = 0660
user = mailnull
group = mail

quota = ${extract{quota}{${tr{${lookup{$local_part@$domain}dbmnz{FILEOFUSERS}}}{|}{ }}}}
quota_directory = ${extract{mail}{${tr{${lookup{$local_part@$domain}dbmnz{FILEOFUSERS}}}{|}{ }}}}/new
quota_filecount = ${extract{quotafiles}{${tr{${lookup{$local_part@$domain}dbmnz{FILEOFUSERS}}}{|}{ }}}}
quota_warn_threshold = 80%
quota_warn_message = "\
To: $local_part@$domain\n\
Subject: Quota exceeding\n\n\
This message is automatically created by mail delivery software.\n\n\
The size of your mailbox has exceeded a warning threshold that is\n\
set by the system administrator.\n"


Судя по путям к файлам FreeBSD стоит, мои поздравления

swapper
()
Ответ на: комментарий от Ezzh

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

anonymous
()
Ответ на: комментарий от abramoff

>Раз уж тут собрались люди, знающие exim, скажите пожалуйста, может ли exim вызвать внешний фильтр (некий бинарник), отдать ему полученное письмо, и, в зависимости, от ответа фильтра, ответить smtp-клиенту соответствующим кодом на DATA? Спасибо. abramoff (*) (06.04.2004 16:45:34)

да может http://duncanthrax.net/exiscan-acl/exiscan-acl-spec.txt

cmdline This is the keyword for the generic command line scanner interface. It can be used to attach virus scanners that are invoked on the shell. This scanner type takes 3 mantadory options: - full path and name of the scanner binary, with all command line options and a placeholder (%s) for the directory to scan. - A regular expression to match against the STDOUT and STDERR output of the virus scanner. If the expression matches, a virus was found. You must make absolutely sure that this expression only matches on "virus found". This is called the "trigger" expression. - Another regular expression, containing exactly ONE pair of braces, to match the name of the virus found in the scanners output. This is called the "name" expression.

anonymous
()
Ответ на: комментарий от abramoff

>Раз уж тут собрались люди, знающие exim, скажите пожалуйста, может ли exim вызвать внешний фильтр (некий бинарник), отдать ему полученное письмо, и, в зависимости, от ответа фильтра, ответить smtp-клиенту соответствующим кодом на DATA? Спасибо.
abramoff (*) (06.04.2004 16:45:34)

да может
http://duncanthrax.net/exiscan-acl/exiscan-acl-spec.txt

  cmdline     This is the keyword for the generic command line
              scanner  interface.  It can  be  used to  attach
              virus scanners  that are  invoked on  the shell.
              This scanner type takes 3 mantadory options:
              
              - full path and name of the scanner binary, with
                all  command  line options  and  a placeholder
                (%s) for the directory to scan.
                
              - A  regular  expression  to  match  against the
                STDOUT and STDERR output of the virus scanner.
                If the expression matches, a virus was  found.
                You  must  make  absolutely  sure  that   this
                expression only matches on "virus found". This
                is called the "trigger" expression.
                
              - Another regular expression, containing exactly
                ONE pair of braces,  to match the name  of the
                virus found  in the  scanners output.  This is
                called the "name" expression.

anonymous
()

А как dbmail-imapd & PostgreSQL себя ведет если почты многовато? Ну примерно 30Gb. У отдельных пользователей может быть до гектара почты на IMAP.

И поддерживает ли dbmail shared folders?

MrKooll ★★★
()
Ответ на: комментарий от MrKooll

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

1.2.x shared folders не держит - по крайней мере, упоминания про эту фичу не видел Можно эмулировать с помощью триггеров pg, вот только вопрос: а оно нужно?

PS после прочтения док по dbmail у меня сложилось впечатление, что это решение для загруженных систем. imho у dbmail проблем с критическими нагрузками быть не должно.

Ezzh
() автор топика
Ответ на: комментарий от Ezzh

> 1.2.x shared folders не держит - по крайней мере, упоминания про эту фичу не видел Можно эмулировать с помощью триггеров pg, вот только вопрос: а оно нужно?

Оно нужно обязательно. Без него работать проблематично. Да и плодиться мыло начинает безмерно :(

Просто я доку просмотрел и упоминания shared folders не нашел. Поэтому и спросил.

MrKooll ★★★
()
Ответ на: комментарий от swapper

т.е. mysql с bdb backendом - самый быстрый sql ?

anonymous
()
Ответ на: комментарий от MrKooll

shared folders в 2.x есть, но на данный момент разработчики добрались только до версии 2.0RC4

Ezzh
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.