Установка squid+c-icap+clamav
ссылка-1
устанавливем clamav
-------------------------
#rpm -ihv clamav-db-0.92.1-1.rh9.rf.i386.rpm
#rpm -ihv clamav-0.92.1-1.rh9.rf.i386.rpm
для того чтобы icap при компиляции написал что clamav найден устанавливаем пакет
#rpm -ihv clamav-devel-0.92.1-1.rh9.rf.i386.rpm
последний пакет clamd-0.92.1-1.rh9.rf.i386.rpm можно не устанавливать, так как icap
не использует демон для проверки.
в /etc/crontab вставляем расписание обновление антивирусных баз
0 0,6,12,18 * * * /usr/bin/freshclam
при этом файл /etc/freshclam.conf имеет следующий вид:
DatabaseDirectory /var/clamav
UpdateLogFile /var/log/clamav/freshclam.log
LogFileMaxSize 2M
LogTime yes
LogVerbose yes
LogSyslog yes
DatabaseOwner clamav
DatabaseMirror db.ru.clamav.net
DatabaseMirror db.local.clamav.net
MaxAttempts 5
ScriptedUpdates yes
по умолчанию опция
NotifyClamd /etc/clamd.conf
раскомментирована, она указывает сообщить демону clamd что антивирусная база обновлена,
но так как мы не будем использовать демон clamd то данную опцию нужно закомментировать
(об этом можно прочитать в man freshclam).
увеличивавем max file descriptors
-------------------------------------------
в книге по squid специально уделяется внимание max file descriptors. увеличиваем их так.
{здесь ссылка на статью как увеличить file-descriptors}
1) в /etc/sysctl.conf дописываем внизу
fs.file-max=8192
2) в /etc/security/limits.conf добавляем
user soft nofile 8192
user hard nofile 8192
squid soft nofile 8192
squid hard nofile 8192
для пользователя user под которым я компилировал исходники(возможно необязательно)
и пользователь squid под которым будет работатать демон squid.
3) в /usr/include/bits/typesizes.h устанавливаем
#define __FD_SETSIZE 8192
проверить можно командой
$ulimit -n
если все правильно то после запуска ./configure должны увидеть
checking Default FD_SETSIZE value... 8192
checking Maximum number of filedescriptors we can open... 8192
когда squid будет уже установлен и запущен, то можно в /var/www/cgi-bin скопировать файл $prefix/libexec/cachemgr.cgi
и в браузере http://localhost/cgi-bin/cachemgr.cgi
можно будет посмотреть статистику работы squid
логина и пароля нет просто жмем "continue"-"General Runtime Information"
ищем строку Maximum number of file descriptors: 8192
{здесь ссылки на статьи о том что число открытытх файлов и число дескрипторов не совпадает}
еще две ссылки на статьи связанные с дескрипторами файлов
{ссылка-4}
{ссылка-5}
устанавливаем squid
с поддержкой icap
---------------------------------------
скачиваем с sourceforgenet, в рамках проекта icap есть уже поправленный
squid с поддержкой icap. скачивал оттуда. версия доступного squid=2.5.12
# ./configure --prefix=/usr/local/squid \ #(в префиксе только полный путь)
--enable-delay-pools \ # управление ограничением трафика
--enable-kill-parent-hack \ # помогает сделать shutdown чисто
--enable-icmp \ # измерять путь до каждого HTTP-сервера
--enable-icap-support \ # поддержка c_icap
--enable-err-language=”English” \ # язык сообщений об ошибках
--enable-default-err-language=English \# язык сообщений об ошибках по
--enable-removal-policies="heap,lru" \
--enable-async-io \
--enable-storeio="ufs,aufs,coss,diskd" \
--disable-ident-lookups \
--disable-wccp \
--disable-snmp \
--enable-poll \
пример squid.conf
#######################################################################
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_dir ufs /usr/local/squid/var/cache 300 16 256
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443 563
acl MYNETWORK src 192.168.11.0/24
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow MYNETWORK
http_access allow localhost
http_access deny all
icp_access allow all
cache_mgr sql@localdomain
cache_effective_user squid
cache_effective_group squid
visible_hostname localhost.localdomain
#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
coredump_dir /usr/local/squid/var/cache
##########################################################################
поначалу пока настраиваем squid опции icap закомментированы
#groupadd squid
#adduser -g squid -s /sbin/nologin squid
#chown -R squid.squid /usr/local/squid/var
#./squid -k parse
#./squid -z
вначале лучше запускать squid в режиме foreground и убедиться что все в порядке
#./squid -d1 -N -D
устанавливаем icap
----------------------------------
#./configure --enable-static --with-clamav --prefix=/usr/local/c-icap
важным для меня было чтобы в выводе было
checking for clamav 0.90.x or newer... yes
это было обеспечено установленным ранее clamav-devel*rpm
если clamav устнавливался путем компиляции из исходников то нужно изменить команду примерно так
#./configure --enable-static --with-clamav=/usr/local/clamav --prefix=/usr/local/icap
работать оно будет от имени пользователя icap, заводим его
#groupadd c-icap
#adduser -g c-icap -s /sbin/nologin c-icap
пример c-icap.conf
################################################################
#chown -R c-icap.c-icap /var/run/c-icap
#mkdir /var/tmp/c-icap
#chown -R c-icap.c-icap /var/tmp/c-icap
#mkdir /var/log/c-icap
#touch /var/log/c-icap/server.log
#touch /var/log/c-icap/access.log
#chown -R c-icap.c-icap /var/log/c-icap
запускаем и проверяем что работает
#/usr/local/c-icap/bin/c-icap
#netstat -l | grep 1344
tcp 0 0 *:1344 *:* LISTEN
теперь раскомментируем строки в squid.conf относящиеся к c-icap и можно тестировать squid
в связке с c-icap. странное дело вначале писало мне в браузере что c-cap сервер error. потом я
включил юзера squid в группу c-icap и юзера c-icap в группу squid. после этого эта ошибка исчезла.
потом я вернул обратно, то есть юбрал юзера squid из группы c-icap и убрал юзера c-icap из группы
squid но связка при этом продолжала работать.
осталось добавить squid как даемон в /etc/rc.d/init.d
пока так(сделано на основе файла из squid*rpm)
#######################################################
PATH=/usr/bin:/sbin:/bin:/usr/sbin:$prefixsquid
export PATH
prefixsquid=$prefixsquid
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
[ ${NETWORKING} = "no" ] && exit 0
[ -f $prefixsquid/etc/squid.conf ] || exit 0
SQUID=$prefixsquid/sbin/squid
prog="$prefixsquid/sbin/squid"
CACHE_SWAP="$prefixsquid/var/cache"
RETVAL=0
start() {
echo -n $"Starting SQUID "
$SQUID -s >> $prefixsquid/var/logs/squid.out 2>&1
RETVAL=$?
echo_success
echo
return $RETVAL
}
stop() {
echo -n $"Stopping SQUID "
$SQUID -k shutdown >> $prefixsquid/var/logs/squid.out 2>&1
RETVAL=$?
echo_success
echo
return $RETVAL
}
reload() {
$SQUID $SQUID_OPTS -k reconfigure
}
restart() {
stop
start
}
condrestart() {
[ -e /var/lock/subsys/squid ] && restart || :
}
rhstatus() {
status $SQUID
$SQUID -k check
}
probe() {
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
restart
;;
condrestart)
condrestart
;;
status)
rhstatus
;;
probe)
exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"
exit 1
esac
exit $?
############################################
и еще нужно запускать c-icap при загрузке.
Сайт управляется системой
uCoz