Установка 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