Есть мысль отвергать письма не прошедшие спамооборону в рамках smtp-сессии.
Спамооборона подключается к sendmail-у через Milter строкой:INPUT_MAIL_FILTER(`sp-milter', `S=local:/var/run/sp-milter.sock, F=T, T=C:1m;S:20s;R:20s;E:1m')
если почта не проходит, то в заголовок письма добавляется:
X-Spam-Ystatus: hits= 9.50
X-Spam-Flag: YES
X-Spam-Yversion: Spamooborona-3.2работает замечательно.
Для отсекания почты, по заголоку "X-Spam-Flag: YES", в smtp-сессии написал правила:define(`RxSPAMFLAG', `spam|YES')
LOCAL_CONFIG
KSPAMFLAG regex -a@MATCH -f RxSPAMFLAGLOCAL_RULESETS
HX-Spam-Flag: $>CheckXSpamFlag
SCheckXSpamFlag
R$* $: $(SPAMFLAG $&{currHeader} $: OK $)
ROK $@ OK
R$* $#error $@ 5.7.1 $: "550 No, thanks"Оно работает тоже замечательно, если письмо уже отправляется с заголовком
X-Spam-Flag: YES
а вот если заголовок добавляется спамообороной, то письмо не отсекается. Я так понимаю, что sendmail выполняет milter-плагины после проверки заголовков, хотя проверка заголовков в mc файле стоит ниже проверки спамообороной. Можно ли как-то сделать проверку заголовков уже после выполнения milter-плагинов?
>[оверквотинг удален]
> R$*
>
> $#error $@ 5.7.1 $: "550
> No, thanks"
> Оно работает тоже замечательно, если письмо уже отправляется с заголовком
> X-Spam-Flag: YES
> а вот если заголовок добавляется спамообороной, то письмо не отсекается. Я так
> понимаю, что sendmail выполняет milter-плагины после проверки заголовков, хотя проверка
> заголовков в mc файле стоит ниже проверки спамообороной. Можно ли как-то
> сделать проверку заголовков уже после выполнения milter-плагинов?по моему легче поставить за спамобороной milter, который будет эти заголовки проверять.
> по моему легче поставить за спамобороной milter, который будет эти заголовки проверять.Благодарю за идею. т.к. штатных средств так и не нашел, написал небольшой milter решающий мою проблему, хотелось бы конечно без лишних демонов, но на безрыбии...
>> по моему легче поставить за спамобороной milter, который будет эти заголовки проверять.
> Благодарю за идею. т.к. штатных средств так и не нашел, написал небольшой
> milter решающий мою проблему, хотелось бы конечно без лишних демонов, но
> на безрыбии...Спамоборона заголовок X-Spam-Flag: YES ставит при наборе письмом более 9 балов (в документации указано точное число) и в настройках спамобороны также есть параметр при наборе какого количества балов письмо отвергается мильтром на стадии SMTP, либо с выдачей заданного сообщения удалённому серверу либо по тихому. Ниже этого порога но больше 9 балов письмо не смотря на пометку спам (можно в спамобороне включить модификацию заголовка темы) доставляется пользователю для принятия решения. По умолчанию этот порог установлен в 40 балов. Так что химичить с сендмайлом не нужно достаточно почитать документацию на спамоборону и мильтер спамобороны будет делать все необходимые действия. Да и от 9 до 20 балов набирают многие нужные сообщения так что не нужно сильно занижать.
Ну да, это есть в полноценной версии, а я не уточнил, что у меня спамооборона1024, там весь расширенный функционал зарезан.
> Я так
> понимаю, что sendmail выполняет milter-плагины после проверки заголовков,Не совсем так.
Посмотрите здесь - http://linux.ufaras.ru/sendmail2.html#16.A
На слово "нерациональность" не обращайте внимания (надо будет заменить чем-то более точным).
> Можно ли как-то
> сделать проверку заголовков уже после выполнения milter-плагинов?Средствами sendmail.cf, думаю, нет.
КАк вам уже подсказали - нужен еще один фильтр.
Наверное, здесь можно будет использовать milter-manager для выборочного вызова СО и вашего фильтра.
ИЛи откажитесь от идеи делать это на этапе smtp-сессии и используйте procmail.
>> Я так
>> понимаю, что sendmail выполняет milter-плагины после проверки заголовков,
> Не совсем так.
> Посмотрите здесь - http://linux.ufaras.ru/sendmail2.html#16.A
> На слово "нерациональность" не обращайте внимания (надо будет заменить чем-то более точным).Благодарю, стало светлее, но пока в голове белый день еще не настал :)
>> Можно ли как-то
>> сделать проверку заголовков уже после выполнения milter-плагинов?
> Средствами sendmail.cf, думаю, нет.
> КАк вам уже подсказали - нужен еще один фильтр.
> Наверное, здесь можно будет использовать milter-manager для выборочного вызова СО и вашего
> фильтра.
> ИЛи откажитесь от идеи делать это на этапе smtp-сессии и используйте procmail.milter-manager тут излишен, на мой взляд. У меня сейчас мой milter и СО описаны следующим образом:
INPUT_MAIL_FILTER(`sp-milter', `S=local:/var/run/sp-milter.sock, F=T, T=C:1m;S:20s;R:20s;E:1m')dnl
INPUT_MAIL_FILTER(`sokillspam', `S=inet:999@localhost')dnl
define(`confINPUT_MAIL_FILTERS', `sp-milter,sokillspam')dnlт.к. SMTP-сессия не завершается пока не пройдены все плагины или один из них не отклонил письмо, и моему плагину передаются все заголовки добавленные СО, я совершенно нормально выполняю свою задачу: проверяю, что решила СО и если нужно - отклоняю письмо в рамках SMTP-сессии. Отклонение письма сейчас выглядит так:
# telnet 1.1.1.1 25
Trying 1.1.1.1...
Connected to ok.net.
Escape character is '^]'.
220 ok.net ESMTP Sendmail 8.14.4/8.14.4; Thu, 30 Dec 2010 17:57:07 +0300 (MSK)
helo test
250 ok.net Hello 2.2.2.2.test.ru [2.2.2.2] (may be forged), pleased to meet you
mail from: test@test.ru
250 2.1.0 test@test.ru... Sender ok
rcpt to: test@ok.net
250 2.1.5 test@ok.net... Recipient ok
data
354 Enter mail, end with "." on a line by itself
5555
.
554 5.7.1 Command rejected
quitprocmail - было бы самым легким решением, да, но требования отклонять во время SMTP-сессии не мои, увы.
> milter-manager тут излишен, на мой взляд. У меня сейчас мой milter и
> СО описаны следующим образом:Я вам сейчас не могу подсказать точно, в каких случаях он именно вам может понадобиться.
Ну вот приблизительно. НАпример, вы захотите, чтобы почта _для_ HUGO BOSS или
_от_ еще более HUGO BOSS (даже если она наберет 1000 баллов спам-веса) сохранялась в целях вашей же безопасности ;) Хотя именно эту проверку вы можете сделать и в своем фильтре, это будет правильнее.ТОгда расскажу, зачем мне нужен был до позарезу milter-manager в пору работы с СО (полная версия). В ту пору (2006-2008) белый список СО можно было назвать белым условно. Письмо проверялось в любом случае, а затем из получившегося веса отнималось определенное значение. В итоге спам-вес значительно снижался, и письмо не попадало в разряд спама. Мне же нужно было, чтобы немалая часть адресов не проверялась вообще, что, оказалось, невозможно сделать средствами самой СО! Вот тут бы Milter mаnager и пригодился бы.
Кстати, СО-1024 использует белый список?
>[оверквотинг удален]
> rcpt to: test@ok.net
> 250 2.1.5 test@ok.net... Recipient ok
> data
> 354 Enter mail, end with "." on a line by itself
> 5555
> .
> 554 5.7.1 Command rejected
> quit
> procmail - было бы самым легким решением, да, но требования отклонять во
> время SMTP-сессии не мои, увы.Понятно, увы ...