Страница 1 из 1

quota

Добавлено: 2007-08-04 13:47:09
dsergv
Уважаемые джентельмены!

Поднимаю свой первый почтовый сервер Exim+Dovecot+MySql+Clamav.
Возник вопрос. подскажите решение.
В конфиге exim-a:

Код: Выделить всё

dovecot_delivery:
  driver = pipe
  command = /usr/libexec/dovecot/deliver -d $local_part@$domain
  message_prefix =
  message_suffix =
  delivery_date_add
  envelope_to_add
  return_path_add
  log_output
  user = mail
При попытке пристегнуть сюда кусок
quota = ${lookup mysql{SELECT ... и далее

при рестарте exim-a получаем сообщение

Код: Выделить всё

  option "quota" unknown
Если этот кусок конфига переделать

Код: Выделить всё

dovecot_delivery:
  driver = appendfile
  check_string = ""
  create_directory
...........................................
и добавляем строки, касающиеся квоты
quota = ${lookup mysql{SELECT ... и далее

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

Re: quota

Добавлено: 2007-08-04 17:44:22
Alex Keda
Уважаемый, неплохо бы:
1. использовать кнопочку code - листинги были нечитаемы
2. давать вывод uname -a
================
если OC - FreeBSD - то рекомендую собрать из портов. Тогда будет работать.
Почему - не скажу. Думай :)))

Re: quota

Добавлено: 2007-08-07 13:51:09
dsergv
Исправлюсь. С половиной проблемы разобрался - при сборке не включил поддержку maildir. Пересобрал, почта стала разноситься и даже в логах появились записи о превышении квоты. Вот только сообщения о превышении квоты отправитель не получает.

Код: Выделить всё

   quota = ${lookup mysql{SELECT quota FROM mailbox WHERE `username`='${quote_mysql:$local_part@$domain}'}{${value}M}}
   quota_size_regex = S=(\d+)$
   quota_warn_threshold = 75%
   quota_is_inclusive = no
   quota_warn_message = "To: $local_part@$domain\n\
                         From: abuse@bgf-kuban.ru\n\
                         Subject: Mailbox Full.\n\
                                . This message is automaticaly gnerated by your mail server.\n\
                                . This means, that your mailbox is 75% full. If you would \n\
                                . override this limit new mail would not be delivered to you!\n"
   return_path_add
Что я еще не включил или сделал не так?

Код: Выделить всё

[root@frw exim]# uname -a
Linux mail.my.domain 2.6.17-5-1my #1 SMP Tue Jul 24 14:55:07 MSD 2007 i686 Intel(R) Pentium(R) D CPU 3.00GHz GNU/Linux

Re: quota

Добавлено: 2007-08-09 8:31:50
dsergv
Так все-таки, поделитесь, что нужно сделать, чтобы Отправитель и собственно Получатель сообщение о переполнении ящика. У меня кроме записи в логах больше нет никаких следов переполнения ящика и сообщение в ящик попадает.

Код: Выделить всё

2007-08-09 09:15:33 1IJ0Mq-0007Yj-H2 <= serg@domain.ru H=([192.168.6.202]) [1
92.168.6.202] I=[192.168.6.11]:25 P=esmtpa A=auth_cram_md5: S=4172061 id=46BAA25
7.7030400@domain.ru from <serg@domain.ru> for quota@domain.ru
2007-08-09 09:15:33 1IJ0Mv-0007Yt-Tq <= <> R=1IJ0Mq-0007Yj-H2 U=root P=local S=5
13 from <> for quota@domain.ru
2007-08-09 09:15:33 1IJ0Mq-0007Yj-H2 => quota <quota@domain.ru> R=dovecot_use
r T=dovecot_delivery
2007-08-09 09:15:33 1IJ0Mq-0007Yj-H2 Completed
2007-08-09 09:15:33 1IJ0Mv-0007Yt-Tq == quota@domain.ru R=dovecot_user T=dove
cot_delivery defer (-22): mailbox is full (MTA-imposed quota exceeded while writ
ing to tmp/1186636533.H945295P29074.mail.domain.ru)
2007-08-09 09:15:33 1IJ0Mv-0007Yt-Tq ** quota@domain.ru <quota@domain.ru>:
 retry timeout exceeded
2007-08-09 09:15:33 1IJ0Mv-0007Yt-Tq quota@domain.ru <quota@domain.ru>: er
ror ignored
2007-08-09 09:15:33 1IJ0Mv-0007Yt-Tq Completed

Re: quota

Добавлено: 2007-08-09 11:05:26
cyrus_user
не знаю что c dovecot, но подобную схему я пытался использовать для cyrus. также провозился, и не осилил. написал тупой скрипт. можно использовать как временный вариант (у меня exim и cyrus на одной машинке):

Код: Выделить всё

#после алиасных роутеров
quota_router:                                                                                                           
no_verify                                                                                                               
driver  = redirect                                                                                                      
data    = "${if eqi {${perl{quotacheck}}} {yes} {:fail:Mailbox Is Full. Overquota.} {$local_part@$domain}}"             
allow_fail 
ну и сам код:

Код: Выделить всё

sub quotacheck() {use IMAP::Admin;                                                                                                        
my $user_box = Exim::expand_string('$local_part');                                                                      
my $imap = IMAP::Admin->new('Server' => 'localhost', 'Login' => 'quotasee', 'Password'  => 'quotasee_password', 'Port' => 143,                                                                         'Separator' => ".",                                                                         );                                                                                          
my @quota = $imap->get_quota("user/$user_box");                                                                                     
if($quota[2]) {if($quota[1]*100/$quota[2]>=90) { return "yes";} else {return "fail";}}
$imap->close; }         
отправитель получает отлуп при заполненности ящика >=90%, получатель ничего не получает, но это легко доделать. по поводу секьюрности - скрипт как и exim исполняются от одного юзера, так что если и удастся узнать пароль quotasee (он с минимальными правами в cyrus) то это ничего не даст.

Re: quota

Добавлено: 2007-08-09 14:54:35
dsergv
Методом научного тыка: здесь на форуме попадалась тема, что postfixadmin не отсылает письма от администратора (действительно не отсылает). Для лечения ситуациии необходимо сделать так

Код: Выделить всё

# Принудительная синхронизация. Если отправитель
# торопится подавать команды, не дождавшись ответа,
# то он посылается далеко и надолго :) Немного,
# спам режется.
# smtp_enforce_sync = true
smtp_enforce_sync = false

Оказалось, в обоих случаях ноги растут из одного и того же места. При установке smtp_enforce_sync в false и из postfixadmin-а уходят письма и exim отправляет отправителю сообщение о переполнении ящика получателя

Код: Выделить всё

This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

  quota@domain.ru
    mailbox is full: retry timeout exceeded

------ This is a copy of the message, including all the headers. ------
------ The body of the message is 4171331 characters long; only the first
------ 73728 or so are included here.

Return-path: <serg@domain.ru>
Received: from [192.168.6.202]
	by mail.domain.ru with esmtpa (Exim 4.67)
.....................................................................................
Теперь бы добиться, чтоб и получатель, у которого ящик забит хламом, получал соответствующее сообщение.