LINUX.ORG.RU

Надежный SMTP сервер

 , , ,


0

1

Введение Я успешно эксплуатирую vds с centos (postfix и dovecot) в качестве внешнего почтовика для отправки почты и, на всякий случай, для временного приема почты (тариф недорогой, места надолго не хватит). Работает прекрасно. Я доволен. Но случилось один раз приключение: в понедельник, до начала рабочего дня, менеджер отправил важное письмо. Outlook съел, положил в отправленные. Менеджер успокоился. На 15 мин, т.к. не пришла отбивка о доставке (не о прочтении, а о доставке на сервер-получатель). Позвонил мне, я попытался отправить с мобилы. Отправил (для простоты на gmail), а письмо не пришло. Через 15 мин я приехал на работу (благо уже подъезжал), пришлось сделать только одно маленькое действие: service postfix restart.

И почта пошла дальше, и тестовые письма сразу побежали. НО! Важное письмо пришло с опозданием на 30 минут и мы попали.

При этом был резервный smtp, через него могло все пройти (это smtp хостера, где обслуживается домен, а не vds). Но проблема в том, что менеджер не знал, что есть проблема и письмо висит в очереди на отправку в postfix-е ;)

Задача После этого мне поставили задачу: нужен сервер для отправки (хотя бы для отправки), чтобы был 100% без зависонов, глюков и прочего.

Т.к. 100%, то это явно внешний, не привязанный к офисному провайдеру (хоть и городского масштаба). На толстом канале и с резервированием. Лучше, если все-таки я его буду контролировать (самое уязвимое место в цепочке ;)).

Что вы можете посоветовать?

Варианты, которые мне приходят в голову:

  1. Сменить хостера на linode.com (вроде он один из лучших), хотя бы за $20/мес. Недорого, в общем-то, оперативки больше, но все равно что-то зависнуть может так же, я же не кластер арендую саморегулирующийся )) Если что-то зависнет, это может быть просто неожиданность в виде глюка из-за кривого письма, которое примет сервер и задумается в муках. Ну или вы поняли, все равно может быть ситуация, когда мне придется просто дать команду на перезапуск службы. Но это будет сделано после возможной проблемы.
  2. Купить тот же Kerio Connect (дорого, но мне минимум нужен) и запустить его в том же linode. Будет, наверное, стабильнее. (Эээ, я не флеймить ради, люди!). Просто привожу разные варианты. 439 евров - это не мало, но можно рассматривать.
  3. Сервисы типа fastmail.fm (бизнес email за $15/год). Вопрос в том, насколько они стабильны? Кто пользовался? Может быть, есть другие варианты в этом же духе?
  4. В этом же духе, но типа Outlook.com? Кстати, не факт, что он отбивки присылает о доставке! Я уже кучу таких вариантов видел.

    Плюс вар.3,4 в том, что им постоянно кто-то пользуется и, по идее, они работают намного стабильнее, чем мой, ненагруженный, но ручной postfix?

  5. Возможно, есть вариант из двух серверов (один на linode, другой - у меня или еше где-то), которые постоянно как-то решают задачу черного ящика «письмо на входе должно быть отправлено! Сейчас же!». Возможно, это может Exchange? Тот же Kerio? Да, блин, тот же postfix (я бы хотел именно этого). Либо кто-то типа Amazon предоставляет услугу «почтовик в облаке»?

Может, есть еще идеи? И главное, хотя бы условно - КАК?

Лог Одновременно с этим могу описать произошедшее с почтой:

до перезапуска postfix на каждое письмо было в логах примерно такое:
Nov 25 08:53:12 relay postfix/cleanup[6349]: CB4C8305B4: message-id=<!&!AAAAAAA==@mail.com>
Nov 25 08:53:15 relay postfix/smtpd[6339]: disconnect from RELAY2.MAIL.COM[201.273.22.33]
Nov 25 08:56:35 relay postfix/anvil[6341]: statistics: max connection rate 1/60s for (smtp:201.273.22.33) at Nov 25 08:53:11
Nov 25 08:56:35 relay postfix/anvil[6341]: statistics: max connection count 1 for (smtp:201.273.22.33) at Nov 25 08:53:11
Nov 25 08:56:35 relay postfix/anvil[6341]: statistics: max cache size 1 at Nov 25 08:53:11

где RELAY2.MAIL.COM[201.273.22.33] - шлюз, через который мы выходим в интернет.

Ни одной записи postfix/qmgr.

Nov 25 09:47:26 relay postfix/postfix-script: stopping the Postfix mail system
Nov 25 09:47:26 relay postfix/master[1144]: terminating on signal 15
Nov 25 09:47:27 relay postfix/postfix-script: starting the Postfix mail system
Nov 25 09:47:27 relay postfix/master[6581]: daemon started -- version 2.3.3, configuration /etc/postfix
Nov 25 09:47:27 relay postfix/qmgr[6584]: 1211F30699: from=<postbox@mail.com>, size=130907, nrcpt=1 (queue active)
...

Далее с десяток отправленных писем, какие-то пошли на пересылку (этот почтовик у меня по mx записям не главный), какие-то отправлены сразу куда надо.

После рестарта postfix:

Nov 26 18:07:00 relay postfix/smtpd[12272]: 163473046B: client=RELAY2.MAIL.COM[201.273.22.33], sasl_method=DIGEST-MD5, sasl_username=postbox@mail.com
Nov 26 18:07:00 relay postfix/cleanup[12267]: 163473046B: message-id=<!&!AAAAAFDdmsI0BAAAAAA==@mail.com>
Nov 26 18:07:00 relay postfix/qmgr[6584]: 163473046B: from=<postbox@mail.com>, size=7733, nrcpt=1 (queue active)
Nov 26 18:07:02 relay postfix/smtpd[12272]: disconnect from RELAY2.mail.COM[201.273.22.33]
Nov 26 18:07:10 relay postfix/smtp[12271]: 163473046B: to=<arev233@gmail.com>, relay=....., status=sent (250 OK id=1VlJ7K-00007c-Ui)
Nov 26 18:07:10 relay postfix/cleanup[12267]: 5C3DB30474: message-id=<20131126140710.5C3DB30474@relay.mail.com>
Nov 26 18:07:10 relay postfix/bounce[12283]: 163473046B: sender delivery status notification: 5C3DB30474
Nov 26 18:07:10 relay postfix/qmgr[6584]: 163473046B: removed

т.е. приняли, обработали, отправили. Ну, грубо. Так?

Не могу понять, почему появились «max connection ...», а после перезапуска исчезли. Надо почитать. Возможно, как-то настроить smtpd_*, не знаю пока.

Все, что касается smtpd в main.cf:

smtpd_client_restrictions =
        permit_mynetworks,
    permit_sasl_authenticated,
    reject_non_fqdn_sender,
        reject_unknown_reverse_client_hostname,
        permit

smtpd_helo_restrictions =
        permit_mynetworks,
    permit_sasl_authenticated,
        reject_invalid_helo_hostname,
        reject_non_fqdn_helo_hostname,
        reject_unknown_helo_hostname,
        permit

smtpd_sender_restrictions =
        permit_mynetworks,
    permit_sasl_authenticated,
        reject_non_fqdn_sender,
        reject_unknown_sender_domain,
        permit

smtpd_recipient_restrictions =
        reject_non_fqdn_recipient,
        reject_unknown_recipient_domain,
    permit_sasl_authenticated,
        reject_unlisted_recipient,
    permit_mynetworks,
        reject_unauth_destination,
        permit_auth_destination,
    reject

smtpd_data_restrictions =
    permit_mynetworks,
    reject_unauth_pipelining,
    reject_multi_recipient_bounce,
    permit

smtpd_etrn_restrictions = reject
smtpd_helo_required = yes

smtpd_discard_ehlo_keywords = etrn, silent-discard
smtpd_forbidden_commands = CONNECT GET POST
disable_vrfy_command = yes

Задача После этого мне поставили задачу: нужен сервер для отправки (хотя бы для отправки), чтобы был 100% без зависонов, глюков и прочего.

Почта в принципе ходит асинхронно, задержки могут возникнуть из-за кучи причин. Самая базовая, что после того, как сервер принял письмо, с сервером может произойти что угодно и клиент об этом никак не узнает. И таймауты повторной доставке достаточно большие, чтобы тут какие-то гонки устраивать.

В принципе у postfix можно выкрутить delay_warning_time, чтобы о не доставке почты быстро приходило уведомление. Но в вашем случае нужно было разбираться что именно произошло, похоже, что упал процесс smtp (а не smtpd, настройки которого вы привели), который и отвечает за доставку почты, но, почему он не был перезапущен непонятно. Не знаю, какая у вас версия postfix, но со старыми версиями у меня за несколько лет подобных проблем не было.

А схема с резервированием серверов вобще не понятно как реализуема, инициализатор отправки письма Outlook, следовательно, это он каким-то образом должен дублировать письмо в случае чего...

mky ★★★★★ ()

После этого мне поставили задачу: нужен сервер для отправки (хотя бы для отправки), чтобы был 100% без зависонов, глюков и прочего.

Так не бывает.

Во-первых, электронная почта не гарантирует время передачи сообщения.

Во-вторых, проблемы бывают всегда и всюду.

Deleted ()
Ответ на: комментарий от mky

А схема с резервированием серверов вобще не понятно как реализуема, инициализатор отправки письма Outlook, следовательно, это он каким-то образом должен дублировать письмо в случае чего...

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

Deleted ()
Ответ на: комментарий от mky

Т.е. как я понимаю, либо это должно быть использование надежного почтового сервиса (gmail, outlook.com, fastmail.fm и др.), которые тоже могут сглючить, но вероятность этого у них намного меньше, либо просто стабильность конфигурации почтового сервера и надежность хостера (vds, стабильность канала и прочее).

Что можете сказать о fastmail.fm или его аналогах? Удобно ли это? Или все здорово, но до момента, когда нам сообщают «извините, идет ремонт на магистральном провайдере выше нас»?

billybons2006 ()

Задача После этого мне поставили задачу: нужен сервер для отправки (хотя бы для отправки), чтобы был 100% без зависонов, глюков и прочего.

почта тебе не подходит. Только если тот клиент что на той стороне, отправляет автоматическое уведомление о доставке (можно накостылить в procmail, как в венде я без понятия). Т.е. надо что-бы аутглюк твоего менеджера ждал оповещение, и если его нет, отправлял на резерв.

emulek ()

Вот меня вообще убивает, что люди строят свой бизнес, дела и прочее, надеясь на email!

Порочная практика. Email очень сложная система, в ней оочень много, что может поломаться.

Если контора ставит электронному письму высокую важность, значит она что-то не так делает. И, к сожалению, таких контор 95%... или 146%

uspen ★★★★★ ()
Ответ на: комментарий от billybons2006

либо это должно быть использование надежного почтового сервиса
(gmail, outlook.com, fastmail.fm и др.)

«Надёжный» - это сильно сказано. И правильный комментарий уже был: «электронная почта не гарантирует время передачи сообщения».

То есть, если отсчёт идёт на минуты, то исключительно звонок голосом/IM/разное, но с немедленной реакцией получателя.

AS ★★★★★ ()
Ответ на: комментарий от billybons2006

которые тоже могут сглючить, но вероятность этого у них намного меньше

Даже если у них вероятность глюка и ниже, то возможность контроля/управления за своим сервером, на мой взгляд, перевешивает. Поэтому gmail и другие я использую только как личный ящик куда ничего важного не приходит.

Ну возмите второй сервер, тоже posfix на нём, delay_warning_time в 15 секунд, и обучите менеджера, что если пришёл delay_warning или не пришло потверждение получения письма, пусть шлёт копию письма через второй сервер. Добавьте к этому какой-нибудь cgi-скрипт, показывающий почтовую очередь или число сообщений в ней.

«извините, идет ремонт на магистральном провайдере выше нас»

Именно так, но, обычно не провайдер виноват, а проблемы внутри самой системы, только о них особо не распространяются и многим кажется, что всё всегда работает, а почта теряется в спаме.

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

mky ★★★★★ ()
Ответ на: комментарий от billybons2006

100% гарантия у вас будет только если менеджер отправит, а потом позвонит и получит устное подтверждение что письмо получено/прочитано/понято. Даже отчет о доставке не спасет если внезапно после отправки такого отчета в сервер с письмом попадает метеорит.

hidden_4003 ()
Ответ на: комментарий от mky

Спам фильтры сейчас настолько озверели что иногда и safe sender list им не указ, грейлист тоже часто попадается, так что выбор эл. почты как основного средства связи мягко говоря странен.

hidden_4003 ()
Ответ на: комментарий от hidden_4003

Я понимаю все, о чем выше все сказали. Суть проблемы: на тендер отправляются заявки по email (!!!). Не по Skype или иному IM, не по телефону. А именно по почте.

Я уже донес до руководства мысль о том, что проще, не дождавшись подтверждения о доставке, отправить через второй smtp. На что мне сказали, что это не вариант и надо искать 100% вариант.

В принципе, как мне кажется, надо максимум что сделать, это донастроить (если это требуется) текущий почтовик на postfix. Возможно, перенести его на более приличный хостинг VPS типа Linode с выделенным IP (чтобы отстраниться от возможных соседей-спамеров) и использовать его как основной. Т.е. как и сейчас, только лучше. В случае отсутствия подтверждения о доставке письма - повторить отправку через другой smtp. Т.е. так. как предлагал руководству сначала!

Других вариантов действительно нет.

Спасибо за комментарии.

billybons2006 ()
Ответ на: комментарий от billybons2006

Я уже донес до руководства мысль о том, что проще, не дождавшись подтверждения о доставке, отправить через второй smtp. На что мне сказали, что это не вариант и надо искать 100% вариант.

100% вариант - это отправлять заявки не за 15 минут до конца приема заявок.

stave ★★★★★ ()
Ответ на: комментарий от stave

Вы прямо мои слова повторяете! Ок, с технической точки зрения вопрос считаю решенным. Если что конкретно по postfix с его max connection rate не пойму, лучше отдельным вопросом спрошу. А этот предлагаю завершить. Всем большое спасибо!

billybons2006 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.