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. Обновленное дерево портов и знания, необходимые для установки программ из портов.

Рабочая инсталяция 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:

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 [email-masked]

whitelist_from [email-masked]

whitelist_from [email-masked]

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