Установка бесплатного антивируса ClamAV + clamsmtpd + Postfix под Linux

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску

Статья взята тут

По мотивам статьи: clamav_postfix Хорошая статья также amavis

ClamAV — это бесплатный антивирус, распространяемый по лицензии GPL. В этой статье я расскажу о том, как прикрутить антивирус ClamAV к почтовой системе postfix. Т.к. делал я это всё в дистрибутиве Mandriva 2007, то и установку с настройкой тоже опишу под него. Но это вовсе не значит, что эта статья больше никому не пригодится. Всё описанное ниже будет работать и в другом дистрибутиве Linux, а отличаться будет только установкой пакетов (и, например, добавлением clamd в автозагрузку — прим. ред.). Для начала нам понадобится скачать сам антивирус ClamAV (clamav.sourceforge.net), clamsmtpd (memberwebs.com/nielsen/software/clamsmtp/) и MTA Postfix (www.postfix.org). Итак, качаем пакет clamav-*.rpm, устанавливаем:

Пакеты для установки

clamav-*.rpm, clamav-db*.rpm, clamd*.rpm и все остальные, которые предложит инсталлятор.

Настройка

Программа антивируса

После установки в директории /etc появится файл конфигурации clamd.conf.
В принципе, ничего менять там не надо, за исключением того, что нужно закомментировать (если они раскомментированы, конечно)опции TCPAddr и TCPSocket, и раскомментировать строку LocalSocket /var/run/clamav/clamd.sock
Таким образом укажем антивирусу, что работать он будет только на локальной машине.
Затем запустить сервис clamd:

# service clamd start.

И также поместить его в автозагрузку (в консоли запустить drakxconf, зайти в раздел "службы" и отметить звёздочкой сервис clamd).

Программа обновления баз

Для обновления антивирусных баз используется демон freshclam, которая входит в состав пакета clamav. Для того, чтобы базы обновлялись два раза в день и при этом в логи записывались результаты обновления, freshclam нужно установить в файле /etc/freshclam.conf:

checks = 2

С установкой и настройкой clamav все.

clamsmtpd

Качаем последний релиз clamsmtp со страницы http://memberwebs.com/nielsen/software/clamsmtp/ В моем случае это clamsmtp-1.8.tar.gz

# cp clamsmtp-1.8.tar.gz /usr/local/src
# cd /usr/local/src
# tar -xvzf clamsmtp-1.8.tar.gz
# cd clamsmtp-1.8
# ./configure  --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/libexec  --datadir=/usr/share \
--sysconfdir=/etc --libdir=/usr/lib --mandir=/usr/share/man
# make
# make install
# cp /usr/local/src/clamsmtp-1.8/doc/clamsmtpd.conf /etc/clamsmtpd.conf

После этого копируем пример конфигурационного файла clamsmtpd.conf из директории с исходниками (находится в подкаталоге doc/)в директорию /etc (именно в этой директории clamsmtpd будет искать свой конфигурационный файл).
После правки этот файл будет выглядеть следующим образом:

# cat /etc/clamsmtpd.conf

OutAddress: 10026
Listen: 0.0.0.0:10025
ClamAddress: /var/lib/clamav/clamd.socket
TempDirectory: /tmp
User: clamav


На самом деле, параметров в этом файле может быть больше, но я указал лишь необходимые.
Для более подробного изучения рекомендую почитать man clamsmtpd.conf.

Для запуска clamsmtpd нужно создать файл /etc/init.d/clamsmtpd сщ следующим содержимым.

#!/bin/sh

###########################################################################
# CONFIGURATION

# Most configuration options are found in the clamsmtpd.conf file.
# For more info see:
#   man clamsmtpd.conf
# chkconfig: 345 17 90
# description: This startup script launches the courier imap daemon

### BEGIN INIT INFO
# Provides: clamsmtpd
# Required-Start: courier-authdaemon
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 345
# Short-Description: clamsmtpd daemon
# Description: This startup script launches the clamsmtpd daemon
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# The prefix clamsmtpd was installed to
prefix=/usr

# The location for pid file
piddir=/var/run/clamav
NAME=clamsmtpd


###########################################################################
# SCRIPT

case $1 in
start)
        mkdir -p $piddir
        $prefix/sbin/clamsmtpd -p $piddir/clamsmtpd.pid
        echo -n "clamsmtpd "
        ;;
stop)
        [ -f $piddir/clamsmtpd.pid ] && kill `cat $piddir/clamsmtpd.pid`
        echo -n "clamsmtpd "
        ;;
*)
        echo "usage: clamsmptd.sh {start|stop}" >&2
        ;;
esac

Далее

# chmod 740 /etc/init.d/clamsmtpd
# chgrp adm /etc/init.d/clamsmtpd

Таким образом clamsmtpd будет открывать 10025-ый порт, на который postfix будет как бы отсылать почту для проверки антивирусом (соответствующая настройка будет описана ниже), а затем, после проверки, clamsmtpd будет возвращать её обратно postfix'у на порт 10026.

Добавление сервисов в автозапуск

И с помощью утилиты drakxkonf добавляем сервисы ckamav, frecsclam, clamd и clamsmtpd для запуска.

Тестирование

Для проверки работоспособности будем использовать EICAR строку. Создаем файл virus.com со следующим содержанием:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Сохраняем его и выполняем

# clamscan  virus.com
virus.com: Eicar-Test-Signature FOUND

----------- SCAN SUMMARY -----------
Known viruses: 30736
Scanned	directories: 0
Scanned	files: 1
Infected files: 1
Data scanned: 0.00 MB
I/O buffer size: 131072 bytes
Time: 1.356 sec (0 m 1 s)

Если вы видите что то подобное, значит все прошло успешно и ClamAV благополучно установлен на вашем компьютере.

Настройка postfix

Саму установку и настройку postfix я описывать не буду, т.к. существует множество статей в интернете, описывающих этот процесс подробно и, к тому же, на русском. Опишу лишь те опции, которые отвечают за привязку антивируса к почтовой системе.

main.cf

В файл main.cf необходимо добавить две строчки:

content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings

Первая говорит postfix'у о том, что необходимо пересылать всю почту через сервис (фильтр) 'scan' на 10025-ый порт, который, как раз, открыт clamsmtpd.
Вторая строчка говорит о том, чтобы postfix не делал никаких манипуляций с адресами до того, как они дойдут до content_filter. Так что получается, что фильтр работает с реальными почтовыми адресами, а не с результатами перевода в виртуальные псевдонимы, маскарадингом и т.п.

master.cf

В файл master.cf необходимо добавить следующие строки:

# AV scan filter (used by content_filter)
scan      unix  -       -       n       -       16      smtp
    -o smtp_send_xforward_command=yes
#    -o smtp_enforce_tls=no

Закоментированная строка взята из форума, где обсуждалась проблема подвисания clamAV при сканировании больших файлов.
Еще надо разкоментировать секцию со строками

127.0.0.1:10026        inet    n       -       n       -       -       smtpd
  -o content_filter=
  -o smtpd_restriction_classes=
  -o smtpd_client_restrictions=permit_mynetworks,reject
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_end_of_data_restrictions=
  -o smtpd_etrn_restrictions=
  -o smtpd_data_restrictions=
  -o smtpd_delay_reject=no
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks=127.0.0.0/8
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8
  -o strict_rfc821_envelopes=yes
  -o smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000
  -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

Примечание: вокруг знака '=' пробелы не ставить. Значение 127.0.0.1:10026 открывает 10026-порт для возвращения почты обратно от clamsmtpd.
Остальные значения см. в соответствующем мануале.