24
Aug
2010
dcc-cgp helper
В предыдущей статье DCC для CGP я описывал свой патч для dcc-cgp. В настоящий момент в виде патча мои изменения поддерживать не так удобно, потому я сделал свой тарболл dcc-cgp-1.1.2-dcc-1.3.140.tar.gz
Это модифицированная версия dcc-cgp v1.1.2 и плюс исправленные патчи для накатывания на dcc-1.3.140.
Мои модификации dcc-cgp v1.1.2:
- изменил коды ошибок GREY_XCODE и DCC_XCODE на x.9.9. Это позволяет сообщать отправляющей стороне о причине ошибки в момент работы greylist-инга;
- изменил dcc_mk_su () для работы с новыми версиями dcc;
- изменил GCP_PROTOCOLS – список протоколов, которыми сообщение может попасть в систему и будет обработано этим хелпером. В него добавлены некоторые WEB протоколы, но удалён RPOP;
- немного исправлены информационные сообщения;
- переименована функция strcasestr в _strcasestr.
Я уже больше года использую эти модификации на своей системе и пока доволен.
Если вы хотите пользоваться не модифицированной версией от автора dcc-cgp, то вам надо заменить dcc-cgp/dcc-cgp.c на версию из оригинального дистрибутива и модифицировать одну строку:
- dcc_mk_su(DCCsu, hp->h_addrtype, hp->h_addr, Port); + dcc_mk_su(DCCsu, hp->h_addrtype, hp->h_addr, 0, Port);
Установка модифицированной версии аналогична оригинальной:
- скачать и развернуть архивы dcc и dcc-cgp;
- содержимое dcc-cgp перенести в дерево dcc;
- накатить dcc-CGP.patch и для не FreeBSD систем не забыть накатить dcc-CGP-nonFreeBSD.patch;
- для перехода к не модифицированной версии dcc-cgp заменить dcc-cgp/dcc-cgp.c из оригинального дистрибутива и изменить одну строку как это описано чуть выше;
- собрать, установить и настроить dcc как это описано в его документации;
- скопировать получившийся dcc-cgp/dcc-cgp в рабочую папку CGP и настроить его запуск как CGP хелпера.









25.08.2010 в 10:45
Это снова я :)
Почему-то патч не накатывается:
Откуда там dcc-1.3.129 ?
Перепутали тарболы и не тот выложили?
25.08.2010 в 12:15
dcc-1.3.129 — это нормально, между ним и .130 минимальные изменения, патч должен накатиться и на него.
Да, патч получился немного не такой, как был оригинальный. Вот так должно накатиться: patch -p2 < dcc-CGP.patch Чуть позже перевыложу тарболл для "привычного": patch -l -u -t -p0 < dcc-CGP.patch
25.08.2010 в 12:25
Обновил тарболл: kocmuk.ru/download/dcc-cgp/
patch -l -u -t -p0 < dcc-CGP.patch должен работать.
25.08.2010 в 16:46
да, все заработало, спасибо!
16.09.2011 в 14:20
Настраивал грейлистинг на CGP 5.4.0
Взял 140ой DCC, и патчи dcc-cgp от 135, в целом там нет критичной разницы по версиям, патчи наложились без проблем. Но настроить правильно поведение хелпера не удалось.
Хелпер запущен как dcc-cgp -d -b -r -S150, в логах вижу:
19:16:06.436 4 EXTFILTER (DCC-CGP) out (026): 54 FILE Queue/6909511.msg\n
19:16:06.444 4 EXTFILTER (DCC-CGP) inp (083): 54 ERROR «4.9.9 mail 6909511 from 78.33.59.146 temporary rejected, try again later»
19:16:06.444 1 ENQUEUER-000022 ([6909511]) [6909511] rule (DCC-CGP): filter (DCC-CGP) report: 4.9.9 mail 6909511 from 78.33.59.146 temporary rejected, try again later
все вроде красиво:) Но на деле происходит вот что:
CGP принимает полностью письмо, отвечает 250ый код, удаленная сторона считает что все ок.
Далее внутри себя CGP скармливает письмо хелперам, в том числе и dcc-cgp, который говорит
Sep 14 19:16:06 mail2 dcc-cgp[18767]: Mail «6909511» from Size = 131867: Overall result = 'G'
я так понимаю это результат «грейлистинг»
CGP воспринимает результат работы плагина как ответ «Reject» и сам формирует баунс о невозможности доставки письма
Failed to deliver to ''
4.9.9 mail 6909109 from 95.108.130.120 temporary rejected, try again later
Но хосту отправителю это уже по барабану, он раньше уже получил 250 код и успокоился. А мы внутри себя письмо отреджектили.
06.11.2011 в 19:32
Прошу прощения, что так долго молчал. Думаю, что проблема в том, что Greylist эффективен только в синхронном режиме постановки в очередь. Т.е. надо в разделе «Message Enqueuer» убедиться, что режим «Enqueue Asynchronously» выключен.
В синхронном режиме фильтры (в том числе и greylist) работают в момент SMTP-диалога приёма сообщения. И код ответа будет 250 только тогда, когда все проверки фильтров закончатся успешно. В случае greylisting-а первым будет ответ из 4XY серии, и отправитель поймет, что надо перепослать сообщение.
24.12.2011 в 14:27
Добрый день.
Что-то не хочет работать хелпер на сетевой конфигурации:
# /var/dcc/libexec/dcc-cgp -h 192.168.100.45,56001 -q -R -u mail -d
Segmentation fault
в логах:
kernel: dcc-cgp[16874]: segfault at 19 ip 0000000000402873 sp 00007fff5dc68360 error 4 in dcc-cgp[400000+b000]
Что я делаю не так?
24.12.2011 в 14:55
Мдя. Все так. В dcc-cgp косяк, поправлю. Но не раньше понедельника. Такой сетап я никогда не пробовал. Локальный dccifd, мне кажется, лучше.
25.12.2011 в 23:08
Ну, у меня исторически 2 отдельных сервера в одной сети. Потому удобнее таки сетевой вариант фильтрации.
Заранее спасибо.
26.12.2011 в 15:19
mcwees, попробуйте dcc-cgp-1.1.2-dcc-1.3.140.tar.gz из kocmuk.ru/download/dcc-cgp/
Да, тут конечно надо смотреть на сложившуюся инфраструктуру. Но хелпер в dccifd отдает полное сообщение. А dccifd в dccd отдает только чексуммы, что значительно уменьшает трафик. Больше трафик — больше задержки с ответом и лишняя нагрузка на сеть.
27.12.2011 в 13:10
Приветствую.
Не собирается:
dcc-cgp.c: In function 'main':
dcc-cgp.c:390: warning: assignment makes pointer from integer without a cast
cc -pthread -lkvm dcc-cgp.o .../clntlib/libclnt.a .../dcclib/libdcc.a .../clntlib/libclnt.a .../dcclib/libdcc.a -lm -lresolv -o dcc-cgp
/usr/bin/ld: cannot find -lkvm
collect2: ld returned 1 exit status
make[1]: *** [dcc-cgp] Error 1
make: *** [all] Error 2
27.12.2011 в 13:17
Это вы забыли приложить dcc-CGP-nonFreeBSD.patch
27.12.2011 в 13:18
Ну а про траффик — у меня есть ограничение на внешний траффик — 10Мбит, а приватная сеть — 1Гбит. Хотя, если говорить о «правильности» — то неправильно трижды — есть выделенная виртуалка, которая посвящена разбору почты и которой письмо отдается трижды с каждого сервера — проверить на вирусы в clamav, на спам в dspam и на него же в spamassassin. Вот теперь, вероятно, будет еще и dcc. Если бы я умел писать на С — наверное написал бы некий суммарный хелпер, единожды «скармливающий» письмо всем фильтрам сразу.
27.12.2011 в 15:52
Сборку победил, удалив -lkvm из Makefile.
Далее оказалась куча засад — при каждом рестарте dccifd садится на разные порты, поэтому настроить хелпер не представляется возможным :(
27.12.2011 в 15:59
1. Два коммента назад: пролема с «cannot find -lkvm» результат того, что вы забыли приложить dcc-CGP-nonFreeBSD.patch
2. man dccifd говорит нам, что:
Это не работает?
27.12.2011 в 16:08
Ой, перед надвигающимся НГ что-то плохо соображаю, приношу извинения.
Проверю — отпишусь.
27.12.2011 в 20:33
Собрал, запустил. Работает, но видимо что-то не так я настроил, поскольку несколько систем ругнулись и повторять посылку не хотят:
Technical details of permanent failure:
Google tried to deliver your message, but it was rejected by the recipient domain. We recommend contacting the other email provider for further information about the cause of this error. The error that the other server returned was: 551 551 8858225 4.9.9 mail 8858225 from 209.85.215.182 temporary rejected, try again later (state 18).
27.12.2011 в 21:23
temporary rejected — это признак того, что работает dcc-грейлистинг. Но по приведенному отчету не совсем понятно что было не так. Я бы посоветовал включить SMTP-лог получения и лог dcc-хелпера на максимальный уровень и посмотреть в лог, что будет происходить. Ну и текущий лог посмотрите по id сессии 8858225. Что там происходило.
Ну и версия CGP должна быть не старая. Не хуже, чем 5.2.x скорее всего.
27.12.2011 в 21:46
Хм...
SMTPI-429257 cmd: RCPT TO:
SMTPI-429257 rsp: 250 recipient will leave the Internet
SMTPI-429257 cmd: DATA
SMTPI-429257 rsp: 354 Enter mail, end with «.» on a line by itself
SMTPI-429257 [8858225] failed to submit: Error Code=external filter rejected the message (4.9.9 mail 8858225 from 209.85.215.182 temporary rejected, try again later)
т.е. сначала CGP говорит — давай мессагу, а потом — иди лесом.
версия 5.2с4
27.12.2011 в 22:12
Это нормально. Тут, увы, не видно, что именно ответил ваш SMTP. Что было дальше? Чем закончилось SMTPI-429257 ?
28.12.2011 в 00:10
SMTPI-429257 rsp: 551 8858225 4.9.9 mail 8858225 from 209.85.215.182 temporary rejected, try again later
SMTPI-429257 cmd: QUIT
SMTPI-429257 rsp: 221 myhost CommuniGate Pro SMTP closing connection
SMTPI-429257 TLS connection is closing
SMTPI-429257 closing connection
SMTPI-429257 releasing stream
28.12.2011 в 00:41
Вот это (rsp: 551 8858225 4.9.9 mail 8858225) уже не хорошо. Теперь надо посмотреть, какой ответ приходит непосредственно от хелпер. Поставьте лог dcc-хелпера на максимальный уровень.
28.12.2011 в 00:58
Уже стояло:
QUEUE ([8858225]) from sender, 1711 bytes (...)
QUEUE ([8858225]) enqueued, nTotal=1
QUEUE ([8858225]) opened, 1 open
QUEUE ([8858225]) applying server rules
ENQUEUER ([8858225]) rule (DCC) conditions met
EXTFILTER (DCC-CGP) out (28): 1052 FILE Queue/8858225.msg\n
EXTFILTER (DCC-CGP) inp (87): 1052 ERROR «4.9.9 mail 8858225 from 209.85.215.182 temporary rejected, try again later»
ENQUEUER ([8858225]) [8858225] rule (DCC): filter (DCC-CGP) report: 4.9.9 mail 8858225 from 209.85.215.182 temporary rejected, try again later
QUEUE ([8858225]) closed, 0 open
QUEUE ([8858225]) dequeued, nTotal=0
QUEUE ([8858225]) deleted
SMTPI-429257 [8858225] failed to submit: Error Code=external filter rejected the message (4.9.9 mail 8858225 from 209.85.215.182 temporary rejected, try again later)
28.12.2011 в 09:03
Ну вот уже понятнее: Хелпер говорит: «ERROR «4.9.9 mail 8858225 from», а CGP его превращает в «551 8858225 4.9.9 mail 8858225 from»
Это потому, что CGP 5.2с4 видимо не умеет правильно отрабатывать расширенные коды возврата. Есть ли возможность обновить CGP (начиная с 5.2.16 это точно работает, раньше — не знаю)? Если нет, то можно приложить патч на хелпер, который переключит его в старую схему работы без расширенных кодов. Грейлистинг заработает, но сообщение о причине задержки отправляющей стороне будет малоинформативное.
Если обновить CGP не получится, я чуть позже выложу патч. Это как раз то изменение, что я сделал относительно: «изменил коды ошибок GREY_XCODE и DCC_XCODE на x.9.9. Это позволяет сообщать отправляющей стороне о причине ошибки в момент работы greylist-инга;». Для старых версий CGP надо откатить это изменение.
28.12.2011 в 16:06
Вот такой патч для старых CGP:
29.12.2011 в 08:21
Да, после обновления CGP всё заработало как следует.
Спасибо за помощь.