Sendmail: Spamassassin and ClamAV as Daemons

Category: Sendmail Milters
Level: Intermediate
OS: FreeBSD 5.x (у меня на FreeBSD 4.9)
Created: 03/09/2004
Author: JTSage (wisesage98)
с исправлениями и коментариями PomidorOFF ;)

Введение: Это инструкция по развертыванию антивирусной проверки на основе ClamAV и спам фильтра SpamAssassin на уровне MTA используя sendmail.

Необходимо:
1. Рабочая система freebsd.
2. Обновленное дерево портов и знания, необходимые для установки программ из портов.

  1. Рабочая инсталяция sendmail и минимальные познания для его настройки.

    Инсталяция из портов:

    Во первых установим необходимые программы.

            # cd /usr/ports/mail/p5-Mail-SpamAssassin
            # make install clean

            # cd /usr/ports/mail/spamass-milter
            # make install clean

            # cd /usr/ports/security/clamav-devel
            # make -DWITH_MILTER install clean

    ClamAV устанавливаем с поддержкой MILTER. Это необходимо для данной конфигурации. На мой взгляд это лучший вариант, по крайней мере для sendmail.

    Настройка - ClamAV:

    Нам нужны файлы:
            /usr/local/etc/freshclam.conf
            /usr/local/etc/clamav.conf
            /usr/local/etc/rc.d/clamav-clamd.sh
            /usr/local/etc/rc.d/clamav-milter.sh
            /usr/local/etc/rc.d/freshclam.sh
            /etc/rc.conf

    Настройка - /usr/local/etc/freshclam.conf:

    Это файл настройки обновлений вирусной базы ClamAV. По умолчанию обновление происходит каждые 12 часов. ClamAV рекомендует изменить время на 2 часа.

    Настройка - /usr/local/etc/clamav.conf:

    Это файл конфигурации функций ClamAV. Измените следующие параметры:

            #Example
            #Закоментарьте эту строку!!
    Не нужно коментить, просто ниже исправите ошибку автора!

            LocalSocket /var/run/clamav/clamd.sock

            ScanMail
            #Раскоментируйте эту строку!!
    И так раскоментарен, остальное по вкусу, у меня только не заработала фишка пометки зашифрованного архива как вирус. Кроме того обладателям старых и слабых компьютеров нужно быть осторожным с проверкой на вирусы архивов – они существенно загружают систему!

    Настройка - /usr/local/etc/rc.d/clamav-clamd.sh:

    Проверьте, что бы следующая строка присудствовала и права на файл были - chmod 755:

            clamav_clamd_socket=${clamav_clamd_socket:-"/var/run/clamav/clamd.sock"}

здесь автор помоему совершил ошибку! Он пропустил .sock в конце строки.

Настройка - /usr/local/etc/rc.d/clamav-milter.sh:

Проверьте, что бы следующая строка присудствовала и права на файл были - chmod 755:

        clamav_milter_socket=${clamav_milter_socket:-"/var/run/clamav/clmilter.sock"}

Настройка - /usr/local/etc/rc.d/freshclam.sh:

Проверьте, что бы права на файл были - chmod 755:

Настройка - /etc/rc.conf:

Добавьте следующие строки:

        clamav_clamd_enable="YES"
        clamav_milter_enable="YES"
        freshclam_enable="YES"

Запуск - ClamAV:

Запустите следующее:

        # /usr/local/etc/rc.d/clamav-clamd.sh start
        # /usr/local/etc/rc.d/clamav-milter.sh start
        # /usr/local/etc/rc.d/freshclam.sh start

Внимание: убедитесь что на /var/run/clamav стоит chmod 700. Также убедитесь что 2 сокета (файлы) в этой директории НЕ доступны для чтения и записи для группы или мира.

Настройка - Spamassassin:

Нам нужны файлы:
        /usr/local/etc/mail/spamassassin/local.cf
        /usr/local/etc/rc.d/spamd.sh
        /usr/local/etc/rc.d/spamass-milter.sh
        /etc/rc.conf

Настройка - /usr/local/etc/mail/spamassassin/local.cf:

Скопируйте local.cf.sample в local.cf. Это файл конфигурации spamassassin. Смотрите документацию для настройки опций.

Где то нарыл образец (помоему от Lavr) и немного его изменил под себя:


local.cf

# This is the right place to customize your installation of SpamAssassin.

#

# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be

# tweaked.

#

###########################################################################


trusted_networks 192.168/16 127/8 # all in 192.168.*.* and 127.*.*.*

trusted_networks 127. # all in 127.*.*.* localhost


# whitelist

whitelist_from *@my_domain.ua

whitelist_from *@my_provaider.com

whitelist_from *@my_provaider2.com

whitelist_from localhost


# blacklist

#blacklist_from

#blacklist_to


# переписать поле subject

rewrite_subject 1

subject_tag ***SPAM***


required_hits 5.0

report_safe 0

use_terse_report 0

use_bayes 1

auto_learn 1

skip_rbl_checks 0

use_razor2 0

use_dcc 0

use_pyzor 0

always_add_report 1


#use_auto_whitelist 1

#auto_whitelist_path /etc/mail/spamassassin/auto_whitelist

#bayes_path /etc/mail/spamassassin/bayes


ok_languages ru en

ok_locales ru en

report_charset windows-1251

lang ru



#score NAME_OF_TEST 3.0

#score MIME_HTML_ONLY 2.0

#score HTML_MESSAGE 1.0

#score HTML_FONTCOLOR_RED 2.0

score FROM_ILLEGAL_CHARS 1.5

score HEAD_ILLEGAL_CHARS 1.5

#end


Настройка - /usr/local/etc/rc.d/spamd.sh:

Проверьте, что бы права на файл были - chmod 755:

Настройка - /usr/local/etc/rc.d/spamass-milter.sh:

Проверьте, что бы следующая строка присудствовала и права на файл были - chmod 755:

        SOCKET=/var/run/spamass-milter.sock

Настройка - /etc/rc.conf:

Добавьте строку:

        spamd_enable="YES"

Запуск - SpamAssassin:

Запустите:

        # /usr/local/etc/rc.d/spamd.sh start
        # /usr/local/etc/rc.d/spamass-milter.sh start

Настройка - Sendmail:

Войдите в директорию /etc/mail и отредактируйте freebsd.mc. Добавьте следующие строки:

        INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')
        INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clamav/clmilter.sock,F=, T=S:4m;R:4m')dnl
        define(`confINPUT_MAIL_FILTERS', `spamassassin, clmilter')


Здесь автор тоже что то напутал! Во первых freebsd.mc не обязательно, конфиг сендмейла может и не так называться. Если устанавливалось все по умолчанию, то все верно. Иначе нужно коректировать ваш файл конфигурации сендмейла. Его название можна посмотреть например в /etc/make.conf в строке:

SENDMAIL_MC=/etc/mail/myconfig.mc

Во вторых добавляем так:


INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')

INPUT_MAIL_FILTER(`clmilter', `S=local:/var/run/clamav/clmilter.sock, F=, T=S:4m;R:4m')

dnl define(`confINPUT_MAIL_FILTERS', `spamassassin, clmilter')

Запустите в директории /etc/mail для перезагрузки sendmail

        # make
        # make install
        # make restart
        # newaliases

Теперь, sendmail *должен* отбрасывать вирусы, и помечать спам. Проверьте. Тестовые файлы есть в дистрибутивах Spamassassin и ClamAV.

Настройка - Mail::Audit

Я использую Mail::Audit, вы тоже должны. Вовсе не должны, не слушайте его, это вам решать! :) Если вы тоже используете его, то здесь быстрый и простой пример для переноса всего спама в другую папку. Добавьте следующее в ваш скрипт:

        my $spamdir = "/home/username/Mail/SPAM";

        if ($item->get("X-Spam-Flag")) { $item->accept($spamdir); }

------UPDATE-------

Если вы следовали моим советам для настройки ClamAV, когда его лог превысит 5MB, clamav отказывается работать. Вот исправление этой проблемы:

Ротация логов Clamd:

Первое и основное, убедитесь что clamav бросает pidfile. В /usr/local/etc/clamav.conf раскоментируйте:

# This option allows you to save the process identifier of the listening
# daemon (main thread).
PidFile /var/run/clamd.pid (
сейчас правильно /var/run/clamav/clamd.pid)

Потом, добавьте следующее (одной строкой) в /etc/newsyslog.conf
/var/log/clamd.log 644 3 * $W0D1 BJ /var/run/clamd.pid 1

(соответственно: var/run/clamav/clamd.log 644 3 * $W0D1 BJ var/run/clamav/clamd.pid 1)

Это будет перезаписывать ваш лог раз в неделю, сохранять 3 из них (текущий + 3 недели). Старые будут сжиматься bzip2 и посылать SIGHUP процессу clamd.

FWIW – Я использую SpamAssassin и ClamAV более 6 месяцев и не могу сказать ничего плохого о них.


P.S. От меня:


У меня все красиво заработало, юзерам приходят письма помеченные в теме письма -

***SPAM*** потом в The Bat! За 5 сек настраивается фильтр, отсекающий письма с такимим заголовками (или удалять или ложить в папку для спама и т.п. и т.д.)

Завирусованые письма удаляются – отправляются сообщения постмастеру и отравителю вида:


The message i4O4ofrS005467 sent from <***@***.kiev.ua> to

<***@***.ua>

contained a virus and has not been delivered.

stream: Worm.Bagle.Z FOUND