URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 84344
[ Назад ]

Исходное сообщение
"Sendmail. Ограничение размера почтового ящика."

Отправлено sasch , 04-Мрт-09 12:22 
День добрый коллеги. Столкнулся с задачей ограничения размера почтового ящика на сервере с sendmail.
Настроил квоты пользователей, однако требуется чтобы серверу отправителя давался отлуп типа: "452 mailbox size limit reached". А то иначе все эти письма будут заcтревать в очереди в геометрической прогрессии.

Как я понимаю надо добавить в sendmail.cf вызов программки, которая на этапе RCPT TO должна будет проверять размер файла ящика. Либо же как-то шаманить с procmail.

Буду рад любым советам или примерам.


Содержание

Сообщения в этом обсуждении
"Sendmail. Ограничение размера почтового ящика."
Отправлено Medlar , 04-Мрт-09 13:11 
>День добрый коллеги. Столкнулся с задачей ограничения размера почтового ящика на сервере
>с sendmail.
>Настроил квоты пользователей, однако требуется чтобы серверу отправителя давался отлуп типа: "452
>mailbox size limit reached". А то иначе все эти письма будут
>заcтревать в очереди в геометрической прогрессии.

Я не использую такое квотирование, поэтому уточню:
вы хотите сказать, что если письмо пришло в ящик, размер которого превышает допустимый,
то письмо кладется в очередь? А сам юзер при этом будет в курсе, что надо ящик почистить?
И как долго это письмо будет находится в очереди - пока ящик не очистится?

>Как я понимаю надо добавить в sendmail.cf вызов программки, которая на этапе
>RCPT TO должна будет проверять размер файла ящика. Либо же как-то
>шаманить с procmail.
>Буду рад любым советам или примерам.

http://www.anrb.ru/linux/sendm.html#3.14

У меня это сделано так примитивно, что неловко рассказывать, но тем не менее.
По крону скриптом проверяются  размеры ящиков, если значение подбирается к предельному, то высылается первое предупреждение, через час - второе,
как только перевалили за максимум - заносится запись в access c тэгом To:


"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 04-Мрт-09 13:28 
Я хочу сделать так, чтобы в момент SMTP сессии во время приема получателя в поле RCPT TO какая-то подпрограмма искала по данному логину имя файла в /var/mail, сравнивала значение размера файла с каким-либо значением и в зависимости от результата либо дальше продолжала прием сообщения либо давала удаленному пользователю отлуп 452 "mailbox size limit reached".


"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 04-Мрт-09 14:16 
или даже просто мой сендмайл давал отлуп с формулировкой "mailbox is full"

"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 04-Мрт-09 15:04 
вроде как procmail может такое, может кто поделится куском конфига?


"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 05-Мрт-09 08:45 
Никто в sendmail не ограничивает размер ящиков пользователей?


"Sendmail. Ограничение размера почтового ящика."
Отправлено Ziggy Stardust , 05-Мрт-09 08:49 
>Никто в sendmail не ограничивает размер ящиков пользователей?

У меня cyrus-imap этим занимается.

Проверка из сендмайла через lmtp-сокет настраивается.



"Sendmail. Ограничение размера почтового ящика."
Отправлено A Clockwork Orange , 05-Мрт-09 10:06 
>>Никто в sendmail не ограничивает размер ящиков пользователей?
>
>У меня cyrus-imap этим занимается.
>
>Проверка из сендмайла через lmtp-сокет настраивается.

Можно по-подробнее?


"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 05-Мрт-09 11:04 
>>>Никто в sendmail не ограничивает размер ящиков пользователей?
>>
>>У меня cyrus-imap этим занимается.
>>
>>Проверка из сендмайла через lmtp-сокет настраивается.
>
>Можно по-подробнее?

Если не сложно, то с примерами конфигов.


"Sendmail. Ограничение размера почтового ящика."
Отправлено Ziggy Stardust , 05-Мрт-09 11:08 
>>>Никто в sendmail не ограничивает размер ящиков пользователей?
>>У меня cyrus-imap этим занимается.
>>Проверка из сендмайла через lmtp-сокет настраивается.
>Можно по-подробнее?

Вот хауту из бздишного порта. /usr/local/share/doc/sendmail/CYRUS_LOOKUP:

       CYRUS MAILBOX LOOKUP FOR SENDMAIL
       ---------------------------------

You have enabled modifications for sendmail for looking up
whether a cyrus (2.2.3+) mailbox exists and is under quota
before accepting any mail to be relayed to cyrus.

They are based on the idea and work by

Andrzej Filip, http://anfi.homeunix.net/sendmail/rtcyrus2.html
and
Mike Boev, http://tric.ru/users/mike/ckuser_cyrus/

Please, use these urls to learn all configuration details
(although a quick recipe is provided below) and may be to give
credits to the authors.
******************************************************************
IMPORTANT:
Now that the mrs_cyrus.m4 has been updated, you may need to adjust
the modifications you made to your .mc file if you used the old one!
See http://anfi.homeunix.net/sendmail/rtcyrus2.html for current
installation instructions.
******************************************************************

HOW TO :
---------

0.  Build the `mail/sendmail' sendmail port with
        SENDMAIL_WITH_SOCKETMAP=yes SENDMAIL_WITH_CYRUSLOOKUP=yes
    This is what you've just obviously done, unless you are just browsing the
    ports tree. To stick with these settings, you can place something like
    the following in your `/etc/make.conf'.

PORTSDIR?=      /usr/ports
.if ${.CURDIR} == ${PORTSDIR}/mail/sendmail
SENDMAIL_WITH_CYRUSLOOKUP=      yes
SENDMAIL_WITH_SOCKETMAP=        yes
# possibly other sendmail knobs here too.
.endif

    You should have also installed and configured Cyrus IMAP server,
    version 2.2.3 or higher. Not the worst idea is to utilize the
    `mail/cyrus-imapd22' port.

1.  Insert the following lines to the SERVICES sections of `cyrus.conf'.
    By default, the port installs it to `/usr/local/etc'.

    # Sendmail socket map smmapd(8)
    smmap        cmd="smmapd"  listen="/var/imap/socket/smmapd" prefork=0

    A SIGHUP would make the Cyrus master(8) process catch this change
    on-the-fly. Please, also note, that if sendmail and cyrus run on
    separate machines, you will obviously need to modify this line
    and a couple of others.

2.  As per the `install-configure' from Cyrus IMAP server's documentation,
    in the simplest case, you added:

    define(`confLOCAL_MAILER', `cyrusv2')dnl
    MAILER(`cyrusv2')dnl

    to your sendmail's .mc file to make local delivery to Cyrus mailboxes.
    Now, simply add (somewhere near other FEATURES, before MAILER lines):

    FEATURE(`ckuser_cyrus')dnl

    for sendmail to start rejecting local addresses for nonexisting and
    full mailboxes. Rebuild your sendmail.cf, restart sendmail, and enjoy!

    If your configuration is more complicated than just defining Cyrus
    as your local mailer, read Andrzej's article. It covers more of the
    other cases.

******************************************************************

2004, September 16th
Michael O. Boev,
mike@tric.ru.



"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 05-Мрт-09 12:13 
Хмм..у меня после добавления строки  FEATURE(`ckuser_cyrus')dnl в файл sendmail.mc  и попытке последующей сборки sendmail.cf получилось вот что:

[root@mail ~]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
/etc/mail/sendmail.mc:205: m4: cannot open `/usr/share/sendmail-cf/feature/ckuser_cyrus.m4': No such file or directory

(RHEL 5.2, sendmail Sendmail 8.13.8)


"Sendmail. Ограничение размера почтового ящика."
Отправлено Ziggy Stardust , 05-Мрт-09 12:21 
>Хмм..у меня после добавления строки  FEATURE(`ckuser_cyrus')dnl в файл sendmail.mc  и
>попытке последующей сборки sendmail.cf получилось вот что:
>[root@mail ~]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
>/etc/mail/sendmail.mc:205: m4: cannot open `/usr/share/sendmail-cf/feature/ckuser_cyrus.m4': No such file or directory

Проверяйте где у вас сендмейл m4-файлы хранит. И добавил ли туда цирус при установке ckuser_cyrus.m4.

>(RHEL 5.2, sendmail Sendmail 8.13.8)

Ничего не скажу. С линуксами давно дела не имел и почту ни разу не поднимал. Принципиальной разницы от фри быть не должно по идее.



"Sendmail. Ограничение размера почтового ящика."
Отправлено Ziggy Stardust , 05-Мрт-09 12:25 
>Ничего не скажу. С линуксами давно дела не имел и почту ни
>разу не поднимал. Принципиальной разницы от фри быть не должно по
>идее.

Хотя поглядел внимательнее. Во фревом порте эти файлы в виде патчиков приложены.


"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 05-Мрт-09 12:43 
>
>Хотя поглядел внимательнее. Во фревом порте эти файлы в виде патчиков приложены.
>

Вот как раз такие в Фре то патчиками приложен, а в моем линуксе find / -name ckuser* ниче не показывает.


"Sendmail. Ограничение размера почтового ящика."
Отправлено Ziggy Stardust , 05-Мрт-09 12:51 
>>Хотя поглядел внимательнее. Во фревом порте эти файлы в виде патчиков приложены.
>Вот как раз такие в Фре то патчиками приложен, а в моем
>линуксе find / -name ckuser* ниче не показывает.

http://tric.ru/users/mike/ckuser_cyrus/


"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 06-Мрт-09 09:13 
>>>Хотя поглядел внимательнее. Во фревом порте эти файлы в виде патчиков приложены.
>>Вот как раз такие в Фре то патчиками приложен, а в моем
>>линуксе find / -name ckuser* ниче не показывает.
>
>http://tric.ru/users/mike/ckuser_cyrus/

правильно ли я понимаю, что если я ставлю cyrus-imapd и в sendmail.mc прописываю:
define(`confLOCAL_MAILER', `cyrusv2')dnl
FEATURE(`ckuser_cyrus')dnl
MAILER(`cyrusv2')dnl

то все строки в sendmail.mc, где упоминается procmail (на данный момент это мой локал майлер) мне нужно закоментить ибо local mailer-ом становится тогда уже cyrus-imapd ?


"Sendmail. Ограничение размера почтового ящика."
Отправлено Ziggy Stardust , 06-Мрт-09 10:02 
>правильно ли я понимаю, что если я ставлю cyrus-imapd и в sendmail.mc
>прописываю:
>define(`confLOCAL_MAILER', `cyrusv2')dnl
>FEATURE(`ckuser_cyrus')dnl
>MAILER(`cyrusv2')dnl
>
>то все строки в sendmail.mc, где упоминается procmail (на данный момент это
>мой локал майлер) мне нужно закоментить ибо local mailer-ом становится тогда
>уже cyrus-imapd ?

Да, правильно.


"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 10-Мрт-09 10:18 
>>Никто в sendmail не ограничивает размер ящиков пользователей?
>
>У меня cyrus-imap этим занимается.
>
>Проверка из сендмайла через lmtp-сокет настраивается.

А какой МТА у Вас установлен ? Вы используете cyrus-imapd для получения почты клиентами?


"Sendmail. Ограничение размера почтового ящика."
Отправлено Ziggy Stardust , 10-Мрт-09 10:29 
> А какой МТА у Вас установлен ?

sendmail 8.14.x

> Вы используете cyrus-imapd для получения почты клиентами?

Да.


"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 10-Мрт-09 12:38 
>> А какой МТА у Вас установлен ?
>
>sendmail 8.14.x
>
>> Вы используете cyrus-imapd для получения почты клиентами?
>
>Да.

А можно вас попросить выложить кусок конфига sendmail.mc и конфиги cyrus.conf и imapd.conf.
Просто никак не соображу как грамотно отключить майлер procmail и подключить майлер cyrus и чтобы он еще проверял размер почтового ящика пользователя.


"Sendmail. Ограничение размера почтового ящика."
Отправлено Ziggy Stardust , 10-Мрт-09 12:49 
>А можно вас попросить выложить кусок конфига sendmail.mc

FEATURE(`ckuser_cyrus')dnl
define(`CYRUSV2_MAILER_ARGS', `FILE /usr/local/cyrus/socket/lmtp')dnl
define(`confLOCAL_MAILER', `cyrusv2')dnl

MAILER(`cyrusv2')dnl
MAILER(local)dnl
MAILER(smtp)dnl

Все остальное по вкусу.

> cyrus.conf

Здесь нужно только сокет включить:

lmtpunix      cmd="lmtpd" listen="/usr/local/cyrus/socket/lmtp" prefork=0
и
smmap         cmd="smmapd" listen="/usr/local/cyrus/socket/smmapd" prefork=0

> imapd.conf.

Здесь просто сокет прописать:

lmtpsocket: /usr/local/cyrus/socket/lmtp
и
lmtp_over_quota_perm_failure: yes


"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 10-Мрт-09 13:42 
Спасибо большое, внес соответствующие изменения...только столкнулся с проблемой.
У меня то пользователи почты - локальные юзеры операционной системы (читай те кто есть в /etc/shadow). И теперь когда зупуская сендмайл с таким конфигом то cyrus пытается искат ьсвоих цирусовских пользователей с такими логинами (а в цирусе то я пользователей не делал ибо мне надо чтобы письма клались локальным пользователям в ящики типа /var/mail/pupkin) и в логи валятся ошибки:

Mar 10 14:24:33 hostname sendmail[17016]: n2AAO9k6017016: <rahil83@domain.ru>... Mailbox is not available.
Mar 10 14:24:33 hostname smmap[17197]: verify_user(user.rahil83) failed: Mailbox does not exist

Как сделать чтобы цирус майлер клал письма в локальные ящики а не цирусовские?


"Sendmail. Ограничение размера почтового ящика."
Отправлено Ziggy Stardust , 10-Мрт-09 13:51 
>[оверквотинг удален]
>конфигом то cyrus пытается искат ьсвоих цирусовских пользователей с такими логинами
>(а в цирусе то я пользователей не делал ибо мне надо
>чтобы письма клались локальным пользователям в ящики типа /var/mail/pupkin) и в
>логи валятся ошибки:
>
>Mar 10 14:24:33 hostname sendmail[17016]: n2AAO9k6017016: <rahil83@domain.ru>... Mailbox is not available.
>Mar 10 14:24:33 hostname smmap[17197]: verify_user(user.rahil83) failed: Mailbox does not exist
>
>Как сделать чтобы цирус майлер клал письма в локальные ящики а не
>цирусовские?

Думаю, что никак не сделать.
А чем цирусовские то не устраивают?


"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 10-Мрт-09 13:59 
>Думаю, что никак не сделать.
>А чем цирусовские то не устраивают?

Да не то чтобы не устраивают. Просто изначально настроил sendmail (+procmail) + qpopper. А потом встал вопрос ограничения размера ящиков. Вот теперь походу надо думать как всех этих пользователей в цирус мигрировать незаметно.


"Sendmail. Ограничение размера почтового ящика."
Отправлено angra , 10-Мрт-09 14:02 
Ну если думать о миграции, то почему не сразу в сторону exim+dovecot ;)

"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 10-Мрт-09 14:26 
>Ну если думать о миграции, то почему не сразу в сторону exim+dovecot
>;)

Игра не будет стоить свеч, если сейчас с sendmail все переделывать в exim. Ибо кол-во пользователей сервера мало и будущая поддержка его непредвидится особо, так - атавизм.
Мне то по сути надо всего лишь ограничить размер ящиков пользователей с нормальными отлупами при достижении лимита.


"Sendmail. Ограничение размера почтового ящика."
Отправлено Ziggy Stardust , 10-Мрт-09 14:45 
>>Думаю, что никак не сделать.
>>А чем цирусовские то не устраивают?
>
>Да не то чтобы не устраивают. Просто изначально настроил sendmail (+procmail) +
>qpopper. А потом встал вопрос ограничения размера ящиков. Вот теперь походу
>надо думать как всех этих пользователей в цирус мигрировать незаметно.

Ну это не проблема.

В цирусе создаете нужные почтовые ящики. Аутентификацию цирусу настраиваете через PAM (если я правильно помню, cyrus-sasl не умеет напрямую с системными пользователями работать). В PAM'е настраиваете аутентификацию через системные аккаунты.

Если все правильно сделать, то пользователи даже не заметят, что что-то поменялось.



"Sendmail. Ограничение размера почтового ящика."
Отправлено sasch , 12-Мрт-09 09:01 
>[оверквотинг удален]
>>надо думать как всех этих пользователей в цирус мигрировать незаметно.
>
>Ну это не проблема.
>
>В цирусе создаете нужные почтовые ящики. Аутентификацию цирусу настраиваете через PAM (если
>я правильно помню, cyrus-sasl не умеет напрямую с системными пользователями работать).
>В PAM'е настраиваете аутентификацию через системные аккаунты.
>
>Если все правильно сделать, то пользователи даже не заметят, что что-то поменялось.
>

Вообщем подумал подумал и решил что ради по-сути пары пользователей переводить все на цирус того н естоит и ограничил размер ящиков пользователей квотами + в procmail-е убрал опцию fail softly, в итоге получилось "дешево и сердито".