Подключаем ClamAV к Pure-FTPd в среде FreeBSD

Попросили подключить на нескольких серверах проверку антивирусом всего что загружается на сервер через ftp, желательно бесплатно. Первым антивирусом под *nix что пришел в голову, был ClamAV. Он бесплатный, с регулярными обновлениями антивирусных баз, и главное, через его сокеты можно подключать на обработку очень многое, в том числе и загружаемые файлы по ftp. Итак, в первую очередь - установим сам ClamAV:

cd /usr/ports/security/clamav make install clean

Для нашего случая опции конфигурации можно оставить без изменений. Добавляем в /etc/rc.conf управляющие сигнатуры для запуска антивируса в качестве демона во время запуска системы:
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"

Стандартно запускаем freshclam для загрузки антивирусных баз в /var/db/clamav, после чего можно запускать сам clamav.

В целом, нам надо чтобы Pure-FTPd при загрузке файлов запускал скрипт, который будет передавать файлы на проверку ClamAV. Для этого мне пришлось пересобрать имеющийся экземпляр, включив в конфигурации опцию UPLOADSCRIPT. После переустановки нужно добавить в /etc/rc.conf (кроме имеющегося там pureftpd_enable="YES") следующие строки:
pureftpd_upload_enable="YES"
pureftpd_uploadscript="/usr/local/etc/pure-ftpd/clamscan.sh"

А в конфигурационном файле /usr/local/etc/pure-ftpd.conf добавляем разрешение на вызов uploadscript:
CallUploadScript yes

Это позволит запускаться процессу pureftpd_uploadscript передающему файлы на сторону антивируса посредством запуска shell скрипта, в моем случае расположенного в /usr/local/etc/pure-ftpd/clamscan.sh (путь расположения может быть произвольным). В текущей версии Pure-FTPd пришлось подправить стартстопный скрипт  /usr/local/etc/rc.d/pure-ftpd

В нем была такая вот строка:
pureftpd_uploadscript=${pureftpd_uploadscript:-"/usr/bin/touch"}

в которой на мой взгляд /usr/bin/touch совершенно лишние, и не дают прочитать путь до pureftpd_uploadscript указанный мной в rc.conf. В итоге pure-uploadscript попросту не запускается. После правки строка должна иметь следующий вид:
pureftpd_uploadscript=${pureftpd_uploadscript:-""}

Далее создаем сам shell скрипт /usr/local/etc/pure-ftpd/clamscan.sh со следующим содержанием:
#!/bin/sh
# использую /usr/local/bin/clamdscan так как он быстрее обрабатывает файлы при запущеном clamd
# если clamd не запущен, нужно пользовать clamscan CLAMLOC='/usr/local/bin/clamdscan';

if [ ! -x $CLAMLOC ];
then echo 'clamdscan not found';
exit;
fi
if [ "$1" = "" ];
then echo 'Variable is blank';
exit;
fi
if [ ! -f "$1" ];
then echo "$1 file not found"
exit;
fi
# здесь я буду не удалять вирусные файлы, а переносить их в директорию карантина, чтобы видеть когда на сервер заливались вирусы $CLAMLOC --move=/usr/home/clamav/infected $1
# А это можно использовать, если нужно удалять файлы с вирусами сразу
#$CLAMLOC --remove $1

Все, после этого можно запускать pure-ftpd и проверять наличие двух контрольных процессов:
pure-ftpd (SERVER) (pure-ftpd)
/usr/local/sbin/pure-uploadscript -B -r /usr/local/etc/pure-ftpd/clamscan.sh

Если оба процесса есть, то все работает и можно проверять работу отсечки вирусов. Можно стандартно передать сигнатуру EICAR в текстовом файле через ftp и наблюдать ее удаление, или перенос в карантин, в зависимости от настроек shell скрипта.
Сигнатура EICAR для тех кто забыл: X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Поделиться

Опубликовать в Facebook
Опубликовать в LiveJournal

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>