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:
Проверьте, что бы
следующая строка присудствовала и права на файл были - 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