2004 г.
ClamAV + clamsmtpd + Postfix
Автор: fly4life
E-mail: fly4life[at]nixp[dot]ru
Сайт: nixp.ru
ClamAV — это бесплатный антивирус, распространяемый по лицензии GPL. В этой статье я расскажу о том, как прикрутить антивирус ClamAV к почтовой системе postfix.
Т.к. делал я это всё в дистрибутиве ASP Linux 9, то и установку с настройкой тоже опишу под него. Но это вовсе не значит, что эта статья больше никому не пригодится. Всё описанное ниже будет работать и в другом дистрибутиве Linux, а отличаться будет только установкой пакетов (и, например, добавлением clamd в автозагрузку — прим. ред.).
Для начала нам понадобится скачать
сам антивирус ClamAV (clamav.sourceforge.net),
clamsmtpd (memberwebs.com/nielsen/software/clamsmtp/) и
MTA Postfix (http://www.postfix.org/).
Итак, качаем пакет clamav-0.72-1.i386.rpm (хоть он и для Fedora Core, но прекрасно подошел и к моему ASP9), устанавливаем:
# rpm -ivh clamav-0.72-1.i386.rpm
После установки в директории /etc появится файл конфигурации clamav.conf. В принципе, ничего менять там не надо, за исключением того, что нужно закомментировать (если они раскомментированы, конечно) опции TCPAddr и TCPSocket, и раскомментировать строку
LocalSocket /var/run/clamav/clamd.sock.
Таким образом укажем антивирусу, что работать он будет только на локальной машине.
Затем запустить сервис clamd: # service clamd start. И также поместить его в автозагрузку (в консоли запустить ntsysv и отметить звёздочкой сервис clamd).
Для обновления антивирусных баз используется утилита freshclam, которая входит в состав пакета clamav. Для того, чтобы базы обновлялись два раза в день и при этом в логи записывались результаты обновления, freshclam нужно запускать следующим образом:
# freshclam -d -c 2 -l /var/log/clamav/clam-update.log
Рекомендую разместить строку с этой командой в файл /etc/rc.d/rc.local.
С установкой и настройкой clamav все.
Теперь качаем clamsmtpd: clamsmtp-1.1.tar.gz. Устанавливаем его:
$ tar -xvzf clamsmtp-1.1.tar.gz
$ cd clamsmtp-1.1
$ ./configure
$ make
$ su -
# make install
После этого копируем пример конфигурационного файла clamsmtpd.conf из директории с исходниками (находится в подкаталоге doc/) в директорию /usr/local/etc (именно в этой директории clamsmtpd будет искать свой конфигурационный файл по умолчанию). После правки этот файл будет выглядеть следующим образом:
# cat /usr/local/etc/clamsmtpd.conf
OutAddress: 10026
Listen: 0.0.0.0:10025
ClamAddress: /var/run/clamav/clamd.sock
TempDirectory: /tmp
User: clamav
На самом деле, параметров в этом файле может быть больше, но я указал лишь необходимые. Для более подробного изучения рекомендую почитать man clamsmtpd.conf.
Запуск clamsmtpd выполняется одноименной командой clamsmtpd.
Таким образом clamsmtpd будет открывать 10025-ый порт, на который postfix будет как бы отсылать почту для проверки антивирусом (соответствующая настройка будет описана ниже), а затем, после проверки, clamsmtpd будет возвращать её обратно postfix'у на порт 10026.
Настройка postfix
Саму установку и настройку postfix я описывать не буду, т.к. существует множество статей в интернете, описывающих этот процесс подробно и, к тому же, на русском. Опишу лишь те опции, которые отвечают за привязку антивируса к почтовой системе.
В файл 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 необходимо добавить следующие строки:
# AV scan filter (used by content_filter)
scan unix - - n
- 16 smtp
-o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10026 inet n - n
- 16 smtpd
-o content_filter=
-o receive_override_options=
no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=
permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
Примечание: вокруг знака '=' пробелы не ставить.
Значение 127.0.0.1:10026 открывает 10026-порт для возвращения почты обратно от clamsmtpd. Остальные значения см. в соответствующем мануале.
Вот, собственно, и все.