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

Исходное сообщение
"OpenNews: Postfix индивидуальная квота + virtual + maildir + MySQL/PostgreSQL"

Отправлено opennews , 19-Ноя-03 08:20 
Описание процесса настройки и патч для индивидуального квотирования почтовых ящиков пользователей, аккаунты которых  хранятся в MySQL или PostgreSQL. Определение превышения квоты производится на "лету", не принимая тела сообщения (экономия трафика), но при этом и отправителю и получателю отправляется уведомление.

URL: http://vitaliy.tdauto.ru/
Новость: http://www.opennet.me/opennews/art.shtml?num=3092


Содержание

Сообщения в этом обсуждении
"Postfix индивидуальная квота + virtual + maildir + MySQLPostgreSQL"
Отправлено Roman Y. Bogdanov , 19-Ноя-03 08:20 
Коннект проходит на порт, а потом таймаут.

"Postfix индивидуальная квота + virtual + maildir + MySQLPost..."
Отправлено VD , 19-Ноя-03 11:44 
>Коннект проходит на порт, а потом таймаут.

Таймаут после чего? сразу после коннекта? Патч включается только после
RCPT TO:


"Postfix индивидуальная квота + virtual + maildir + MySQLPost..."
Отправлено ViD , 19-Ноя-03 14:52 
Устранил баг(смотри ниже), возможно причина была в нем... хотя вряд ли.
В любом случае по подробнее.

"Postfix индивидуальная квота + virtual + maildir + MySQL/PostgreSQL"
Отправлено HFSC , 19-Ноя-03 11:15 
не ставится вместе с ssl патчем, без альясов не работает,
невозможно полностью отключить квоту для virtual -  начинает жаловаться  
fatal: bad string length (0 < 1):
virtual_quota_user_message =

"Postfix индивидуальная квота + virtual + maildir + MySQL/Pos..."
Отправлено VD , 19-Ноя-03 11:42 
Ясно, огромное спасибо.. сейчас поправлю.
>невозможно полностью отключить квоту для virtual -  начинает >жаловаться  
>fatal: bad string length (0 < 1):
Вот так:  
virtual_quota_user_bounce = no
virtual_quota_user_message = /.../.../.../ваш_файл
сообщения не будет "fatal: bad string length (0 < 1):" и нотификаций не будет

>не ставится вместе с ssl патчем.
Тут точнее какой ssl патч, какой postfix

>без альясов не работает
Тоже уточните что не работает и без каких альясов?


"Postfix индивидуальная квота + virtual + maildir + MySQL/PostgreSQL"
Отправлено VD , 19-Ноя-03 12:25 
Все, вот этот КОСЯК устранен. Теперь анализирует  значение у этой эту строчки.
virtual_quota_user_message =
fatal: bad string length (0 < 1):

>без альясов не работает
Вот на эту тему, я честно говоря, немного не могу представить в чем именно может быть трабл. Я там сделал так, что квота по альясам НИКАК не пересекается с основной работой кода postfix.


"Postfix индивидуальная квота + virtual + maildir + MySQL/PostgreSQL"
Отправлено HFSC , 19-Ноя-03 15:08 
Насчет ssl: postfix 2.0.16 + tls патч pfixtls-0.8.16-2.0.16-0.9.7b
Что касается альсясов
postfix почемуто не проверял квоту если у юзера не было записи в virtual_alias_maps

"Postfix индивидуальная квота + virtual + maildir + MySQL/Pos..."
Отправлено ViD , 19-Ноя-03 15:41 
>Насчет ssl: postfix 2.0.16 + tls патч pfixtls-0.8.16-2.0.16-0.9.7b
Сейчас как раз проверяю если что выложу дополнительный патч под такую конфигурацию, вероятнее всего решаемо, если tls  ставить после... ну да сейчас выясню напищу.

>postfix почемуто не проверял квоту если у юзера не было записи в
>virtual_alias_maps

Тут ВСЕ правильно, я как раз и описывал эту ситуацию в статье по настройке. Возможно у этого юзера была запись в:
1. recipient_canonical_maps
2. canonical_maps
Да, еще внимательно на тему способа ресольва в той части описания где:
RCPT TO: <nomail@tdauto.ru>
550 <nomail@tdauto.ru>: User unknown in virtual mailbox table
Именно "...in virtual mailbox table"

А альясы, дело в том, что все альясы ресольвить и квотировать смысла нет, к примеру, все что находится в alias_maps ресольвится postfix в другом месте, и посему дабы для патча сузить все возможные вариации конфигов и соответственно НЕ НАВРЕДИТЬ, ограничился квотой юзеров по virtual_alias_maps и virtual_mailbox_maps (причем из тех юзеров что есть в virtual_alias_maps, квота в конечном итоге, распространяется только на тех юзеров, аккаунты которых есть в  virtual_mailbox_maps ибо корень квоты, произростает как раз из virtual_mailbox_maps там находятся истинные конечные потребители почты)...

Однако надо будет подумать, возможно все же есть смысл разобрать и другие варианты.



"Postfix индивидуальная квота + virtual + maildir + MySQL/PostgreSQL"
Отправлено HFSC , 19-Ноя-03 16:03 
юзер был прописан ТОЛЬКО в virtual_mailbox_maps и почта ему корректно доставлялась.
Альясы как раз и не надо было квотировать т.к у юзера их и не было, но пока не прописал юзера в альясах - квота не проверялась.
Насчет tls - quota патч ставился как до так и после применения tls патча и postfix не собирался при любом варианте

"Postfix индивидуальная квота + virtual + maildir + MySQL/Pos..."
Отправлено ViD , 19-Ноя-03 16:34 
>юзер был прописан ТОЛЬКО в virtual_mailbox_maps и почта ему корректно доставлялась.
>Альясы как раз и не надо было квотировать т.к у юзера их
>и не было, но пока не прописал юзера в альясах -
>квота не проверялась.
>Насчет tls - quota патч ставился как до так и после применения
>tls патча и postfix не собирался при любом варианте

С tls разобрался, tls патч знатно перепахивает smtpd.c и мои добавочные определения в некоторых местах "пролетают" но уже сделал... что ж сейчас попробую воспроизвести Вашу ситуацию, возможно и вправду найду косяк.
В ЛЮБОМ СЛУЧАЕ СПАСИБО за подсказки что у меня там не так, хочется же чтобы сие "детище" работало во всех ситуациях.


"Postfix индивидуальная квота + virtual + maildir + MySQL/Pos..."
Отправлено ViD , 19-Ноя-03 17:44 
>>юзер был прописан ТОЛЬКО в virtual_mailbox_maps и почта ему корректно доставлялась.
>>Альясы как раз и не надо было квотировать т.к у юзера их
>>и не было, но пока не прописал юзера в альясах -
>>квота не проверялась.

Похоже что подобное связано с представлением адресов в части доменного окончания, т.е. то что висит на альясах по определению приводятся к каноническому виду any@mydomain.com, а вот безальясники внутри постфикса могут проходить и как юзер any и как any@mydomain.com
Гммммм.... да мой bug однако, всенпременно исправимс.



"Postfix индивидуальная квота + virtual + maildir + MySQL/Pos..."
Отправлено ViD , 19-Ноя-03 19:33 
Так, ну вроде взошло, должно работать по всякому, все выложил на сайте с исправлениями.

HFSC - как Вас на сайте представить?
Хочу добавить строчку благодарности за помощь в исправлении багов.


"Postfix индивидуальная квота + virtual + maildir + MySQL/PostgreSQL"
Отправлено HFSC , 19-Ноя-03 23:48 
Все собралось,пропатчилось но осталась одна небольшая проблема: патч не делает главного - не режет по превышению квоты
В таблице в поле квота для юзера стоит 1 байт, отсылаю ему кучу писем - в логах мускула видно что поле квота проверяется, однако никакой дальнейшей реакции нету

"Postfix индивидуальная квота + virtual + maildir + MySQL/PostgreSQL"
Отправлено ViD , 20-Ноя-03 12:31 
Так, ну что же... примерно часа через три залогирую патч очень подробно и выложу, и если конечно Вы не устали, мы все же разберемся с вашим случаем. Другого способа не вижу, у меня во всех случаях он к сожалению работает.

"Postfix индивидуальная квота + virtual + maildir + MySQL/PostgreSQL"
Отправлено HFSC , 20-Ноя-03 14:42 
Проблема была в правах на virtual_maildir_base
Кусок моего конфига:
virtual_mailbox_base = /var/spool/postfix/virtual
virtual_gid_maps = static:1007
virtual_uid_maps = static:1006
транспорт virtual работал от юзера vmail с uid и gid 1006:1007, права на /var/spool/postfix/virtual
были: drwx------  5 vmail  vmail  512 20 ноя 13:25 /var/spool/postfix/virtual/
Мессаги спокойно валились в ящик,пока я не сделал
chgrp -R postfix /var/spool/postfix/virtual && __
chmod -R g+rwx /var/spool/postfix/virtual
Только после этого был создан служебный файл и мессаги стали резаться. Те можно ли сделать что бы все операции с файлами производились от юзера:группы которые указаны в virtual_uid и virtual_gid ?

"Postfix индивидуальная квота + virtual + maildir + MySQL/Pos..."
Отправлено ViD , 20-Ноя-03 19:07 
>можно ли сделать что бы все операции с файлами производились от
>юзера:группы которые указаны в virtual_uid и virtual_gid ?

Подумавши малость и прикинув что к чему пока правда в теории, думаю что можно.
Дело в том, что на три дочерних процесса - virtual, local и pipe в постфиксе можно посадить своего владельца отличного от mail_owner.
Из этих 3 процессов меня интересует только virtual, он то и ответственный за доставку мессаги, в maildir пользователя.
Можно вызывать его из smtpd, заставлять смотреть объем директории юзера и в случае превышения, отдавать ему на доставку буфер со служебной мессагой а в smtpd давать отбой, эта схема должна нормально сработать и тогда virtual_uid и virtual_gid актуальности не потеряют. Есть конечно ньюанс связанный с форматом мессаги... у меня добавляются строчки в уже имеющуюся, а virtual, если ему не сказать что это служебное, будет на каждый отбой творить уникальный файл. Но и это победимо Хех.. было бы время :)


"Postfix индивидуальная квота + virtual + maildir + MySQL/PostgreSQL"
Отправлено Norguhtar , 20-Ноя-03 15:14 
А зачем ?

"Postfix индивидуальная квота + virtual + maildir + MySQL/PostgreSQL"
Отправлено ViD , 20-Ноя-03 16:17 
Ааа вон чего... Уффф ясно :) функция в патче check_dirsize(char * maildir) выполняется от имени smtpd который соответственно работает под юзером postfix в результате всегда честно возвращает размер maildir = 0 т.к. ей ничего не разрешают смотреть.
  
Так, во первых залогировать это стоит, плюс сейчас еще опишу на сайте эту ситуацию.
Ну и подумаю еще как разрулить сей конфликт.

P.S.
HFSC :) вы чертовски терпеливый и желающий разобраться человек, сенкс :)



"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено NetScripter , 24-Ноя-03 09:17 
Сделал все как написано - игнорирует квоту. Патч лепил patch -p0 < postfix2.0pvq . Без опции -p0 не патчится. Пробовал указать в настройках mail_limit.cf несуществующее поле квоты - ругается в логах, т.е. все-таки смотрит его. Никаких доп. файлов в maildir'e не создает. Используется postfix-2.0.16+sasl2+mysql. В чем может быть проблема?


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено ViD , 24-Ноя-03 12:42 
>mail_limit.cf несуществующее поле квоты - ругается в логах, т.е. все-таки смотрит
>его. Никаких доп. файлов в maildir'e не создает. Используется postfix-2.0.16+sasl2+mysql. В
>чем может быть проблема?

Такая связка 100% рабочая и судя по симпомам, может быть то, что у smtpd нет доступа к maildir юзеров. Посмотри права на директорию virtual_maildir_base. Если она не доступна для smtpd то он как раз будет игнорировать, т.е. всегада давать размер maildir = 0... типа у юзера ничего в  maildir  нет.
А лучше main.cf дай глянуть.


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено NetScripter , 24-Ноя-03 13:47 
>Такая связка 100% рабочая и судя по симпомам, может быть то, что
>у smtpd нет доступа к maildir юзеров. Посмотри права на директорию
>virtual_maildir_base. Если она не доступна для smtpd то он как раз
>будет игнорировать, т.е. всегада давать размер maildir = 0... типа у
>юзера ничего в  maildir  нет.
>А лучше main.cf дай глянуть.

main.cf:
# Virtual quota
virtual_mailbox_limit_maps = mysql:/etc/postfix/mail_limit.cf
virtual_quota_user_bounce = yes
virtual_quota_user_message = /etc/postfix/message.cf
virtual_quota_user_message_limit = 2048

mail_owner = postfix
default_privs = nobody

broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
transport_maps = mysql:/etc/postfix/transport.cf
virtual_mailbox_base = /
virtual_uid_maps = mysql:/etc/postfix/ids.cf
virtual_gid_maps = mysql:/etc/postfix/gids.cf
virtual_mailbox_maps = mysql:/etc/postfix/aliases.cf
virtual_maps = mysql:/etc/postfix/remote_aliases.cf
relay_domains = $transport_maps
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,check_relay_domains
disable_vrfy_command = yes
smtp_sasl_security_options = noanonymous


#ls -l /var/spool/
...
drwxrwx---   25 postfix  mail         4096 Nov 23 18:44 vmail
...

#ls -l /var/spool/vmail
...
drwx------    8 1000     mail         4096 Aug 22 11:46 find-it.ru_sasha
...
Пытался различные чмоды делать onwer/group менять, полный доступ делал.

И еще, когда пытаюсь отправить почту на заведомо несуществующий адрес, он не ругается как сказано у вас на сайте.


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено NetScripter , 24-Ноя-03 13:59 
на всякий случай строчка из БД:
uid     gid     alias                  maildir                 password    md     quota
1000      12      sasha@find-it.ru      find-it.ru_sasha/      *****             /var/spool/vmail/find-it.ru_sasha/      10

"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено ViD , 24-Ноя-03 16:15 
Сегодня сооружу нечто подобное, гляну, скажу.

"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено Wizard , 03-Дек-03 12:29 
>Описание процесса настройки и патч для индивидуального квотирования почтовых ящиков пользователей, аккаунты
>которых  хранятся в MySQL или PostgreSQL. Определение превышения квоты производится
>на "лету", не принимая тела сообщения (экономия трафика), но при этом
>и отправителю и получателю отправляется уведомление.
>
>URL: http://vitaliy.tdauto.ru/
>Новость: http://www.opennet.me/opennews/art.shtml?num=3092

Вроде бы все нормально, но почему почта проходит , правда  не ложится в ящик при превышении квоты,нет сообщений о превышении квоты пользователям!


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено ViD , 07-Дек-03 17:28 

>Вроде бы все нормально, но почему почта проходит , правда  не
>ложится в ящик при превышении квоты,нет сообщений о превышении квоты пользователям!
>

Проходит до mailq?
Логи 1 соединения с ключем в master.sfg smtpd -v и main.cfg на мыло мне пжалса. Иначе ничего толком не скажу, слишком много вариантов.


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено Costas , 09-Дек-03 16:06 
Идея замечательная и реализация тоже, пробовал для связки Postfix+sasl+MySQL+courier-imap, чего то не покатила, никакой реакции, всё работало как работало, в логах тоже ничего, прибываю в раздумьях.

"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено ViD , 09-Дек-03 17:05 
>Идея замечательная и реализация тоже, пробовал для связки Postfix+sasl+MySQL+courier-imap, чего то не
>покатила, никакой реакции, всё работало как работало, в логах тоже ничего,
>прибываю в раздумьях.

логи smtpd -v (т.е. в расширенном варианте), почти уверен что там просто проблема с владельцем maildir.


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено Costas , 10-Дек-03 11:17 
>
>логи smtpd -v (т.е. в расширенном варианте), почти уверен что там просто
>проблема с владельцем maildir.

Логи смотрел, ничего нового не увидел, почта на сервак падает, в директорию юзера не падает, остальное всё без изменений


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено Costas , 10-Дек-03 11:23 
Конфиг следующий

...
virtual_mailbox_base    = /data/vmail
transport_maps          = mysql:/etc/postfix/sql/transport.cf
virtual_mailbox_maps    = mysql:/etc/postfix/sql/users.cf
virtual_alias_maps      = mysql:/etc/postfix/sql/aliases.cf
virtual_uid_maps        = mysql:/etc/postfix/sql/uids.cf
virtual_gid_maps        = mysql:/etc/postfix/sql/gids.cf

relocated_maps          = mysql:/etc/postfix/sql/relocated.cf
virtual_maps            = mysql:/etc/postfix/sql/virtual.cf

local_recipient_maps = $virtual_mailbox_maps $virtual_maps $transport_maps

virtual_mailbox_limit_maps = mysql:/etc/postfix/sql/limit.cf
virtual_quota_user_bounce = yes
virtual_quota_user_message = /etc/postfix/sql/message_limit.txt
virtual_quota_user_message_limit = 2048
...
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
default_privs = nobody
mydestination = $myhostname, localhost.$mydomain
relay_domains = $transport_maps
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/mail
smtpd_banner = $myhostname ESMTP $mail_name
...


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено Costas , 10-Дек-03 11:27 
права соответственно следующие
/data/vmail
drwxrwx---    3 postfix  postdrop     4096 Dec 10 13:30 vmail

"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено ViD , 16-Дек-03 09:29 
>права соответственно следующие
>/data/vmail
>drwxrwx---    3 postfix  postdrop    
>4096 Dec 10 13:30 vmail


Прошу прощение за задержку с ответом.
По сути вопроса, из конфига понятно что проблема может быть в следующем:

local_recipient_maps = $virtual_mailbox_maps $virtual_maps $transport_maps

На сайте я там описал как раз подобную ситуацию.

Не сработает если:
1. local_recipient_maps = /.../ваш _ файл
2. Или у пользователей путь к почте ../../vasa
3. Или virtual_mailbox_limit_maps закомментарено
4. Или поле квоты в таблице пустое
Или этот адрес есть в:
5. recipient_canonical_maps = /.../ваш _ файл
6 . canonical_maps = /.../ваш _ файл

Ваш конфиг как раз под 1 вариант.
Загляните на сайт и проверьте вот этот момент:
550 <nomail@хххх.хх>: User unknown in virtual mailbox table
По ходу, у Вас определена локальная доставка и квота не проверяется.


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено swap , 16-Дек-03 16:14 
2 VID: Вообще, думаю было-бы неплохо если бы Вы поместили полный пример рабочих конфигураций файлов main.cf, master.cf и т.д. Пытаюсь настраивать как описано Вами, квота в mysql проверяется, но служебный файл не создаётся.  Права на virtual_mailbox_base соответсвуют mail_owner. Да ещё, как по расширенному логу smtpd -v определить работу патча?


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено ViD , 20-Дек-03 12:32 
>2 VID: Вообще, думаю было-бы неплохо если бы Вы поместили полный пример
>рабочих конфигураций файлов main.cf, master.cf и т.д. Пытаюсь настраивать как описано
>Вами, квота в mysql проверяется, но служебный файл не создаётся.  
>Права на virtual_mailbox_base соответсвуют mail_owner. Да ещё, как по расширенному логу
>smtpd -v определить работу патча?


Ок я думаю это хорошая идея, выставлю на сайте свой конфиг будет явно попроще. А то и в самом деле существует несколько десятков вариантов конфигураций и возможно все же есть свои тонкости.


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено Costas , 22-Дек-03 08:16 
Поддерживаю всё выше сказанное по поводу посмотреть рабочую конфигурацию, кстати пока работаю на птче http://web.onda.com.br/nadal/, всё ничего, но только сообщения валятся отправителю а не получателю...

"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено ViD , 22-Дек-03 13:24 
>Поддерживаю всё выше сказанное по поводу посмотреть рабочую конфигурацию, кстати пока работаю
>на птче http://web.onda.com.br/nadal/, всё ничего, но только сообщения валятся отправителю а
>не получателю..
Сдаюсь :) ниже конфиги tls/sasl можно не учитывать
Вот master.cf
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd
pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
old-cyrus unix  -       n       n       -       -       pipe
  flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
cyrus     unix  -       n       n       -       -       pipe
  user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
-------------------------------------------------------------------------


Вот main cf:

queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
mail_owner = postfix
default_privs = nobody
myorigin = $mydomain
unknown_local_recipient_reject_code = 450
maps_rbl_reject_code = 554
smtpd_recipient_restrictions =
permit_sasl_authenticated,
reject_unauth_destination,
reject_rbl_client list.dsbl.org,
reject_rbl_client relays.ordb.org,
reject_rbl_client dynablock.wirehub.net,
reject_rbl_client blackholes.wirehub.net,
reject_rbl_client dnsbl.njabl.org

smtpd_sender_restrictions = permit_mynetworks,
reject_unknown_sender_domain,
reject_non_fqdn_sender

message_size_limit = 2048000
qmgr_message_active_limit = 200
qmgr_message_recipient_limit = 200
bounce_size_limit = 5000
smtpd_recipient_limit = 100
strict_rfc821_envelopes = yes

transport_maps = mysql:/usr/local/etc/postfix/sql/transport.cf
virtual_mailbox_base = /var/mail/virtual
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/sql/users.cf
virtual_alias_maps = mysql:/usr/local/etc/postfix/sql/aliases.cf
virtual_uid_maps = mysql:/usr/local/etc/postfix/sql/uids.cf
virtual_gid_maps = mysql:/usr/local/etc/postfix/sql/gids.cf

relay_domains = $transport_maps
relay_recipient_maps = $virtual_mailbox_maps
virtual_mailbox_domains = $transport_maps

smtpd_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes


smtp_use_tls = yes
smtp_tls_key_file = /usr/local/etc/postfix/sql/pop3d.pem
smtp_tls_cert_file = $smtp_tls_key_file
smtp_tls_CAfile = $smtp_tls_key_file
smtp_tls_note_starttls_offer = yes
smtpd_tls_auth_only = yes
smtpd_use_tls = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

smtpd_tls_key_file = /usr/local/etc/postfix/sql/pop3d.pem
smtpd_tls_cert_file = $smtpd_tls_key_file
smtpd_tls_CAfile = $smtpd_tls_key_file

virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/sql/mail_limit.cf
virtual_quota_user_bounce = yes
virtual_quota_user_message = /usr/local/etc/postfix/sql/message.cf
virtual_quota_user_message_limit = 4096
mynetworks = 192.168.31.0/24 127.0.0.0/8

alias_maps = hash:/etc/mail/aliases
alias_database = hash:/etc/mail/aliases
mail_spool_directory = /var/mail
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = no


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено swap , 23-Дек-03 16:43 
> Сдаюсь :) ниже конфиги tls/sasl можно не учитывать
С Вашей всё получилось, работает, спасибо. Вообще проблема была в том, что у меня адреса во внутренней сети вида name@mail.subdomain.domain, почтовый сервер mail.subdomain.domain. Домен mail.subdomain.domain был прописан как виртуальный  и хотя
(Не сработает если:
1. local_recipient_maps = /.../ваш _ файл
2. Или у пользователей путь к почте ../../vasa
3. Или virtual_mailbox_limit_maps закомментарено
4. Или поле квоты в таблице пустое
Или этот адрес есть в:
5. recipient_canonical_maps = /.../ваш _ файл
6 . canonical_maps = /.../ваш _ файл ) - здесь было всё нормально, доставка всё равно была локальная. Переход к адресам вида name@subdomain.domain решил все проблемы.

"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено Costas , 25-Дек-03 10:29 
А у кого-нибудь в рабочей конфигурации присутствует в таблице записть типа subdomain.domain smtp:192.168.1.2?
это к вопросу об MX записях.

"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено Costas , 25-Дек-03 10:34 
Потому как у меня чего-то не работает... Хм...


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено Victor , 04-Апр-04 18:24 
Привет!

Если ты сюда еще заглядываешь, то хочется попросить добавить еще одну проверку (если это не сложно). Часто вместе с MAIL FROM приходит сразу и размер доставляемого сообщения в виде:
MAIL FROM: <user@some.net> SIZE=1024
RCPT TO: <...>
Так вот было бы просто замечательно если б это значение на этой-же стадии суммировалось с текущим размером почтового ящика и в случае превышения
заданной квоты тут-же вымылался отлуп. На сегодня мы принимаем любую почту, если ящик не переполнен и только после физического переполнения
шлем отлупы.

ps: огромное спасибо за патч. Почти без напильника накатил на 2.0.19


"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено ViD , 16-Апр-04 09:47 
>Привет!
>
>Если ты сюда еще заглядываешь, то хочется попросить добавить еще одну проверку
>(если это не сложно). Часто вместе с MAIL FROM приходит сразу
>и размер доставляемого сообщения в виде:
>MAIL FROM: <user@some.net> SIZE=1024
>RCPT TO: <...>
>Так вот было бы просто замечательно если б это значение на этой-же
>стадии суммировалось с текущим размером почтового ящика и в случае >превышения...

В начале оно так и было :) однако потестировав, пришел к выводу что SIZE в мессагах, поле мягко говоря необязательное, а порой даже заведомо обманчивое и строить квоту на значении этого поля, как я понял, не есть хорошо.
В постфиксе фактически рализовано 2 алгоритма контроля превышения размера принимаемого сообщения:
1. На основе SIZE, срабатывает в 10-15% случаев, это я назвал "белая" почта с нормальных МТА когда SIZE=что_то и соответственно что_то=реальному_размеру мессаги.
2. На основе контроля буфера приема, сие ловит соответственно "серую" и "черную" почту, где SIZE=0 или заведомо искажено(т.е. локальные почтовые клиенты, спам машины, левые/простенькие МТА) тут уже гораздо более жесткое и эффективное средство, т.к. подсчитывается реальный обьем принятой информации и если он больше, то отсекается, правда я не очень понял идею разработчика сперва ВСЕ принять, а потом подсчитать и  если больше отбросить, ну тут я не берусь судить, может есть какие подводные камни.

Так вот, все "горе" :) состоит в том, что юзеру не получившему 2Мб важного письма и имевшему 1.99Мб свободных, до жути обидно :), тут чисто психологически.. ибо после того, он еще спокойно получил 100 спамерских мессаг  по  10 кб :)
Хотя конечно и это все можно разрулить и расписать... но на сколько это актуально... я пока еще честно говоря не знаю.


"Postfix индивидуальная квота + virtual + maildir + MySQL/PostgreSQL"
Отправлено Gezm0 , 03-Июн-04 02:44 
Планируется ли дальнейшая поддержка патча/включение его в сам postfix? А то версия 2.1.0 уже вышла, баги правят.. С 2.0.x переходить придётся, а терять такую функциональность очень не хочется..

"Postfix индивидуальная квота + virtual + maildir + MySQL/Pos..."
Отправлено ViD , 17-Июн-04 12:01 
>Планируется ли дальнейшая поддержка патча/включение его в сам postfix? А то версия
>2.1.0 уже вышла, баги правят.. С 2.0.x переходить придётся, а терять
>такую функциональность очень не хочется..

Будет, уже делаю.


"Postfix индивидуальная квота + virtual + maildir + MySQL/PostgreSQL"
Отправлено Андрей , 22-Июн-04 11:41 
Спасибо что делаете!!! Удачи..

"Postfix индивидуальная квота   virtual   maildir   MySQL/PostgreSQL"
Отправлено Аноним , 04-Авг-04 10:55 
Ссылка недоступна. Где еще можно скачать это патч?

"Postfix индивидуальная квота   virtual   maildir   MySQL/Pos..."
Отправлено aledin , 24-Сен-04 16:47 
Очень хотелось бы получить в пользование данный патч. Ссылка и на самом деле недоступна. Может кто-нибудь поделится?

"Копия патча"
Отправлено Maxim Chirkov , 05-Окт-04 13:09 
Копию патча можно скачать здесь
ftp://ftp.opennet.ru/pub/net/mail/postfix_quota/

"'Postfix индивидуальная квота + virtual + maildir +.. '"
Отправлено Anna , 25-Окт-04 10:58 
Привет!
Огромная благодарность за работу, все работает отлично.
Но не давно один из пользователей, после того как не получил из-за переполнения важное письмо, спросил: "А нельзя-ли заранее предупредить?".
Т.е. как только ящик наполняется, к примеру, на 95% посылать пользователю письмо с предупреждением о заполнении.
Какие есть возможности решить этот вопрос?



"'Postfix индивидуальная квота + virtual + maildir +.. '"
Отправлено Crion , 04-Ноя-04 16:51 
Привет!
К сожелению postfix-2.1.5 не собрался после того как наложил патчь.
smtpd_check.c In function 'check_rcpt_maps':
smtpd_check.c:3815: 'argv' undeclared (first use in this function)
smtpd_check.c:3815: (Each undeclared identifier is reported only once
smtpd_check.c:3815:  for each function it appears in.)
smtpd_check.c:3817:  'cpp' undeclared (first use in this function)
smtpd_check.c:3819:  'stst_quota' undeclared (first use in this function)
smtpd_check.c: In function 'smtpd_resolve_virt_alias':
smtpd_check.c:3974: warning: assignment makes pointer from integer without a cast
*** Error code 1

"OpenNews: Postfix индивидуальная квота + virtual + maildir +..."
Отправлено serg_dsv , 24-Дек-04 14:18 
Прочитал Вашу статью по поводу квот в постфикс на http://www.opennet.me/base/patch/postfix_peruser_quote.txt.html

Наложил патч. Скомрилил. Все ОК.

Но вот не отрабатывается условие

bash-2.05b# telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 kremenchug.in.ua ESMTP Postfix (2.0.20)
helo kremenchug.in.ua
250 kremenchug.in.ua
mail from: admin@kremenchug.in.ua
250 Ok
rcpt to: qwer@kremenchug.in.ua
450 <qwer@kremenchug.in.ua>: User unknown in local recipient table

Немогу понять в чем проблема.

Вот мои конфиги

bash-2.05b# cat main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
mail_owner = postfix
default_privs = nobody
myhostname = kremenchug.in.ua
mydomain = kremenchug.in.ua
myorigin = $mydomain
unknown_local_recipient_reject_code = 450
#maps_rbl_reject_code = 554
#smtpd_recipient_restrictions =
#permit_sasl_authenticated,
#reject_unauth_destination,
#reject_rbl_client list.dsbl.org,
#reject_rbl_client relays.ordb.org,
#reject_rbl_client dynablock.wirehub.net,
#reject_rbl_client blackholes.wirehub.net,
#reject_rbl_client dnsbl.njabl.org

#smtpd_sender_restrictions = permit_mynetworks,
#reject_unknown_sender_domain,
#reject_non_fqdn_sender

#message_size_limit = 2048000
#qmgr_message_active_limit = 200
#qmgr_message_recipient_limit = 200
#bounce_size_limit = 5000
#smtpd_recipient_limit = 100
#strict_rfc821_envelopes = yes

transport_maps = mysql:/usr/local/etc/postfix/transport.cf
virtual_mailbox_base = /spool/mail/
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virt.cf
virtual_alias_maps = mysql:/usr/local/etc/postfix/virtual.cf
virtual_uid_maps = mysql:/usr/local/etc/postfix/uids.cf
virtual_gid_maps = mysql:/usr/local/etc/postfix/gids.cf

#virtual_maps = mysql:/usr/local/etc/postfix/virtual.cf

relay_domains = $transport_maps
relay_recipient_maps = $virtual_mailbox_maps
virtual_mailbox_domains = $transport_maps
virtual_transport = virtual

#recipient_canonical_maps = $virtual_mailbox_maps

#local_transport = virtual
#local_recipient_maps = $virtual_mailbox_maps

local_transport = virtual
#local_recipient_maps =
local_recipient_maps = $virtual_mailbox_maps

#smtpd_sasl_auth_enable = yes
#smtp_sasl_security_options = noanonymous
#broken_sasl_auth_clients = yes

#smtp_use_tls = yes
#smtp_tls_key_file = /usr/local/etc/postfix/sql/pop3d.pem
#smtp_tls_cert_file = $smtp_tls_key_file
#smtp_tls_CAfile = $smtp_tls_key_file
#smtp_tls_note_starttls_offer = yes
#smtpd_tls_auth_only = yes
#smtpd_use_tls = yes
#smtpd_tls_loglevel = 1
#smtpd_tls_received_header = yes
#smtpd_tls_session_cache_timeout = 3600s
#tls_random_source = dev:/dev/urandom

#smtpd_tls_key_file = /usr/local/etc/postfix/sql/pop3d.pem
#smtpd_tls_cert_file = $smtpd_tls_key_file
#smtpd_tls_CAfile = $smtpd_tls_key_file

virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mail_limit.cf
virtual_quota_user_bounce = yes
virtual_quota_user_message = /usr/local/etc/postfix/message.cf
virtual_quota_user_message_limit = 4096

mynetworks = 193.111.189.16/28 192.168.0.0/16 127.0.0.0/8

alias_maps = hash:/etc/mail/aliases
alias_database = hash:/etc/mail/aliases
mail_spool_directory = /var/mail
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = no


-------------------------------------------------

bash-2.05b# cat master.cf
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd
pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
  old-cyrus unix  -       n       n       -       -       pipe
    flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
    cyrus     unix  -       n       n       -       -       pipe
      user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}      uucp      unix  -       n       n       -       -       pipe
        flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
        ifmail    unix  -       n       n       -       -       pipe
          flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
          bsmtp     unix  -       n       n       -       -       pipe
            flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
            -------------------------------------------------------------------------bash-2.05b#

Незнаю как заставить постфикс вместо 450 <qwer@kremenchug.in.ua>: User unknown in local recipient table
как сказано у Вас

      550 <nomail@tdauto.ru>: User unknown in virtual mailbox table


Подскажите плиз в чем проблема?