PostHeaderIcon SpamAssassin, ClamAV и взаимодействие с Exim

Ну, можно начать с простого — с clamav. Надо его установить, запустить и регулярно обновлять.
Устанавливаем clamav и clamsmtpd:
[cc lang=»bash»]cd /usr/ports/security/clamav
sudo make install clean
cd /usr/ports/security/clamsmtp
sudo make install clean[/cc]

Редактируем конфиги:
[cc lang=»bash»]cd /usr/local/etc/
cp clamsmtpd.conf-sample clamsmtpd.conf
cp clamd.conf.default clamd.conf
cp freshclam.conf.default freshclam.conf[/cc]
clamsmtpd.conf
[cc lang=»bash»]# Порт, на который перенаправляется сканируемая почта
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[/cc]
clamd.conf
[cc lang=»bash»]#Пишем лог
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
[/cc]
Остальные настройки были оставлены по умолчанию
freshclam.conf
[cc lang=»bash»]
# Расположение антивирусных баз
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
[/cc]
Теперь установим SpamAssassin:
[cc lang=»bash»]cd /usr/ports/mail/p5-Mail-SpamAssassin/
sudo make install clean
[/cc]
И необходимые perl-модули
[cc lang=»bash»]/usr/ports/security/p5-Digest-SHA1/
/usr/ports/www/p5-HTML-Parser/
/usr/ports/dns/p5-Net-DNS/
[/cc]
Редактируем конфиг
[cc lang=»bash»]cd /usr/local/etc/mail/spamassassin/
cp local.cf.sample local.cf[/cc]
local.cf
[cc lang=»bash»]
# Добавляем запись к заголовку письма, если письмо определено как спам
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
[/cc]
Ну а теперь всё это надо связать с exim. Дописываем в конфиг строчки:
[cc lang=»bash»]
# Разрешаем проверку содержимого сообщения
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
[/cc]
В rc.conf пишем:
[cc lang=»bash»]
clamav_clamd_enable=»YES»
clamav_freshclam_enable=»YES»
clamav_freshclam_flags=»-c 2″ # Обновляемся 2 раза в сутки
clamsmtpd_enable=»YES»
spamd_enable=»YES»[/cc]
Запускаем
[cc lang=»bash»]
cd /usr/local/etc/rc.d/
./clamav-clamd start
./clamav-freshclam start
./clamsmtpd start
./sa-spamd start
./exim restart[/cc]
Проверяем
[cc lang=»bash»]$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)
[/cc]
Ротация логов clamav.
Еженедельное архивирование и хранение не более 7ми архивов будет выглядеть так:
[cc lang=»bash»]/etc/newsyslog.conf
/var/log/clamav/clamd.log clamav:clamav 644 7 * $W1D0 JB /var/run/clamav/clamd.pid 1[/cc]

Всё получилось :)
Домашняя директория spamd находится в /var/spool/spamd/.spamassassin.
Не забываем проверять пути и права на файлы.

Один комментарий на “SpamAssassin, ClamAV и взаимодействие с Exim”

  • Baby Boy says:

    Привет, Лена.

    Сейчас мучаю Exim, дошло дело до антивируса.
    Прочитал твою статью эту и мне кажеца есть лишний шаг.

    Касаеца программы clamsmtp. Здесь:
    http://packages.debian.org/ru/sid/clamsmtp

    Я так понимаю, если бы использовался clamsmtp, то проверка входящих письменов (с учетом конфигов выше) была бы приблизительно такая:
    Письмо -> Exim -> 127.0.0.1:10025 (clamsmtp) -> /var/run/clamav/clamd.sock (ClamAV) -> (clamsmtp) 127.0.0.1:10026 -> Exim

    НО в твоем случае проверка будет проходить так:
    Exim -> /var/run/clamav/clamd.sock (ClamAV) -> Exim

    Т.е. прога clamsmtp — лишняя (во всяком случае мне так показалосЬ).

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

PR-CY.ru