Отправляет email-рассылки с помощью сервиса Sendsay

postfix+clamav

при получении письма пишет:
Command died with status 1: "/etc/clamav/myfilter.sh"

делал следущее:
установил
clamav*.deb
clamav-base*.deb
clamav-daemon*.deb
clamav-freshclam*.deb

в /etc/postfix/master.cf
исправил строку:
smtp inet n - n - - smtpd
на
smtp inet n - n - - smtpd -o content_filter=myfilter:dummy
туда же добавил
myfilter unix - n n - - pipe
flags=R user=clamav argv=/etc/clamav/myfilter.sh -f ${sender} -- ${recipient}

содержимое myfilter.sh:
#!/bin/sh
INSPECT_DIR=/tmp #Каталог куда будут сохраняться письма для сканирования
SENDMAIL="/usr/local/sbin/sendmail -i"
VIRUSADMIN="postmast***@m*****.ru" # адрес для уведомлениий

EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# строка для запуска spamassassin
# FILTER_SPAMC="/usr/local/bin/spamc -u spamfilter -U /var/run/spamd.sock"

trap "rm -f $INSPECT_DIR/in.$$ $INSPECT_DIR/vr.$$ $INSPECT_DIR/vr1.$$" 0 1 2
3 15

# Проверка на спам
# cat | $FILTER_SPAMC > $INSPECT_DIR/in.$$ || { echo Cannot save mail to file;
exit $EX_TEMPFAIL; }

# Проверка на вирусы
/usr/local/bin/clamscan -v -r --mbox --no-summary --stdout ${INSPECT_DIR}/in.$$>$INSPECT_DIR/vr.$$

# Результат проверки
AV_RESULT=$?

case "$AV_RESULT" in
0)
# Проверено. Мин нет :)
$SENDMAIL "$@" <${INSPECT_DIR}/in.$$
exit 0
;;
1)
# Обнаружен вирус. Посылаем уведомление админу
echo "Subject: VIRUS FOUND" >> $INSPECT_DIR/vr1.$$
echo >> $INSPECT_DIR/vr1.$$
echo "************************************************" >> $INSPECT_DIR/vr1.$$
echo "* MAIL *" >> $INSPECT_DIR/vr1.$$
echo "************************************************" >> $INSPECT_DIR/vr1.$$
echo >> $INSPECT_DIR/vr1.$$
# Включаем в отчет реальные адреса релеев
grep Received $INSPECT_DIR/in.$$ >> $INSPECT_DIR/vr1.$$
echo "Mail from: $2 (may be forget)" >> $INSPECT_DIR/vr1.$$
echo "To: $4" >> $INSPECT_DIR/vr1.$$
grep Subject $INSPECT_DIR/in.$$ >> $INSPECT_DIR/vr1.$$
echo >> $INSPECT_DIR/vr1.$$
echo "************************************************" >> $INSPECT_DIR/vr1.$$
echo "* Virus(es) *" >> $INSPECT_DIR/vr1.$$
echo "************************************************" >> $INSPECT_DIR/vr1.$$
# Включаем в отчет список вирусов
cat $INSPECT_DIR/vr.$$ >> $INSPECT_DIR/vr1.$$
$SENDMAIL -f $VIRUSADMIN -r $VIRUSADMIN -F "Antivirus" $VIRUSADMIN < $INSPECT_DIR/vr1.$$
exit 0
;;
*)
# Произошла ошибка в работе антивируса. Сообщим об ошибке админу
echo "Subject: ANTIVIRUS FAILED" >> $INSPECT_DIR/vr1.$$
echo >> $INSPECT_DIR/vr1.$$
echo "************************************************" >> $INSPECT_DIR/vr1.$$
echo "* Antivirus Failed with next problem *" >> $INSPECT_DIR/vr1.$$
echo "************************************************" >> $INSPECT_DIR/vr1.$$
case "$AV_RESULT" in
40)
echo "* Unknown option passed. *" >> $INSPECT_DIR/vr1.$$
;;
50)
echo "* Database initialization error. *" >> $INSPECT_DIR/vr1.$$
;;
52)
echo "* Not supported file type. *" >> $INSPECT_DIR/vr1.$$
;;
53)
echo "* Can't open directory. *" >> $INSPECT_DIR/vr1.$$
;;
54)
echo "* Can't open file. (ofm) *" >> $INSPECT_DIR/vr1.$$
;;
55)
echo "* Error reading file. (ofm) *" >> $INSPECT_DIR/vr1.$$
;;
56)
echo "* Can't stat input file / directory. *" >> $INSPECT_DIR/vr1.$$
;;
57)
echo "* Can't get absolute path name of current *" >> $INSPECT_DIR/vr1.$$
echo "* working directory. *" >> $INSPECT_DIR/vr1.$$
;;
58)
echo "* I/O error, please check your filesystem. *" >> $INSPECT_DIR/vr1.$$
;;
59)
echo "* Can't get information about current user *" >> $INSPECT_DIR/vr1.$$
echo "* from /etc/passwd. *" >> $INSPECT_DIR/vr1.$$
;;
60)
echo "* Can't get information about user *" >> $INSPECT_DIR/vr1.$$
echo "* clamav (default name) from /etc/passwd. *" >> $INSPECT_DIR/vr1.$$
;;
61)
echo "* Can't fork. *" >> $INSPECT_DIR/vr1.$$
;;
63)
echo "* Can't create temporary files/directories *" >> $INSPECT_DIR/vr1.$$
echo "* (check permissions). *" >> $INSPECT_DIR/vr1.$$
;;
64)
echo "* Can't write to temporary directory (please *" >> $INSPECT_DIR/vr1.$$
echo "* specify another one). *" >> $INSPECT_DIR/vr1.$$
;;
70)
echo "* Can't allocate and clear memory (calloc). *" >> $INSPECT_DIR/vr1.$$
;;
71)
echo "* Can't allocate memory (malloc). *" >> $INSPECT_DIR/vr1.$$
;;
*)
echo "Unknown error $AV_RESULT" >> $INSPECT_DIR/vr1.$$
;;
esac
echo "************************************************" >> $INSPECT_DIR/vr1.$$
$SENDMAIL -f $VIRADMIN -r $VIRADMIN -F "Antivirus" "$VIRADMIN" < $INSPECT_DIR/vr1.$$
exit $EX_TEMPFAIL
;;
esac

exit 0

chmod 755 /etc/clamav/myfilter.sh

объясните пожалуйста в чем проблема и как побороть.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 22566; Возраст листа: 839; Участников: 1458
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/473103

Ответить   Thu, 10 Nov 2005 23:30:55 +0300 (#473103)

 

Ответы:

Gift пишет:

а не легче ли clamsmtp поставить?
если нажно как собственный контен-фильр, могу дать свой скрипт и скажу
как настроить, работает на ура.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 22574; Возраст листа: 840; Участников: 1461
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/473395

Ответить   Fri, 11 Nov 2005 14:21:25 +0400 (#473395)

 

Сизов С.В. пишет:

Скрипт и настройки в студию!

Ответить   Oleg Ponomarev Sat, 12 Nov 2005 11:38:22 +0200 (#473877)

 

On Sat, Nov 12, 2005 at 11:38 +0200, Oleg Ponomarev wrote:

Статья <<ClamAV + clamsmtpd + Postfix>>
http://www.nixp.ru/cgi-bin/go.pl?q=articles;a=clamav_postfix

Ответить   Sat, 12 Nov 2005 20:39:22 +0200 (#474162)

 

Max пишет:

Спасибо!

Ответить   Oleg Ponomarev Sun, 13 Nov 2005 08:37:46 +0200 (#474314)

 

Oleg Ponomarev пишет:

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

#!/bin/sh

# Simple shell-based filter. It is meant to be invoked as follows:
# /path/to/script -f sender recipients...

# Localize these.

INSPECT_DIR=/var/spool/postfix/filter
SENDMAIL="/usr/sbin/sendmail -i"
parm=$@
# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

CF_ERR=0 #Флаг ошибки
# CF_ERR=0 - нет ошибок
#CF_ERR=1 - запрешенные слова
#CF_ERR=2 - наличие вложения

# Clean up when done or when aborting.

# Функция возврата сообщения
message_reject ()
{
cp in.$$ $cf_msg
echo $parm > $cf_msg.avg
echo Message content rejected
. /etc/postfix/cf_msg # Создание сообщения об ошибке
}

message_action ()
{
subj=`cat in.$$ | grep Subject:`
action=`echo $subj | gawk '{ print $5}'`
message=`echo $subj | gawk '{ print $3}'`
case $action in
"remove")
rm -f $message
rm -f $message.avg
exit $?
;;
"send")
msg_avg=`cat $message.avg`
$SENDMAIL $msg_avg < $message
rm -f $message
rm -f $message.avg
exit $?
;;
esac
exit $?
}

trap "rm -f in.$$" 0 1 2 3 15

# # Start processing.
cd $INSPECT_DIR || {
echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
cat >in.$$ || {
echo Cannot save mail to file; exit $EX_TEMPFAIL; }

# #Получение индекса письма Message-Id
cf_msg=`cat in.$$| grep -f /etc/postfix/content-filter/id.list | gawk
'{ print $2}' | sed -e 's/[<,>]//g' | sed -e 's/[@]/ @ /g' | gawk '{
print $1 }'`

echo $4 | grep -qf /etc/postfix/content-filter/filter.list && {
message_action; exit $?;
}

echo $4 | grep -qf /etc/postfix/content-filter/allow.list && {
$SENDMAIL "$@" <in.$$; exit $?;
}
grep -qf /etc/postfix/content-filter/words.list <in.$$ && CF_ERR=1
#Проверка на запрещенные слова
grep -qf /etc/postfix/content-filter/atach.list <in.$$ && CF_ERR=2
#Проверка на вложения

case $CF_ERR in
1) message_reject;;
2) message_reject ;;
*) $SENDMAIL "$@" <in.$$ ;;
esac

exit $?

прикручивание:
master.cf

filter unix - n n - 10 pipe
flags=Rq user=filter argv=/etc/postfix/cf-mail -f ${sender} --
${recipient}
smtp inet n - y - - smtpd
-o content_filter=filter:dummy

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 22604; Возраст листа: 843; Участников: 1462
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/474765

Ответить   Mon, 14 Nov 2005 08:52:16 +0400 (#474765)

 

Сизов С.В. пишет:

Ага, спасибо! Давно хотель понять как для постфикса писать такие
скриптики. Попробую прикрутить и разобраться что к чему.
ЗЫ. Ты не мог бы объяснить значение строк в master.cf ?

Ответить   Oleg Ponomarev Mon, 14 Nov 2005 07:29:27 +0200 (#474770)

 

Oleg Ponomarev пишет:

filter ... указание на фильтр контекста, т.е. говорится что выполняется
через pipe и параметры запуска,
далее указание smpt что при отправке в фильтр говрить что доставлено,
далее все обробатывается фильтром, при офибке в фильтре придет письмо с
ошибкой. Это если кратко, а подробно описано в документации к postfix'у

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 22607; Возраст листа: 843; Участников: 1462
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/474782

Ответить   Mon, 14 Nov 2005 09:49:55 +0400 (#474782)

 

Сизов С.В. пишет:

Спасибо, кратко для начала пойдет.

Ответить   Oleg Ponomarev Mon, 14 Nov 2005 08:17:49 +0200 (#474802)

 

Hello Сизов,

Friday, November 11, 2005, 1:21:25 PM, you wrote:

да, знаю.. давно уж замутил ... хотел без дополнительного сервиса
почту фильтровать...
... правда вопросов куча возникло...:

1. clamsmtp только smtp на вирусы проверяет или pop3 тоже?
2. как сделать чтоб clamsmtp не удалял а личил письма?

а обясни плиз это:
# #Получение индекса письма Message-Id
cf_msg=`cat in.$$| grep -f /etc/postfix/content-filter/id.list | gawk
'{ print $2}' | sed -e 's/[<,>]//g' | sed -e 's/[@]/ @ /g' | gawk '{
print $1 }'`

echo $4 | grep -qf /etc/postfix/content-filter/filter.list && {
message_action; exit $?;
}

echo $4 | grep -qf /etc/postfix/content-filter/allow.list && {
$SENDMAIL "$@" <in.$$; exit $?;
}
grep -qf /etc/postfix/content-filter/words.list <in.$$ && CF_ERR=1
#Проверка на запрещенные слова
grep -qf /etc/postfix/content-filter/atach.list <in.$$ && CF_ERR=2
#Проверка на вложения

case $CF_ERR in
1) message_reject;;
2) message_reject ;;
*) $SENDMAIL "$@" <in.$$ ;;
esac

exit $?

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 22632; Возраст листа: 844; Участников: 1464
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/475613

Ответить   Tue, 15 Nov 2005 17:13:19 +0300 (#475613)

 

957053717
Здравствуйте, Gift.

Вы писали 15 ноября 2005 г., 17:13:19:

Аналогичный вопрос: как сделать так, чтобы просто добавлялся
заголовок, по которому зараженные письма можно было бы складывать в
склад?

Ответить   Владимир Прохоров Tue, 15 Nov 2005 23:29:46 +0300 (#475785)

 

Hello Сизов,

Friday, November 11, 2005, 1:21:25 PM, you wrote:

да, знаю.. давно уж замутил ... хотел без дополнительного сервиса
почту фильтровать...
... правда вопросов куча возникло...:

1. clamsmtp только smtp на вирусы проверяет или pop3 тоже?
2. как сделать чтоб clamsmtp не удалял а личил письма?

а обясни плиз это:
# #Получение индекса письма Message-Id
cf_msg=`cat in.$$| grep -f /etc/postfix/content-filter/id.list | gawk
'{ print $2}' | sed -e 's/[<,>]//g' | sed -e 's/[@]/ @ /g' | gawk '{
print $1 }'`

echo $4 | grep -qf /etc/postfix/content-filter/filter.list && {
message_action; exit $?;
}

echo $4 | grep -qf /etc/postfix/content-filter/allow.list && {
$SENDMAIL "$@" <in.$$; exit $?;
}
grep -qf /etc/postfix/content-filter/words.list <in.$$ && CF_ERR=1
#Проверка на запрещенные слова
grep -qf /etc/postfix/content-filter/atach.list <in.$$ && CF_ERR=2
#Проверка на вложения

case $CF_ERR in
1) message_reject;;
2) message_reject ;;
*) $SENDMAIL "$@" <in.$$ ;;
esac

exit $?

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 22636; Возраст листа: 844; Участников: 1464
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/475709

Ответить   Tue, 15 Nov 2005 21:31:57 +0300 (#475709)

 

Gift пишет:

как было видно раньше письмо сохраняется в файл, далее в переменную
cf_msg вносится содержимое поля Message-Id:
т.е. происходит стение сохраненного файла, пропускается через grep для
поиска заголовков (/etc/postfix/content-filter/id.list -это список
возможных заголовков), далее убираем лишние значения из строки у
заголовка чтобы в последствии сохранить письмо индивидуальным индексом
(посмотрите исходник данного письма увидите почему нужно его приводить в
нормальный вид для дальнейшего подобного использования)

здесь смотрится входищий параметр от postfix'а, т.е. кому письмо, если
этот пользователь в списке /etc/postfix/content-filter/filter.list по
выполняется функция message_action

аналогшично, если письмо разрешенным доменам, то письмо отправляется
сразу иначе поддвергается анализу содержимого

в соответсвии с получаемой ошибкой выполняется действие

выход с генерацией кода ошибки

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

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 22644; Возраст листа: 845; Участников: 1461
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/475897

Ответить   Wed, 16 Nov 2005 10:27:02 +0400 (#475897)