Есть огромное желание прикрутить clamav без amavis-a к postfix-у.
Для сего прочитался:
skif@merlin /usr/local/etc/postfix :less /usr/local/share/doc/postfix/FILTER_README
Наваялся согласно сего скрипт следующего содержания:
#!/bin/sh
INSPECT_DIR=/tmp #Каталог куда будут сохраняться письма для сканирования
SENDMAIL="/usr/local/sbin/sendmail -i"
VIRUSADMIN="virusalert@owe.com.ua" # адрес для уведомлениий
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
trap "rm -f $INSPECT_DIR/in.$$ $INSPECT_DIR/vr.$$ $INSPECT_DIR/vr1.$$" 0 1 2 3 15
cat > $INSPECT_DIR/in.$$ || {echo Cannot save mail to file; exit $EX_TEMPFAIL;}
# Проверка clamavscan
/usr/local/bin/clamscan -v -r --mbox --no-summary --stdout < ${INSPECT_DIR}/in.$$> $INSPECT_DIR/vr.$$
# Result
AV_RESULT=$?
case "$AV_RESULT" in
0)
# Ok! Send to user
$SENDMAIL "$@" <${INSPECT_DIR}/in.$$
exit 0
;;
#Other result
1)
...........................................
esac
echo "----------- VirusFilter ------------" >> $INSPECT_DIR/vr1.$$
$SENDMAIL -f $VIRADMIN -r $VIRADMIN -F "Antivirus" "$VIRADMIN" < $INSPECT_DIR/vr1.$$
exit $EX_TEMPFAIL
;;
esac
exit 0
Потом поробовал как там написано прикрутить как контекстный фильтр:
-------------------------------------------------------------------
3 - Define the content filter in the Postfix master file:
/etc/postfix/master.cf:
filter unix - n n - - pipe
flags=Rq user=filter argv=/somewhere/filter -f ${sender} -- ${recipient}
To turn on content filtering for mail arriving via SMTP only, append
"-o content_filter=filter:dummy" to the master.cf entry that defines
the Postfix SMTP server:
/etc/postfix/master.cf:
smtp inet ...stuff... smtpd
-o content_filter=filter:dummy
--------------------------------------------------------------------
mailfilter unix - n n - - pipe
flags=Rq user=filter argv=/user/local/script/mail/mailfilter.sh -f ${sender} -- ${recipient}
smtp inet - - - - - smtpd
-o content_filter=mailfilter:dummy
Но увы, результат -почта даже без вложений не ходит - postqueue -p говорит о отсутствии файла, куда надо было бы сбрасывать письмо.
Ладно, забудем про это идем другим путем, вешаем как сервис на порт.
Смотрю там же и делаю (приведу уже конечный результат):
main.cf:
content_filter = scan:localhost:10025
master.cf:
localhost:10025 inet n n n - 10 spawn
user=clamav argv=/usr/local/script/mail/mailfilter.sh 127.0.0.1 10026
127.0.0.1:10026 inet n - n - 10 smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o myhostname=127.0.0.1
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
Результат тот же.
Почта просто не ходит. Висит в очереди, хоть и без ошибок, но висит.
Как с этим побороться?