>подскажите пожалуйста, где почитать. - наверное, негде. мои личные понятия о способах оптимизации программ.
>чем разбрасывать почту для виртуальных пользователей для последующей раздачи courier-imap?
конечно, я не отказался от vpopmail. было бы глупо и слишком экстремально :)
>в какое место вкручивать антивирусный фильтр?
во-первых, надо применить chkuser. во-вторых, я категорически отказался от перла где-бы то ни было в почте. вместо него есть такие несложные варианты:
1) собрать vpopmail с поддержкой maildrop, а уж там можно и clamdscan (с моим собственным патчем для xfilter, который не создает временные файлы, а только получает returncode - выложу на днях, не забуду) и dspam.
2) либо взять замену qmail-queue, написанную на C, которую тут где-то недавно любезно выкладывали сотруднеги Alt Linux. (правда, этот вариант обладает рядом недостатков)
qmail-queue в моем варианте (1) остается старый.
в итоге мои советы такие: chkuser, отказ от перла, избавиться от создания временных файлов при обработке antivirus/antispam и все будет _намного_ лучше.
если использовать chkuser + vpopmail + maildrop+мой маленький патчик для xfilter-лексем maildrop'a вместо рекомендуемого qmail-queue.pl, получаются следующие выигрыши:
1) почта не принимается для несуществующего пользвателя (проверка rcpt)
2) для каждого пользователя и домена в отдельност можно сделать простые правила (используя макросы maildrop) для фильтрации почты. кому-то антиспам/антивирь вообще не нужен, а мы, как последние идиоты все равно прогоняем через фильтры!
3) перед тем, как vpopmail отдаст почту в maidrop по pipe для доставки, в этот момент все уже ясно: кому именно надо ее отдать. никаких действий, кроме применения спам/вирь-фильтра (если флажок установлен) не требуется.
4) если не использовать обертки для clamdscan (который значительно быстрее, чем clamscan) на перле, которая (сцука!) создает временные файлы - тоесть пишет из памяти maildrop в pipe, записывает файл на диск, обрабатывает clamdscan, выписывает обратно в читающий pipe maildrop'a (поскольку таков механизм clamdscan - он только прочитывает, но не пишет на выход содержание письма), то можно поступить так: заставить xfilter _только_ писать в pipe clamdscan'a, а после возвращения RETURNCODE его проверять, не пятаясь прочесть ответ clamdscan из pipe, созраняя при этом содержимое письма в своей памяти. а уж если соблюлись все условия, то если размер письма не превышает , например, 256K отдать на растерзание письмо dspam'у либо через модернизированный xfilter, либо через обычный.
собственно основное, что хотел, рассказал