В дополнение хочу поделиться опытом запуска Squid+c-icap+ClamAV в рабочую эксплуатацию на маршрутизаторе офиса из 50 компьютеров.Итак имеем:
Железо – Intel PIII-1000/512Ram.
ОС - FreeBSD 5.5 Release.
Установка и настройка ClamAV.
Можно установить из портов. Версия на момент написания комментариев – 0.90.3. Когда делаем make – может выдать ошибку и ругнуться:
«On FreeBSD before 6.2 ports system unfortunately can not set default X11BASE by itself so please help it a bit by setting X11BASE=${LOCALBASE} in make.conf.
On the other hand, if you do wish to use non-default X11BASE, please set variable USE_NONDEFAULT_X11BASE»
Чтобы это устранить добавляем в /etc/make.conf строку: X11BASE=${LOCALBASE} и повторяем сборку.
##
#> cd /usr/ports/security/clamav
#> make
#> make install clean
##
В /etc/rc.conf прописываем строчки:
clamav_clamd_enable=”NO” # демон clamd для работы c-icap не нужен
clamav_freshclam_enable=”YES” # запуск демона обновления антивирусных баз
Хотя если вам не нужен висящий в системе процесс, в предыдущем пункте можно поставить “NO”, и запускать обновление баз из крона, добавив в /etc/crontab строчку:
##
0 0,6,12,18 * * * /usr/local/bin/freshclam
##
И, разумеется, необходимо настроить конфиг, отвечающий за обновление баз ClamAV - /usr/local/etc/feshclam.conf, например так:
##
DatabaseDirectory /var/db/clamav
UpdateLogFile /var/log/clamav/freshclam.log
LogVerbose no
LogSyslog yes
LogFacility LOG_MAIL
DatabaseOwner clamav
AllowSupplementaryGroups no
DatabaseMirror database.clamav.net
MaxAttempts 3
ScriptedUpdates yes
Checks 6
##
Установка и настройки c-icap с поддержкой ClamAV
Самое интересное.
На момент написания комментариев в системе портов 5 ветки FreeBSD есть порт c-icap который установит в систему i_cap-030606rc1. Скажу сразу, это не самый лучший вариант. Добиться устойчивой работы этого создания мне не удалось. В случайные моменты c-icap отказывался работать, начиная отчаянно «мусорить» в лог сообщениями: «general SIGPIPE signal received» (проблема в инете известная). В общем чуть не утроил мне локальный DoS. В итоге был безжалостно удален.
С сайта проекта с-icap http://c-icap.sourceforge.net/ , а точнее отсюда: http://sourceforge.net/project/showfiles.php?group_id=123427 , был скачан самый свежий на момент написания комментариев c_icap-180407.tar.gz а так же Squid, немного пересобранный авторами проекта, squid-icap-2.5.STABLE12-20051102. Именно их и будем устанавливать.
Начнем с c_icap.
##
#> cd /distfiles/сicap
#> tar –xzf c_icap-180407.tar.gz
#> cd c_icap-180407
#> ./configure --enable-static --with-clamav=/usr/local --prefix=/usr/local/c_icap
#> make
#> make check
#> make install
##
На последнем этапе, когда делаем make install, будет вылет по ошибке. Чтобы не править make-файл – просто запустите make install еще раз, все должно закончиться хорошо. Настраиваем: /usr/local/c_icap/etc/c-icap.conf. Например так:
##
PidFile /var/run/c-icap.pid
CommandsSocket /var/run/c_icap/c-icap.ctl
Timeout 100
#
#KeepAlive выключаем. Никакого влияния на быстродействие я не заметил, а количество
#коммуникационных ошибок резко уменьшилось.
KeepAlive Off
#
#При выключенном KeepAlive следующие 2 опции не принципиальны
MaxKeepAliveRequests 200
KeepAliveTimeout 600
#
#Умолчальный вариант конфига для следующих 5 параметров писался наверное для
#пары клиентов, поэтому при работе на настройках по умолчанию вам гарантирована
#высокая загруженность системы, тормоза, неполная загрузка страниц.
#В общем, добавляем не скупясь
StartServers 3
MaxServers 30
MinSpareThreads 10
MaxSpareThreads 300
ThreadsPerChild 30
MaxRequestsPerChild 0
#
Port 1344
#
#От имени этого пользователя будет работать с-icap
User cicap
Group cicap
TmpDir /var/tmp/c_icap
MaxMemObject 131072
#
#Писать логи удобнее в файлы, не используя syslog
ServerLog /var/log/c_icap/server.log
AccessLog /var/log/c_icap/access.log
Logger file_logger
#
ModulesDir /usr/local/lib/c_icap/
Module logger sys_logger.so
Module perl_handler perl_handler.so
#
#При отказе от syslog следующие две опции не принципиальны
sys_logger.Prefix "c-icap:"
sys_logger.Facility local1
#
#Стандартный acl, подходит, если squid работает на том же компьютере, что и c-icap
acl localsquid_respmod src 127.0.0.1 type respmod
acl localsquid src 127.0.0.1
acl externalnet src 0.0.0.0/0.0.0.0
icap_access allow localsquid_respmod
icap_access allow localsquid
icap_access deny externalnet
#
ServicesDir /usr/local/c_icap/lib/c_icap
Service echo_module srv_echo.so
Service squard_module srv_sguard.so
Service antivirus_module srv_clamav.so
ServiceAlias avscan srv_clam?allow204=on&sizelimit=off&mode=simple
#
# Типы проверяемых файлов, описаны в /usr/local/c_icap/etc/c-icap.magic
srv_clamav.ScanFileTypes TEXT DATA EXECUTABLE ARCHIVE GIF JPEG MSOFFICE
srv_clamav.SendPercentData 5
srv_clamav.StartSendPercentDataAfter 2M
#
# Урезал максимальные значения, если железо позволяет – можно оставить умолчальные
srv_clamav.MaxObjectSize 5M
srv_clamav.ClamAvTmpDir /var/tmp/c_icap
srv_clamav.ClamAvMaxFilesInArchive 50
srv_clamav.ClamAvMaxFileSizeInArchive 5M
srv_clamav.ClamAvMaxRecLevel 5
#
#Скажу сразу: прелести режима «варилатора» я не понял. Подробного описания не
#нашел,режим экспериментальный, предназначен для взаимодействия с web-клиентом,
#если функционал нам не нужен – смело выключаем.
#srv_clamav.VirSaveDir …
#srv_clamav.VirHTTPServer …
#srv_clamav.VirUpdateTime …
#srv_clamav.VirScanFileTypes …
##
Подробное описание всех параметров ищите на сайте проекта.
Добавляем в систему пользователя cicap с группой cicap.
Создаем нужные каталоги и файлы и делаем владельцем каталогов и логов cicap:cicap.
##
#> cd /var/log
#> mkdir c_icap
#> touch c_icap/access.log c_icap/server.log
#> chown –R cicap:cicap ./c_icap
#> mkdir /var/tmp/c_icap /var/run/c_icap
#> chown cicap:cicap /var/tmp/c_icap /var/run/c_icap
##
Далее можно запускать и тестировать.
##
#> /usr/local/c_icap/bin/c-icap
#> sockstat -4 | grep 1344
##
Для ротации журнальных файлов в /etc/newsyslog.conf можно добавить строчки:
##
/var/log/c_icap/access.log cicap:cicap 640 7 * @T00 J /var/run/c-icap.pid
/var/log/c_icap/server.log cicap:cicap 640 7 * @T00 JN
##
По умолчанию посылаем –HUP с-icap.pid, что заставит c-icap перечитать конфигурацию и писать в новые файлы логов.
Установка и настройка прокси-сервера Squid.
Устанавливаем версию Squid от c-icap: squid-icap-2.5.STABLE12-20051102.
##
#> cd /distfiles/squid
#> tar –xzf squid-icap-2.5.STABLE12-20051102.tar.gz
#> cd squid-icap-2.5.STABLE12-20051102
##
Конфигурить можно по-разному, главное включить поддержку c-icap. Например так:
##
#>./configure --prefix=/usr/local/squid \ # путь по умолчанию
--enable-ipf-transparent \ # поддержка прозрачного прокси
--enable-delay-pools \ # управление ограничением трафика
--enable-useragent-log \ # журнализовать заголовок Useragent
--enable-kill-parent-hack \ # помогает сделать shutdown чисто
--enable-arp-acl \ # возможность использования mac – адреса в ACL
--enable-icmp \ # измерять путь до каждого HTTP-сервера
--enable-icap-support \ # поддержка c_icap
--enable-err-language=”English” \ # язык сообщений об ошибках
--enable-default-err-language=English # язык сообщений об ошибках по умолчанию
#> make all
#> make install
##
Проверяем строки в squid.conf, относящиеся к поддержке c_icap:
##
icap_enable on
# выключаем предпросмотр
# ничего, кроме ошибок я от него не получил
icap_preview_enable off
icap_preview_size 128
icap_send_client_ip on
icap_service service_avi_req reqmod_precache 0 icap://localhost:1344/srv_clamav
icap_service service_avi respmod_precache 1 icap://localhost:1344/srv_clamav
icap_class class_antivirus service_avi service_avi_req
icap_access class_antivirus allow all
##
Если вы настраиваете Squid в первый раз, рекомендую сначала выключить поддержку c_icap (icap_enable off), отстроить работу прокси, и только потом подключать c_icap.
Вот и все.
Решение работает достаточно устойчиво, что является еще одним подтверждением разумности данного подхода.