Установка бесплатного антивируса ClamAV + clamsmtpd + Postfix под Linux
Статья взята тут
По мотивам статьи: 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.
Остальные значения см. в соответствующем мануале.