В Postfix-е теперь появилась полная поддержка DSN (RFC 3461-4). И это, по словам Wietse Venema, означает, что уже к версии 2.3, Postfix станет "полноценным" MTA.
Народ, а кто-нибудь может помочь резать спам, который валится на postmaster (с поддельными адресами) средствами самого postfix (2.1, в перспективе 2.2)?
Насколько я понимаю, почта на postmaster не обрабатывается всякими restrictions, только header_check, так?
>Говорю же, читай. Про таких как ты админов написано.
гыгы, хватит в доки djb тыкать. оттуда следует только то, что не нужно почту на спам вообще проверять, типа пусть юзер сам такой херней страдает, а на самом деле все наоборот, и более-менее вменяемого способа прикручивания спамчекера для qmail нет.
Ну, и для чего ты запросил 5000 форков в таком случае? Давай согласимся,
что 50 форков в секунду для твоих объёмов будет достаточно с баальшим
запасом. А теперь вернёмся к твоему утверждению о том, что форки - зло
согласно твоей идеологии из-за потери производительности. Не хочешь
обратно свои слова взять?
И все же, в чем практическая польза от DSN, если не все мыльницы в интернете поддерживают его? Все равно же со 100% достоверностью не получишь notification
Странное вообще обсуждение. Ну если будет писем больше, чем может переварить мой почтовый сервер, ну сделаю 2 компьютера вместо одного, пропишу в djbdns, чтобы он возвращал первичный MX на случайный из них, и в чем проблема? Мало будет двух - сделаю три. или четыре.
Смысл не в том, чтоб отказаться от борьбы со спамом, а в том, чтобы
не делать это по-глупому. Не делать кривых одноразовых решений.
Там же всё написано.
>"mail system handles mail for tens of millions of people."
Вы слишком буквально понимаете слова своего гуру, это всего лишь его домыслы на тему, что "традиционные" методы фильтрации спама не работают на таких объемах. Вы себе представляете стоимость системы на 10M Ящиков? Бедному профессору это не потянуть. Если считаете, что я не прав, то с удовольствием приму ссылку на MX построенный на qmail обслуживающий 10M юзеров.
Чтобы вы больше не спорили, на P4 2.0 на пользовательском ядре 2.6.10 в течении одной секунды выполняется 4051 форк. Выполнилось бы и больше, но ядро говорит "Resource temporarily unavailable".
>но даже твоих 4051 форков Борисычу хватит чтоб перемолоть в 100 раз больше почты, чем у него сейчас ;)
ну что же, запусти сначала у себя чистый (хотя сейчас все кому не лень используют big-todo) qmail так чтобы из .qmail запускалась проверка на спам и вирусы, а потом maildrop в зависимости от результатов проверки раскидывал бы все по разным каталогам и уди(а)вись, если получится принимать хотя бы полтинник писем в секунду, я был бы рад узнать характеристики сервера, а так же его vmstat.
> если получится принимать хотя бы полтинник писем в секунду, я был бы рад узнать характеристики сервера, а так же его vmstat.
Что-то мне подсказывает, что одна проверка на вири требует на порядки больше ресурсов, чем один форк. А 10k проверок на вири затребуют соответственно на 10k*порядки больше ресурсов, чем 10k форков. Хоть параллельно их запускай, хоть последовательно.
Следовательно, если машине удается проверить 50 писем в течении секунды на наличие в них хотя бы одного из 122382 вирей (циферь от каспера), то 50 форков на этом фоне просто потеряются.
Ты на primary просто не принимаешь коннекты, или всем отвечаешь 4xx?
Если первое, то все прекрасно дойдет на backup.
Если второе, то почта с qmail без патча до тебя _никогда_ не дойдет. Такое поведение полностью согласуется со всеми rfc, существующими как на момент написания qmail, так и сейчас. Если ты провайдер в России, то жди отзыва лицензии после жалоб, поскольку нарушаешь требования к электросвязи.
А упомянутый патч добавляет проверку для соответствия rfc2821: в случае 554 сразу баунсить сообщение. И добавляет workaround для таких rfc-ignorant серверов, как твой: при 4xx пытаться отправить через следующий MX.
Кстати, отвечая 4xx в приветствии ты нарушаешь rfc2821 (MUST be 220 or 554). Всегда отвечая 4xx на mail|rcpt на primary ты препятствуешь связности сети, что недопустимо, если предоставляешь кому-либо почтовый сервис.
И, естественно, все нападающие на qmail забывают требование rfc: "_MUST_ delay retrying after _one_ attempt has failed". И при каждой попытке "Multiple MX records contain a preference indication that _MUST_ be used in sorting".
> Неприем почты с хостов без реверса нарушение, или нет?
По rfc -- нет. Если хост не имеет fqdn, он обязан представиться ip-адресом.
С точки зрения "закона" меня все больше местное регулирование волнует, но могу и уточнить, изменилось ли что в России. Хотя это врядли.
Насколько мне известно, если ты предоставляешь услуги электронной почты, то ты обязан _любое_ письмо доставить, даже если это спам. Любые отклонения только по письменному соглашению с клиентом. Если не изменяет память, соглашение должно подразумевать передачу доверенности на право распоряжаться входящей корреспонденцией.
> И, естественно, все нападающие на qmail забывают требование
> rfc: "_MUST_ delay retrying after _one_ attempt has failed".
Все бы хорошо, но ты не дочитал:
5.3.4 Reliable Mail Transmission
the mapping can result in a list of alternative delivery
addresses rather than a single address, because of (a)
multiple MX records, (b) multihoming, or both.To provide
reliable mail transmission, the sender-SMTP MUST be able
to try (and retry) each of the addresses in this list in
order, until a delivery attempt succeeds.
Далее вроде как, как раз зацепка:
However, there MAY also be a configurable limit on the number
of alternate addresses that can be tried.
Но надо дочитывать:
In any case, a host SHOULD try at least two addresses.
> если получится принимать хотя бы полтинник писем в секунду, я был бы
рад узнать характеристики сервера, а так же его vmstat.
Только для тебя ;) Тест на домашней машинке с IDE диском. Пускаю тест
и пишу результат одновременно.
Запускаем приём 5000 писем с вирусом Eicar. Они режектятся на уровне
очереди. Проверка через clamd.
$ time for i in `seq 1 5000`; do /var/qmail/bin/qmail-inject -a me < ~/TEST-VIRUS-MAIL; done >&/dev/null
real 1m11.918s
user 0m12.010s
sys 0m13.400s
Считаем: ~70 писем/сек.
Тестируем отдельно фильтрацию спама на обычном письме размером 3кб.
В базе около полумиллиона образцов спама.
$ time for i in `seq 1 5000` ; do /usr/local/bin/bogofilter <~/TEST-MAIL-GOOD; done
real 1m13.018s
user 0m55.180s
sys 0m17.840s
Та же картина: ~70 писем/сек.
Тестируем всё вместе - проверку на вирусы и на спам. Всё то же письмо.
~/.qmail выглядит так:
|/var/qmail/bin/condredirect spam /usr/local/bin/bogofilter
./nsmail/Inbox
time for i in `seq 1 5000`; do /var/qmail/bin/qmail-inject -a dmitryv <~/TEST-MAIL-GOOD; done >&/dev/null
real 5m10.338s
user 0m12.320s
sys 0m13.820s
Итого: ~16 писем/сек.
Процессор во время исполнения занят не более чем на 40%.
Смотрим vmstat:
r b swpd free buff cache si so bi bo in cs us sy id wa
2 1 6300 25388 139668 69572 0 0 82 72 129 46 5 1 94 0
0 2 6300 23712 139676 71284 0 0 82 72 129 46 5 1 94 0
3 0 6300 21612 139680 72960 0 0 82 73 129 46 5 1 94 0
2 1 6300 22048 140384 71792 0 0 81 81 129 50 5 1 94 0
И видим, что основной затык - I/O операции.
Параметры машинки:
$ cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 12
model name : AMD Athlon(tm) 64 Processor 2800+
~$ cat /proc/meminfo
total: used: free: shared: buffers: cached:
Mem: 527806464 508919808 18886656 0 143884288 78098432
Swap: 1011666944 6451200 1005215744
Обычный десктоп с загруженными иксами, firefox и т.д.
$ uname -a
Linux server1 2.4.29 #6 Thu Jan 20 16:30:37 PST 2005 i686 unknown unknown GNU/Linux
# hdparm -tT /dev/hda
/dev/hda:
Timing cached reads: 2256 MB in 2.00 seconds = 1128.00 MB/sec
Timing buffered disk reads: 168 MB in 3.00 seconds = 56.00 MB/sec
OS Slackware-10.1 c родным ядром с оптимизацией для i486.
> > In any case, a host SHOULD try at least two addresses.
> А помнишь разборки с терминологией SHOULD/MUST? ;)
:-)
Но, в данном контексте, это не сильно важно: "sender-SMTP MUST be
able to try (and retry) each of the addresses in this list". Не в
эту попытку, так в следующую, но перебрать он MUST все. ;-)
И даже "must try" - неверно. "Try" - это сильно абстрактно и
расплывчато. Я попробовал, но чего-то там у меня не получилось ;)
Должно быть: "must connect" c записью в лог ответа!
> Почувствуй разницу: "MUST be able to try" и "MUST try" ;)
Не чувствую. "Должен пробовать" и "должен иметь возможность пробовать". Разница то какая ? Если он не имеет возможности (не умеет/запрещено в конфиге/разное) - rfc-ignorant.