День добрый коллеги. Столкнулся с задачей ограничения размера почтового ящика на сервере с sendmail.
Настроил квоты пользователей, однако требуется чтобы серверу отправителя давался отлуп типа: "452 mailbox size limit reached". А то иначе все эти письма будут заcтревать в очереди в геометрической прогрессии.Как я понимаю надо добавить в sendmail.cf вызов программки, которая на этапе RCPT TO должна будет проверять размер файла ящика. Либо же как-то шаманить с procmail.
Буду рад любым советам или примерам.
>День добрый коллеги. Столкнулся с задачей ограничения размера почтового ящика на сервере
>с sendmail.
>Настроил квоты пользователей, однако требуется чтобы серверу отправителя давался отлуп типа: "452
>mailbox size limit reached". А то иначе все эти письма будут
>заcтревать в очереди в геометрической прогрессии.Я не использую такое квотирование, поэтому уточню:
вы хотите сказать, что если письмо пришло в ящик, размер которого превышает допустимый,
то письмо кладется в очередь? А сам юзер при этом будет в курсе, что надо ящик почистить?
И как долго это письмо будет находится в очереди - пока ящик не очистится?>Как я понимаю надо добавить в sendmail.cf вызов программки, которая на этапе
>RCPT TO должна будет проверять размер файла ящика. Либо же как-то
>шаманить с procmail.
>Буду рад любым советам или примерам.http://www.anrb.ru/linux/sendm.html#3.14
У меня это сделано так примитивно, что неловко рассказывать, но тем не менее.
По крону скриптом проверяются размеры ящиков, если значение подбирается к предельному, то высылается первое предупреждение, через час - второе,
как только перевалили за максимум - заносится запись в access c тэгом To:
Я хочу сделать так, чтобы в момент SMTP сессии во время приема получателя в поле RCPT TO какая-то подпрограмма искала по данному логину имя файла в /var/mail, сравнивала значение размера файла с каким-либо значением и в зависимости от результата либо дальше продолжала прием сообщения либо давала удаленному пользователю отлуп 452 "mailbox size limit reached".
или даже просто мой сендмайл давал отлуп с формулировкой "mailbox is full"
вроде как procmail может такое, может кто поделится куском конфига?
Никто в sendmail не ограничивает размер ящиков пользователей?
>Никто в sendmail не ограничивает размер ящиков пользователей?У меня cyrus-imap этим занимается.
Проверка из сендмайла через lmtp-сокет настраивается.
>>Никто в sendmail не ограничивает размер ящиков пользователей?
>
>У меня cyrus-imap этим занимается.
>
>Проверка из сендмайла через lmtp-сокет настраивается.Можно по-подробнее?
>>>Никто в sendmail не ограничивает размер ящиков пользователей?
>>
>>У меня cyrus-imap этим занимается.
>>
>>Проверка из сендмайла через lmtp-сокет настраивается.
>
>Можно по-подробнее?Если не сложно, то с примерами конфигов.
>>>Никто в 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.
.endifYou 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=0A 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')dnlto 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.
Хмм..у меня после добавления строки 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)
>Хмм..у меня после добавления строки 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)
Ничего не скажу. С линуксами давно дела не имел и почту ни разу не поднимал. Принципиальной разницы от фри быть не должно по идее.
>Ничего не скажу. С линуксами давно дела не имел и почту ни
>разу не поднимал. Принципиальной разницы от фри быть не должно по
>идее.Хотя поглядел внимательнее. Во фревом порте эти файлы в виде патчиков приложены.
>
>Хотя поглядел внимательнее. Во фревом порте эти файлы в виде патчиков приложены.
>Вот как раз такие в Фре то патчиками приложен, а в моем линуксе find / -name ckuser* ниче не показывает.
>>Хотя поглядел внимательнее. Во фревом порте эти файлы в виде патчиков приложены.
>Вот как раз такие в Фре то патчиками приложен, а в моем
>линуксе find / -name ckuser* ниче не показывает.http://tric.ru/users/mike/ckuser_cyrus/
>>>Хотя поглядел внимательнее. Во фревом порте эти файлы в виде патчиков приложены.
>>Вот как раз такие в Фре то патчиками приложен, а в моем
>>линуксе 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 ?
>правильно ли я понимаю, что если я ставлю cyrus-imapd и в sendmail.mc
>прописываю:
>define(`confLOCAL_MAILER', `cyrusv2')dnl
>FEATURE(`ckuser_cyrus')dnl
>MAILER(`cyrusv2')dnl
>
>то все строки в sendmail.mc, где упоминается procmail (на данный момент это
>мой локал майлер) мне нужно закоментить ибо local mailer-ом становится тогда
>уже cyrus-imapd ?Да, правильно.
>>Никто в sendmail не ограничивает размер ящиков пользователей?
>
>У меня cyrus-imap этим занимается.
>
>Проверка из сендмайла через lmtp-сокет настраивается.А какой МТА у Вас установлен ? Вы используете cyrus-imapd для получения почты клиентами?
> А какой МТА у Вас установлен ?sendmail 8.14.x
> Вы используете cyrus-imapd для получения почты клиентами?
Да.
>> А какой МТА у Вас установлен ?
>
>sendmail 8.14.x
>
>> Вы используете cyrus-imapd для получения почты клиентами?
>
>Да.А можно вас попросить выложить кусок конфига sendmail.mc и конфиги cyrus.conf и imapd.conf.
Просто никак не соображу как грамотно отключить майлер procmail и подключить майлер cyrus и чтобы он еще проверял размер почтового ящика пользователя.
>А можно вас попросить выложить кусок конфига sendmail.mcFEATURE(`ckuser_cyrus')dnl
define(`CYRUSV2_MAILER_ARGS', `FILE /usr/local/cyrus/socket/lmtp')dnl
define(`confLOCAL_MAILER', `cyrusv2')dnlMAILER(`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
Спасибо большое, внес соответствующие изменения...только столкнулся с проблемой.
У меня то пользователи почты - локальные юзеры операционной системы (читай те кто есть в /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Как сделать чтобы цирус майлер клал письма в локальные ящики а не цирусовские?
>[оверквотинг удален]
>конфигом то 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 (+procmail) + qpopper. А потом встал вопрос ограничения размера ящиков. Вот теперь походу надо думать как всех этих пользователей в цирус мигрировать незаметно.
Ну если думать о миграции, то почему не сразу в сторону exim+dovecot ;)
>Ну если думать о миграции, то почему не сразу в сторону exim+dovecot
>;)Игра не будет стоить свеч, если сейчас с sendmail все переделывать в exim. Ибо кол-во пользователей сервера мало и будущая поддержка его непредвидится особо, так - атавизм.
Мне то по сути надо всего лишь ограничить размер ящиков пользователей с нормальными отлупами при достижении лимита.
>>Думаю, что никак не сделать.
>>А чем цирусовские то не устраивают?
>
>Да не то чтобы не устраивают. Просто изначально настроил sendmail (+procmail) +
>qpopper. А потом встал вопрос ограничения размера ящиков. Вот теперь походу
>надо думать как всех этих пользователей в цирус мигрировать незаметно.Ну это не проблема.
В цирусе создаете нужные почтовые ящики. Аутентификацию цирусу настраиваете через PAM (если я правильно помню, cyrus-sasl не умеет напрямую с системными пользователями работать). В PAM'е настраиваете аутентификацию через системные аккаунты.
Если все правильно сделать, то пользователи даже не заметят, что что-то поменялось.
>[оверквотинг удален]
>>надо думать как всех этих пользователей в цирус мигрировать незаметно.
>
>Ну это не проблема.
>
>В цирусе создаете нужные почтовые ящики. Аутентификацию цирусу настраиваете через PAM (если
>я правильно помню, cyrus-sasl не умеет напрямую с системными пользователями работать).
>В PAM'е настраиваете аутентификацию через системные аккаунты.
>
>Если все правильно сделать, то пользователи даже не заметят, что что-то поменялось.
>Вообщем подумал подумал и решил что ради по-сути пары пользователей переводить все на цирус того н естоит и ограничил размер ящиков пользователей квотами + в procmail-е убрал опцию fail softly, в итоге получилось "дешево и сердито".