The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Скрипт для объединения ClamAV + Postfix + SpamAssassin (clamav virus postfix spam filter)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: clamav, virus, postfix, spam, filter,  (найти похожие документы)
From: Дмитрий Козлов <dimman at kurskline.ru> Newsgroups: email Date: Mon, 21 Oct 2004 14:31:37 +0000 (UTC) Subject: Скрипт для объединения ClamAV + Postfix + SpamAssassin Написано много статей об интеграции ClamAV + Postfix + SpamAssassin с помощью Amavisd-new, clam-smtp и проч. Это добавляет проблем с настройкой дополнительного программного обеспечения. Зачастую достаточно одного скрипта, который справляется с поставленной задачей не хуже. Подразумевается, что postfix, clamav и spamassassin уже установлены. В файле 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=/usr/local/av/myfilter.sh -f ${sender} -- ${recipient} и собственно пишем скрипт /usr/local/av/myfilter.sh ------------------------------------------------------------ #!/bin/sh INSPECT_DIR=/tmp #Каталог куда будут сохраняться письма для сканирования SENDMAIL="/usr/local/sbin/sendmail -i" VIRUSADMIN="postmaster@мойдомен.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 ----------------------------------------------- Вот и все. Данный скрипт уже давно успешно работает на почтовом сервере с количеством клиентов более 500 В данном скрипте реализовано уведомление только администратора (имея дело с современными почтовыми вирусами уведомление отправителя и получателя просто противопоказано), зараженные письма просто убиваются. Для большинства админов этого достаточно.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Сергей (??), 12:55, 26/10/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Отлично работает!
    Правда, я добавил отправку уведомления получателю

    <<<<
    1)
    ...
    $SENDMAIL "$@" <${INSPECT_DIR}/vr1.$$
    exit 0
    >>>>
    и немного подправил пути для своей платформы.
    Еще есть в скрипте небольшая неточность, в конце нужно исправить имя переменной VIRADMIN на VIRUSADMIN

     
     
  • 2.2, steve (?), 22:11, 05/11/2004 [^] [^^] [^^^] [ответить]  
  • +/
    почему то пишет что нет доступа к фалу spamd(сокет) скрипт(myfilter) с правами юзера clamav 755 и уже пробовал c root 755 правами  может spamd не правильно запускаю??? FILTER_SPAMC="/usr/local/bin/spamc -u spamfilter -U /var/lock/subsys/spamd" c 644
     

  • 1.3, memphis (?), 18:19, 19/11/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему-то не работает...
    Выдаёт: Nov 19 18:08:51 freebsd postfix/pipe[2318]: DFC84B8B6: to=<postmaster@mail.ruskon002.local>, orig_to=<postmaster>, relay=myfilter, delay=3, status=deferred (temporary failure. Command output: /tmp/in.2319: No such file or directory )

    А отчёт шлёт "Can't stat input file / directory."

    Подскажите, где я не прав. Заранее благодарен.

     
  • 1.4, len (?), 15:55, 27/11/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    у меня вообще нет никакой реакции на фильтры при правке конфига master.cf

    Может подкините толковую доку ?

     
     
  • 2.6, Cj_Nik (?), 11:18, 30/11/2004 [^] [^^] [^^^] [ответить]  
  • +/
    было тоже самое, вот тока по буковкам ещё раз проверил и нашёл ошибку, уж незнаю как я так скопировал (content_filter) но в общем скрипт по крайней мере стал выполняться.

    В файле 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=/usr/local/av/myfilter.sh -f ${sender} -- ${recipient}

     
  • 2.7, Cj_Nik (ok), 11:28, 30/11/2004 [^] [^^] [^^^] [ответить]  
  • +/
    >у меня вообще нет никакой реакции на фильтры при правке конфига master.cf
    Тоже самое было, но у меня глупая ошибка в master.cf coUntent_filter=myfilter:dummy буковкой ошибся...
    Хоть скрипт выполняться стал


     

  • 1.5, Coolmax (?), 08:47, 30/11/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как бы ещё сделать такую штуку. После проверки в заголовок письма вставлялась строка:
    X-ClamAV-Status: Virus not detected
    X-ClamAV-TestTime: 2004-11-30 13:45:11

    Возможно ли такое?

     
  • 1.8, FreeLander (?), 12:49, 08/02/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    У меня все прекрасно работает. Отшивает все четко. Вот правда хотелось бы уточнить. Как можно было бы сделать чтобы он зараженные письма не отшивал а складывал в отдельную директорию? И как можно будет уведомлять отправителя вирусов?
     
  • 1.9, Elvis (??), 12:44, 25/02/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Rabotajet prekrasno, no vot poproboval ves spam pereodresovatj adminu (na vsiakij sluchaj... a sluchaji u nas raznyje)..

    dobavil spamc -E

    stal proveriatj:

    cat | $FILTER_SPAMC > $INSPECT_DIR/in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }

    AV_RESULT=$?

    if [ $AV_RESULT -eq 1 ]; then

        $SENDMAIL -f $SPAMADMIN -r $SPAMADMIN -F "Antispam system" "$SPAMADMIN" < $INSPECT_DIR/in$
        exit 1
    fi


    I skript nachel zhalovatsia: "Cannnot save mail to file"...

    V chiom zagvozdka? "cat" shtoli nenravitsia "1" exit code ot spamassassina?

     
  • 1.10, Нонейм (?), 21:00, 28/02/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    по поводу "X-ClamAV-Status: Virus not detected" сомнения меня берут. В данной реализации скрипта используется сканер файлов, который не знает ни про почту, ни тем более про заголовки почтовые. По-хорешему здесь бы clamsmtpd бы неплохо использовать. А так, все бы ничего, но письмо по 2 секунды проверяется. Причем письмо с темой "Тест" и таким же текстом... долгова-то как-то...
     
     
  • 2.13, Алекс (??), 10:59, 01/04/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Долго проверяется, потому что используется сканер, который при каждом старте загружает вирусную базу... Очевидно, было бы правильнее использовать демона. Ждем новой версии скрипта(с использованием clamd)!
     
     
  • 3.22, Алекс (??), 13:40, 05/10/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >Долго проверяется, потому что используется сканер, который при каждом старте загружает вирусную
    >базу... Очевидно, было бы правильнее использовать демона. Ждем новой версии скрипта(с
    >использованием clamd)!


    А почему бы не использовать в скрипте вместо clamscan утилиту clamdscan ?
    С ней гораздо быстрее работает, так как clamdscan является коннектором к демону clamd.

     
     
  • 4.39, Павел (??), 13:48, 18/09/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо. Отличная идея! Стало гораздо быстрее.
     

  • 1.11, Денис (??), 13:24, 06/03/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Скрипт работает, спасибо автору )) !!
     
  • 1.12, yrich (?), 18:20, 17/03/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Скрипт работает, вирусы находит, вот только спам как валился, так и продолжает валиться. Что посоветуете.? Ассасина обучал, на тестовых письмах тройку показывает. Как проверить, что он в скрипте выдает?
     
  • 1.14, Olden Gremlin (?), 12:57, 18/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Скрипт отлично работает Помимо того, что подправил пути, от себя немного переде... большой текст свёрнут, показать
     
     
  • 2.33, valmont2k (?), 17:04, 05/01/2007 [^] [^^] [^^^] [ответить]  
  • +/

    Вложения не проходят.
    Была версия про то,что нужно указывать спамц больший размер письма, так как большие он не сканит, но не идет. Буду копать, идея скрипта вместо каких-то сканеров - это весч
     

  • 1.15, Aleksandr (??), 15:10, 19/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Блин не работает. Получаю temporary failure. Command output: /tmp/clamav/in.ххххх: No such file or directory, а в мыло Can't stat input file / directory. Директория /tmp/clamav есть, с правами всё нормально. В чём проблема ? Памажите.
     
  • 1.16, jb (??), 15:51, 08/06/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как по скорости, не накладно для каждого письма запускать процесс bash ?
     
  • 1.17, Boo (?), 02:16, 20/08/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Vsjo kruto - vot toka opoveschenije njepoluchaju :( - any ideas ?
     
  • 1.18, Lug (?), 11:45, 25/08/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ребята а если можно то объясните в скрите как убрать удаление всей отброшеной почты ? чтобы она перерсылалась на админа ? Не знаю перл а настроить хотелось бы.. терять почту никак нельзя ?
     
  • 1.19, nick31 (?), 13:04, 08/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Имхо лучше сделать через clamsmtp, proxsmtp. А если нужно чтобы спам не прибивался - использовать header_checks и REDIRECT.
     
  • 1.23, Showjumper (?), 02:57, 06/01/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    FreeBSD 5.4
    Народ!
    у меня трабл ! Юзал етот скрипт, потом аналогичную схему поднял на amavis.. После того удалил полностью Postfix, проинсталил свежий из распакованного архива, не их портов... теперь в maillog вываливается
    *************
    Jan 6 01:26:17 ftp postfix/qmgr[518]: warning: connect to transport myfilter: Connection refused
    *************
    Что делать ? как убить ? конфиги новые - те что из архива с постфиксом ...
    Плиз хелп ...
     
     
  • 2.24, Nikky (?), 14:35, 06/01/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >Jan 6 01:26:17 ftp postfix/qmgr[518]: warning: connect to transport myfilter: Connection refused
    >
    >*************
    >Что делать ? как убить ? конфиги новые - те что из
    >архива с постфиксом ...
    >Плиз хелп ...

    У amavisd-new несколько другая схема подключения. Проше всего посмотреть её в mavisd-new-xxx/INSTALL и mavisd-new-xxx/README_FILES/README.postfix

     
     
  • 3.25, Showjumper (?), 17:43, 06/01/2006 [^] [^^] [^^^] [ответить]  
  • +/
    та мне оно уже не нужно - удивляет что на заново поставленном Постфиксе идет транспорт через фильтр !
     

  • 1.26, Showjumper (?), 18:22, 06/01/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кажется разобрался.
    В папке /var/spool/postfix  есть 2 папки defer и deferred.
    Так вот в них остались письма со времен установленного фильтра... При рассмотрении тел писем можно увидеть что там прописан путь к транспорту (как раз к amavis и к скрипту с опеннета)
    После удаления писем нафик - вроде не выскакивает больше таких логов
     
  • 1.27, AL (??), 23:39, 21/01/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ацтой а не скипт, юзаем maildrop с фильтром и не паримся
     
     
  • 2.28, FoxMulder (ok), 11:26, 02/06/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Отлично, предложите тогда что то более надежное и лучшее. Желательно с конфами и описаловкой установки. Я вот уже 3 день по опеннету ползаю и живых настроек еще не нашел все править приходится, а это работает нормально.
     
     
  • 3.29, andr (??), 15:37, 05/07/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Скрипт работает почти нормально. Единственная загвоздка, при отправке письма с уведомлением о доставке (microsoft outlook) postfix возвращает вот это

    "Your message was successfully delivered to the destination(s) listed below. If the message was delivered to mailbox you will receive no further notifications. Otherwise you may still receive notifications of mail delivery errors from other systems.

                       The Postfix program

    <ter@top.ru>: delivery via myfilter: delivered via myfilter service"
    myfilter - это сам скрипт

    Никто не сталкивался с такой проблем?

     
     
  • 4.30, andr (??), 16:01, 05/07/2006 [^] [^^] [^^^] [ответить]  
  • +/
    если отключить фильтр - всё по russian типа Ваше сообщение доставлено и всё такое
     
     
  • 5.31, Saint_Byte (?), 09:39, 10/08/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Угу до 3000 эта связка работает стабильно но после 5000 юзеров - начинает ППЦ
     
     
  • 6.32, ILYA (??), 15:28, 23/10/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Здравствуйте... У меня вот в чем загвоздка вышла... Письмо получается в логах пишется, что оно проверено...всё в порядке... пишет mai was delivered via myfilter service... Проверяю..а его тама нету...
     
     
  • 7.34, art_t (ok), 16:29, 17/01/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Hi all!
    Помогите чайнику please.
    При запуске скрипта выдает следующую ошибку
    spamc[13271]: connect(AF_UNIX) to spamd /var/run/spamd.sock failed: No such file or directory
      После создания соответствующих каталогов
    spamc[14283]: connect(AF_UNIX) to spamd /var/run/spamd/spamd.sock failed: Connection refused
     

  • 1.35, avorobyoff (?), 19:47, 18/06/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ни в коем случае не используйте это способ!
    В логике работы этого способа есть один просчет, который приводит к тому, через ваш сервер будет рассылаться СПАМ! Вам это нужно?
     
     
  • 2.36, FoxMulder (ok), 23:54, 19/06/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >Ни в коем случае не используйте это способ!
    >В логике работы этого способа есть один просчет, который приводит к тому,
    >через ваш сервер будет рассылаться СПАМ! Вам это нужно?

    И какой же именно просчет?
    В данный момент пользуюсь, пока рассылка спама не наблюдалась.

     
     
  • 3.37, avorobyoff (?), 13:54, 17/07/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Спамеры обычно в письме в поле "То:" ставят много адресатов. Когда письмо берется из скрипта, то постфикс пытается отправить это письмо ВСЕМ кто перечислен в поле "То:".
    Также если письмо отправлено нескольким адресатам, то у каждого получателя в ящике окажется столько копий, сколько получателей.
     

  • 1.38, dron666 (ok), 14:06, 10/08/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Люди а вот кто с такой загвоздкой сталкивался. При обновлении ClamAV(с 0.90rc2-1 на 0.91-0.1) этот скрипт перестал работать и из за него работа всего PostFix преостановилась(письма не приходили). Какие изменения надо сделать?
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру