PostHeaderIcon SpamAssassin, ClamAV Exim

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

1
2
3
4
cd /usr/ports/security/clamav
sudo make install clean
cd /usr/ports/security/clamsmtp
sudo make install clean


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

1
2
3
4
cd /usr/local/etc/
cp clamsmtpd.conf-sample clamsmtpd.conf
cp clamd.conf.default clamd.conf
cp freshclam.conf.default freshclam.conf

clamsmtpd.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Порт, на который перенаправляется сканируемая почта
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#Пишем лог
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Расположение антивирусных баз
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:

1
2
cd /usr/ports/mail/p5-Mail-SpamAssassin/
sudo make install clean

И необходимые perl-модули

1
2
3
/usr/ports/security/p5-Digest-SHA1/
/usr/ports/www/p5-HTML-Parser/
/usr/ports/dns/p5-Net-DNS/

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

1
2
cd /usr/local/etc/mail/spamassassin/
cp local.cf.sample local.cf

local.cf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Добавляем запись к заголовку письма, если письмо определено как спам
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. Дописываем в конфиг строчки:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Разрешаем проверку содержимого сообщения
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 пишем:

1
2
3
4
5
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
clamav_freshclam_flags="-c 2" # Обновляемся 2 раза в сутки
clamsmtpd_enable="YES"
spamd_enable="YES"

Запускаем

1
2
3
4
5
6
cd /usr/local/etc/rc.d/
./clamav-clamd start
./clamav-freshclam start
./clamsmtpd start
./sa-spamd start
./exim restart

Проверяем

1
2
3
4
5
6
7
8
$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ми архивов будет выглядеть так:

1
2
/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.
Не забываем проверять пути и права на файлы.

Один комментарий на “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