2015-02-27

SpamAssassin, ClamAV и Exim

Скопипастил, что бы не потерялось (вдруг пригодится)
Ну, можно начать с простого – с clamav. Надо его установить, запустить и регулярно обновлять. Устанавливаем clamav и clamsmtpd:

cd /usr/ports/security/clamav 
sudo make install clean 
cd /usr/ports/security/clamsmtp 
sudo make install clean 

Редактируем конфиги:

cd /usr/local/etc/
cp clamsmtpd.conf-sample clamsmtpd.conf
cp clamd.conf.default clamd.conf
cp freshclam.conf.default freshclam.conf

clamsmtpd.conf
# Порт, на который перенаправляется сканируемая почта
OutAddress: 10026
# Максимальное количество подключений за раз.
# В настройках демона clamd должно быть указано аналогичное число подключений
MaxConnections: 200
# Время (в секундах) ожидания ответа от сети
TimeOut: 180
# Поддержка соединения. 0 - если отключено, либо выставляем интервал отправления
# серверу NOOP'ов в секундах
KeepAlives: 0
# Прослушиваемый адрес (По умолчанию: порт 10025 на всех локальных адресах)
Listen: 127.0.0.1:10025
# Адрес для соединения с демоном clamd
ClamAddress: /var/run/clamav/clamd.sock
# Заголовок, добавляемый к отсканированной почте
Header: X-Virus-Scanned: ClamAV using ClamSMTP
# Каталог для временных файлов
TempDirectory: /tmp
# Что делаем, если нашли вирус
Action: drop
# Помещаем файлы,содержащие вирус, на карантин в директорию
# хранения временных файлов
Quarantine: on
# Юзер, от имени которого запускается демон
User: clamav
# Команда, выполняемая при обнаружении вируса
# Скрипт можно взять в /usr/local/share/examples/clamsnmp, отредактировать под свои нужды
# и положить в любое удобное место
VirusAction: /var/script/virus_action.sh

clamd.conf
#Пишем лог
LogFile /var/log/clamav/clamd.log
#Блокировка файла лога. Защищает от многократного запуска демона. В случае необходимости
# запуска еще одного демона - надо скопировать конфиг, изменить в нем местоположение лога
# и запустить демона с указанием этого файла конфига
LogFileUnlock no
#Максимальный размер файла лога
LogFileMaxSize 2M
# Ставим в логе отметки времени
LogTime yes
# Пишем в лог сообщения о проверенных чистых файлах. Удобно для дебага,
# но размер лога быстро растет
LogClean yes
# Используем сислог
LogSyslog yes
# Определение типа сообщений для сислога
LogFacility LOG_MAIL
# Включаем подробное логгирование
LogVerbose yes
# Сохраняем идентификатор процесса
PidFile /var/run/clamav/clamd.pid
# Директория для хранения временных файлов
TemporaryDirectory /var/tmp
# Путь к директории базы
DatabaseDirectory /var/db/clamav
# Путь к файлу сокета
LocalSocket /var/run/clamav/clamd.sock
# Удалять сокет в случае некорректного завершения работы
FixStaleSocket yes
# Максимальная длина очереди входящих соединений
MaxConnectionQueueLength 15
# Закрыть соединение при превышении предельного размера данных.
# Значение должно соответствовать ограничению на максимальный размер вложения.
StreamMaxLength 500M
# Максимальное количество одновременно запущеных потоков
MaxThreads 20
# Время ожидания ответа от клиента
ReadTimeout 180
# Время (в секундах), после истечения которого демон должен закрыть соединение,
# если клиент не отправляет никаких команд после установления соединения
CommandReadTimeout 5
# Время ожидания (в милисекундах), если буфер заполнен.
# Надо оставить значение низким во избежание зависания clamd
SendBufTimeout 200
# Максимальное количество пунктов в очереди (включая те, которые обрабатывает MaxThreads)
# Рекомендуемое значение параметра - двойное значение MaxThreads
# Во избежание исчерпания файловых дескрипторов не нужно ставить большое значение
# Можно руководствоваться формулой
# MaxThreads*MaxRecursion+(MaxQueue-MaxThreads)+6 < RLIMIT_NOFILE (usual max is 1024)
MaxQueue 200
# Ожидание нового задания будет завершено по истечении этого времени (в секундах)
IdleTimeout 60
# Максимальное количество вложенных директорий
MaxDirectoryRecursion 30
# Следовать по симлинкам директорий
FollowDirectorySymlinks yes
# Следовать по симлинкам файлов
FollowFileSymlinks yes
# Промежуток времени (в секундах), через который производится проверка баз
SelfCheck 1800
# Команда, выполняемая при обнаружении вируса. %v добавит в строку имя вируса.
VirusEvent /bin/echo "Virus found: %v" >> /var/log/clamav/virus.log
# Юзер, от имени которого будет запускаться антивирус
User clamav
# Инициализировать права дополнительных групп
AllowSupplementaryGroups yes
# Включаем дебаг (если необходимо)
Debug yes
# Не удалять временные файлы
LeaveTemporaryFiles yes
# Обнаружение потенциально-нежелательного ПЛ
DetectPUA yes
# clamav попытается обнаружить битые исполняемые файлы (оба PE и ELF)
# и пометят их как Broken.Executable.
DetectBrokenExecutables yes
# Сканировать почту
ScanMail yes
Остальные настройки были оставлены по умолчанию
freshclam.conf
# Расположение антивирусных баз
DatabaseDirectory /var/db/clamav
# Пишем лог
UpdateLogFile /var/log/clamav/freshclam.log
# Максимальный размер лога
LogFileMaxSize 2M
# Ставим в логе отметки времени
LogTime yes
# Подробное логгирование
LogVerbose yes
# Использовать сислог
LogSyslog yes
# Определение типа сообщений для сислога
LogFacility LOG_MAIL
# Сохраняем идентификатор процесса
PidFile /var/run/clamav/freshclam.pid
# Владелец базы
DatabaseOwner clamav
# Инициализировать права дополнительных групп
AllowSupplementaryGroups yes
# Зеркало антивирусных баз
DatabaseMirror database.clamav.net
# Количество попыток подключения к зеркалу
MaxAttempts 5
# Отключаем сжатие баз для увеличения скорости работы
CompressLocalDatabase no
# Посылаем clamav команду перезагрузки
NotifyClamd /usr/local/etc/clamd.conf

Теперь установим SpamAssassin:
cd /usr/ports/mail/p5-Mail-SpamAssassin/
sudo make install clean

И необходимые perl-модули
/usr/ports/security/p5-Digest-SHA1/
/usr/ports/www/p5-HTML-Parser/
/usr/ports/dns/p5-Net-DNS/

Редактируем конфиг
cd /usr/local/etc/mail/spamassassin/
cp local.cf.sample local.cf

local.cf
# Добавляем запись к заголовку письма, если письмо определено как спам
rewrite_header Subject *****SPAM*****
# Доверенные сети
trusted_networks 192.168/16
# Метод защиты файлов базы
lock_method flock
# Количество "очков", набрав которые письмо считается спамом
required_score 5.0
# Использовать Bayes алгоритмы при проверке почтовых сообщений
use_bayes 1
# Автообучение Bayes
bayes_auto_learn 1
# Не активировать систему, пока она не обучится на некотором количестве писем
bayes_min_spam_num 50
bayes_min_ham_num 50
# Журналировать процесс обучения
bayes_learn_to_journal 1
# Выставляем права на файлы
bayes_file_mode 0666
# Не выполнять проверку по блэклистам. При установке параметра в 0 - опция будет включена
skip_rbl_checks 0
Ну а теперь всё это надо связать с exim. Дописываем в конфиг строчки:
# Разрешаем проверку содержимого сообщения
acl_smtp_data = acl_check_data
# Подключаемся к интерфейсам антивируса и антиспама
av_scanner = clamd:/var/run/clamav/clamd.sock
spamd_address = 127.0.0.1 783
# Проверяем содержимое на вирусы и спам
acl_check_data:
deny malware = *
message = This message contains a virus ($malware_name)

warn message = X-Spam-Score: $spam_score ($spam_bar)
hosts = !+relay_from_hosts
spam = spamd:true

warn message = X-Spam-Report: $spam_report
hosts = !+relay_from_hosts
spam = spamd:true

warn message = Subject: ***SPAM*** $h_Subject:
hosts = !+relay_from_hosts
spam = spamd

deny message = This message scored $spam_score spam points.
spam = spamd:true
hosts = !+relay_from_hosts
condition = ${if >{$spam_score_int}{120}{1}{0}}
accept

В rc.conf пишем:
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
clamav_freshclam_flags="-c 2" # Обновляемся 2 раза в сутки
clamsmtpd_enable="YES"
spamd_enable="YES"

Запускаем
cd /usr/local/etc/rc.d/
./clamav-clamd start
./clamav-freshclam start
./clamsmtpd start
./sa-spamd start
./exim restart
Проверяем

$ps ax | grep clam
1054 ?? Is 0:02.32 /usr/local/bin/freshclam -c 2 --daemon -p /var/run/clamav/freshclam.pid
32152 ?? Is 0:06.28 /usr/local/sbin/clamd
36745 ?? Is 0:00.00 /usr/local/sbin/clamsmtpd -f /usr/local/etc/clamsmtpd.conf -p /var/run/clamav/clamsmtpd.pid
$ps ax | grep spam
47540 ?? Ss 0:01.74 /usr/local/bin/spamd -c -Q -d -r /var/run/spamd/spamd.pid (perl5.8.9)
47556 ?? I 0:05.41 spamd child (perl5.8.9)
47557 ?? I 0:00.01 spamd child (perl5.8.9)

Ротация логов clamav.
Еженедельное архивирование и хранение не более 7ми архивов будет выглядеть так:
/etc/newsyslog.conf

/var/log/clamav/clamd.log clamav:clamav 644 7 * $W1D0 JB /var/run/clamav/clamd.pid 1
Всё получилось :)
Домашняя директория spamd находится в /var/spool/spamd/.spamassassin.
Не забываем проверять пути и права на файлы.

source

Комментариев нет:

Отправить комментарий