Postfix фильтрация исходящих с сервера сообщений. [SOLVED]

Есть связка из postfix+spamassassin+clamav+dovecot
Спамасассин проверяет и входящую и исходящую почнту.

Задача: Сделать фильтрацию исходящих писем на предмет спама.
Т.е. чтобы если уходящее с сервера пиьмо имеет хедер X-Spam-Flag: YES, то его не отправлять, а например дропать.

Я так понимаю мне поможет headers_checks, вот только как эту проверку запиинкть конкретно полсе проверки на спам и конкретно для исходящих с сервера сообщений.

1

Сделать фильтрацию исходящих писем на предмет спама -
эмм а у тебя почта через этот сервер уходит не только локальная, а еще и пересылается с других доменов?

Ога. И ещё пересылается на

Ога. И ещё пересылается на другие домены, наприме у локального юзера стоит пересылка на мэйл-ру, и вот если туда валит спам, то и мэйл.ру от тоже валит, соотв в блек листы можно попасть.
Также, если юзер завирусится и вирь с его акка начнёт спам слать, то тоже можно попасть в блек листы. Соотв, всё что исходящее с сервера имеет X-Spam-Flag: YES, надо заворачивать.

joper написал(а): Также, если

joper написал(а):
Также, если юзер завирусится и вирь с его акка начнёт спам слать, то тоже можно попасть в блек листы.

по моему, вирусу нет дела до вашего маил-сервера, а рассылку он ведет напрямую. достаточно закрыть 25 порт для НЕ вашего сервера + авторизацию добавить...
или вирусня настолько продвинулась, что ищет-> авторизуется-> а затем и шлет спам через ваш smtp сервер ?

________________________
"We Will Win"

Есть такая штука как

Есть такая штука как smtp-gated.
Но для этого тебе всю почту выходящую с пoстфикса придется завернуть на smtp-gated днатом или чем еще.

Спс за совет, но я думаю, это

Спс за совет, но я думаю, это средствами поствикса сделать можно, зачемс плодить сущности-то зазря.

,

Если я не ошибаюсь, при подключении spamassassin как smtp-proxy или как content_filter вся почта и так попадает в него.
Думаю надо смотреть его настройки.

Да, а потом возваращается

Да, а потом возваращается постфиксу. Настройки спамассасина тут непричём. Нужно отлавливать исходящие именно полсе content_filter и что-то с ними делать.

.

ну тогда поидее совсем просто должно быть в случае с smtp-proxy: когда описывается прием почты назад в postfix от асасина в master.cf:

127.0.0.1:1025 inet n - n - - smtpd
...
 -o headers_check=regexp://...

Для content_filter надо подумать, но тоже наверное както так

Да, я уже дошёл до этого

Да, я уже дошёл до этого :)
Только теперь следующая проблема:
Нужно проверять сразу несколько хедеров одновременно, а именно X-Spam-Flag: и To:
Но headers_checks умеет проверять только поодному. Т.е. для одного действия он не может проверить больше чем 1 хедер.

.

тогда напиши простенький скрипт, котроый это будет делать и дай его в параметр приема от асасина как content_filter

Или, если мне не изменяет память, наряду с OK,REJECT в действиях фильтра header_checks можно перенаправить в какойто другой фильтр (тот что ты напишешь :)

UPD: или сделай еще один файл для header_checks в котором проверяй второй раз. Типа первый раз в основном файле: если попадает под X-flag-spam, то FILTER header_check = regexp:/file2 в котором уже REJECT если подходящий "TO:"

ps. синтаксис по памяти придумывал, но чтото такое должно быть

izbushka написал(а): UPD:

izbushka написал(а):
UPD: или сделай еще один файл для header_checks в котором проверяй второй раз. Типа первый раз в основном файле: если попадает под X-flag-spam, то FILTER header_check = regexp:/file2 в котором уже REJECT если подходящий "TO:"
ps. синтаксис по памяти придумывал, но чтото такое должно быть

Хм... По идее должно работать, щас проверю.

izbushka написал(а):FILTER

izbushka написал(а):
FILTER header_check = regexp:/file2 в котором уже REJECT если подходящий "TO:"
ps. синтаксис по памяти придумывал, но чтото такое должно быть

Не работает, ты уверен, что так можно?
Mar 9 15:44:11 postfix/qmgr[19857]: 94937B1834: from=test_user@xxx.ru, size=505, nrcpt=1 (queue active)
Mar 9 15:44:11 postfix/qmgr[19857]: warning: connect to transport private/header_checks = regexp: No such file or directory

.

Значит нельзя, но в content_filter перенаправить можно.

Заглянул я в доки постфикса и увидел, что можно делать письмам с X_SPAM_FLAG HOLD, а потом скриптом проходить по таким письмам:

Цитата:
Mail that is placed on hold can be examined with
the postcat(1) command, and can be destroyed or
released with the postsuper(1) command.

Может есть и легче способ, пока в голову не приходит

Вот нашёл как можно

Вот нашёл как можно сделать
http://onetforum.com/fourm/viewtopic.php?p=63#63
Но Мне так не нравится, хотелось бы спам пускать, через отдельный транспорт в master.cf, а там уже его проверять 2-й раз по адресу получателя. Я так попробовал сделать, ну у мя письмо в петлю попадает.

main.cf

......
header_checks = regexp:/etc/postfix/check_spam_flag
......
# cat /etc/postfix/check_spam_flag
/^X-Spam-Flag: YES/ FILTER check_domain:dummy

master.cf

# AV scan filter (used by content_filter)
scan      unix  -       -       n       -       -      smtp
    -o smtp_send_xforward_command=yes
    -o smtp_tls_security_level=none


127.0.0.1:10026 inet  n -       n       -       -      smtpd
    -o content_filter=
    -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_address_mappings
    -o smtpd_helo_restrictions=
    -o smtpd_client_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks_style=host
    -o smtpd_authorized_xforward_hosts=127.0.0.0/8

smtp      inet  n       -       n       -      -       smtpd
    -o content_filter=spam

#Spamassassin
spam      unix  -       n       n       -      -       pipe
    flags=Rq user=vmail argv=/usr/pkg/bin/spamc -u vmail -e /usr/pkg/sbin/sendmail -f $sender $recipient

# Dovecot lDA
dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail argv=/usr/pkg/libexec/dovecot/deliver -f ${sender} -d ${recipient}

# Custom filter
check_domain   unix  -       n       n       -       -       pipe
   -o smtp_send_xforward_command=yes
   -o disable_mime_output_conversion=yes
   -o header_checks=regexp:/usr/pkg/etc/postfix/check_domains
   flags=Rq user=vmail argv=/usr/sbin/sendmail -f ${sender} ${recipient}

Такая ошибка: Diagnostic-Code: X-Postfix; too many hops

Есть идеи как сделать,чтобы письмо не попадало в петлю?

,

видимо надо на выходе из check_domain делать -o receive_override_options=no_header_checks
И вообще, зачем ты делаешь для check_domain
header_checks=regexp:/usr/pkg/etc/postfix/check_domains ?
у тя ж он уже почекан.
Первый раз чекаешь, отправляешь в check_domain, а check_domain уже должен сам проверить хедер То. На выходе не надо проверять.

izbushka написал(а): И

izbushka написал(а):
И вообще, зачем ты делаешь для check_domain
header_checks=regexp:/usr/pkg/etc/postfix/check_domains ?
у тя ж он уже почекан.
Первый раз чекаешь, отправляешь в check_domain, а check_domain уже должен сам проверить хедер То. На выходе не надо проверять.

Собсно у мя это и есть 2-й чек. 1-й в header_checks = regexp:/etc/postfix/check_spam_flag. А как он(check_domain) сам должен хедер проверять без header_checks?

izbushka написал(а):
видимо надо на выходе из check_domain делать -o receive_override_options=no_header_checks

Попробую.

,

А, я понял как ты хочешь.
Сразу не заметил что check_domain это не фильтр а sendmail у тебя. Получается он подает почту постфиксу как новое письмо, которое опять по всем фильтрам и так далее..

Надо чтоб sendmail возвращал письмо отдельному постфикс процесу, по аналогии с асасином:

127.0.0.1:10999 inet n  -       n       -       -  smtpd
-o content_filter=
-o header_checks=

который уже не будет отправлять ее в header_check
Осталось узнать как сказать sendmail'у отправить почту на localhost порт 10999 (думаю это возможно)

Проблем а вто, что например

Проблем а вто, что например спамассин отправляет также сендмылом
flags=Rq user=vmail argv=/usr/pkg/bin/spamc -u vmail -e /usr/pkg/sbin/sendmail -f $sender $recipient
И 2-й раз письма не проверяются

,

Нашел решение?

Пока -нет.

Пока -нет.

procmail?

procmail?

Можно, но хотелось бы

Можно, но хотелось бы обойтись без него.

если меня не глючит, то за

если меня не глючит, то за __отправку__ отвечает smtp, а не smtpd

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Ага, вроде оно, попробую-

Ага, вроде оно, попробую- отпишусь.

Вообщем нашёл простое

Вообщем нашёл простое решение. :)
Spamassassin умеет добавлять хедры соотв добавляем ко всем проверенным письмам:
local.cf

...
add_header all ToAndRate _YESNOCAPS_ _HEADER(To)_
...

Далее делаем header_checks у постфикса в main.cf:

...
header_checks = regexp:/usr/pkg/etc/postfix/check_out_spam
...

Используем контрукцию if endif, чтобы проверить 1 и тот же хедер. Правила применяются поочереди, если после 1-го совпадения стоит действие, то оно применятся к письму и письмо далее не проверяется.
Соотв:
Если спам-флаг стоит и письмо идёт на "конечный" для сервера домен, то пропускаем.
Остальные(после первого правила остаются только как раз исходящие письма) с флагом спама, редиректим куда следует.
check_out_spam

if /^X-Spam-ToAndRate:/
/^X-Spam-ToAndRate: YES.*(domain1\.ru|domain2\.ru|domain3\.ru)/ OK
/^X-Spam-ToAndRate: YES/ REDIRECT 
endif

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".