Привет всем!Проблема состоит в следующем:
Связка exim + dovecot + openldap + procmail + clamav + spamassassin
Проблема в следующем:
Все пользователи почтовые берутся с OpenLDAP.
EXIM тоже берет их от туда, все бы хорошо, но при сортировании почты по папочкам procmail'ом он
не работает.
Суть в следующем:
почта приходит на exim, там фильтруется, проверяется на вирусы и spamassassin помечает письма X-флагом.
по этому флагу уже идет разбор пасем по папкам procmail'ом.
Напр. если письмо пришло на alex@localhost, то оно помечается как спам, и кидаеться пользователю alex в патку "Спам".
Так и действительно работает, но только для системных пользователей. Те которые беруться с OpenLDAP они не проходят
procmail, так, как сам procmail не умеет работать с LDAP, ему нужны системные пользователи.Системных пользователей я заводить не собираюсь.
Вопрос в следуещем: как мне разкидовать почту в зависимости от X-заголовков или как подружить procmail c LDAP :))
Другие предложения тоже выслушаю.--- start cat configure ---
ldap_user:
driver = accept
condition = ${lookup ldap { user="cn=root,dc=firma,dc=com" pass=secret ldap://localhost/ou=Mail_Users,dc=firma,dc=com??sub?(uid=$local_part)}}
require_files = /usr/local/etc/procmailrc
transport = procmail_pipeprocmail_pipe:
driver = pipe
delivery_date_add = true
envelope_to_add = true
return_path_add = true
command = /usr/local/bin/procmail -f
user = ${local_part}
group = mail--- end cat configure ---
Тут все просто. При отправке почты, exim смотрит в LDAP есть ли такой, если есть то он передает письмо на переработку procmail.
--- start cat procmailrc---
MAILDIR=$HOME/mail
LOGFILE=/var/log/procmail.log
LOGABSTRACT=no
VERBOSE=on
UMASK=007:0:
* ^X-Spam-Flag: YES
$MAILDIR$HOME/.&BCEEPwQwBDw-/--- end cat procmailrc ---
Это конфиг самого procmail'а
А это ошибка exim
Failed to find user "alex" from expanded string "${local_part}" for the procmail_pipe transport
1HJvPP-0001yI-RX == alex@localhost R=ldap_user T=procmail_pipe defer (-29): Failed to find user "alex" from expanded string "${local_part}" for the procmail_pipe transportМожно просто завести пользователей в LDAP и поправить nsswitch.conf ldap.conf nss_ldap.conf, и они будут как бы системные.
Такое тоже не подходит.Возможно кто-то знает как это можно сделать с помощью самого exim'а?
openldap-sasl-client-2.3.33
openldap-server-2.3.33
exim-4.66
procmail-3.22_6FreeBSD 6.2-RELEASE
скажу только одно: использовать procmail, когда есть exim - верх извращения.
всё что умеет procmail, умеет сам exim, только более гибко и внятно.пример анализа спам заголовка c перенаправлением в user.INBOX.spam:
spam_router:
no_verify
driver = redirect
data = "${if or { {match {$h_X-Spam:}{(?i)Yes;}}\
{match {$h_X-Oracle:}{(?i)Yes;|unknown;}}}\
{+$local_part/spam}{$local_part@$domain}}"все остальные вариации на exim.org.
больше комментариев не будет. С праздником 23ф. выдох :)
Спасибо дружище!!!!! :)
>Спасибо дружище!!!!! :)
Вопрос теперь другой:Я приминяю немножко другую проверку:
spam_router:
no_verify
driver = redirect
data = "${if match {$h_X-Spam-Flag:}{\N^YES\N}{/var/mail/$domain/$local_part/spam}{/var/mail/$domain/$local_part}}"
directory_transport = local_delivery
file_transport = local_deliveryНо как не странно, есть X-Spam-Flag: YES или нету, письма все равно валят в одну папку.
Где моя ошибка?
Что то ни кто не отвечает....Я решил эту проблему, но как то это не правильно:
spam_redirect:
driver = redirect
condition = ${if def:h_X-Spam-Flag: {1}{0}}
data = /var/mail/$domain/$local_part/.\&BCEEPwQwBDw-
file_transport = local_spam_delivery
user = dovecot
local_spam_delivery:
driver = appendfile
check_string = ""
create_directory
delivery_date_add
directory = /var/mail/$domain/$local_part/.\&BCEEPwQwBDw-
directory_mode = 770
envelope_to_add
group = mail
user = dovecot
maildir_format
maildir_tag = ,S=$message_size
message_prefix = ""
message_suffix = ""
mode = 0660
return_path_addТеперь все письма помечены как X-Spam-Flag кидаються в папку "Спам" (.\&BCEEPwQwBDw-)
Можно было поступить по другому, в spam_redirect, file_transport поставить в address_file, тогда можно вообще обойтись без local_spam_delivery, НО! при этом все письма будут кидаться не в папку а в файл.
Как правильно поступить?