В предыдущей статье я писал как сделать связку SQUID3+SAMS+SAMSREDIRECTOR
Теперь давайте воспользуемся возможностями squid3 в полной мере
и добавим C-ICAP+CLAMAV, получив тем самым возможность фильтрации http трафика.

Ставим антивирус:
apt-get install clamav libclamav-dev
Добавляем задание для обновления антивирусных баз
crontab -u root -e
* */2 * * * /usr/bin/freshclam > /dev/null 2>&1

c-icap – демон ICAP
Адрес проекта: http://sourceforge.net/projects/c-icap
Работать он будет под пользователем proxy в группе nobody
groupadd -g 65535 nobody
cd /usr/src/
wget http://kent.dl.sourceforge.net/sourceforge/c-icap/c_icap-180407.tar.gz
tar -xzpf c_icap-180407.tar.gz && rm c_icap-180407.tar.gz
cd c_icap-180407

Конфигурим:
./configure –enable-static –with-clamav –prefix=/opt/c_icap
(при копировании исправьте — на – -)
make
make install
Получил ошибку:
mkdir: cannot create directory `/opt/c_icap/var/log/’: File exists
Разбираться не стал, просто полечил:
chmod 0775 /opt/c_icap/var/log/
make install
Все отработало нормально.

Теперь пиведем все к удобному и привычному виду:
mv /opt/c_icap/var/log /var/log/c_icap
ln -fs /var/log/c_icap /opt/c_icap/var/log
mv /opt/c_icap/etc /etc/c_icap
ln -s /etc/c_icap /opt/c_icap/etc

Редактируем конфиг:
vim /etc/c_icap/c-icap.conf
Что меняем:

CommandsSocket /var/log/c_icap/c-icap.ctl

User proxy
Group nobody

ServerLog /var/log/c_icap/icap-server.log
AccessLog /var/log/c_icap/icap-access.log

#Acl Controllers default_acl
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

# And here the viralator-like mode.
# where to save documents
srv_clamav.VirSaveDir /var/www/downloads/
-может быть задана несколько раз, таким образом, инфицированные файлы будут
сохраняться во множестве мест.

# from where the documents can be retrieved (you can find the get_file.pl script in contrib dir)
srv_clamav.VirHTTPServer “http://192.168.0.99/cgi-bin/get_file.pl?usename=%f&remove=1&file=”
- ссылка, которая выдаст пользователю уведомление о попытке доступа к инфицированному объекту.

srv_clamav.VirUpdateTime время реинициализация антивирусных баз,
по умолчанию – 15 минут

srv_clamav.ScanFileTypes определяет группы и типы файлов для проверки
(EXECUTABLE и ARCHIVE по умолчанию)

Следующий конфиг файл /etc/c_icap/c-icap.magic
(описание найдено на opennet и не проверялось, добавлено как есть для информации …)
Представляет собой описание форматов различных групп-типов файлов
(TEXT, DATA, EXECUTABLE, ARCHIVE, GRAPHICS, STREAM, DOCUMENT – определённые
группы в c-icap.magic по умолчанию).

Антивирусная проверка строиться по типам файлов, проходящих через
проски-сервер, некоторые типы, например, можно исключить или добавить
свои типы.

Формат записи строки, для определения файла по его magic-числу (последовательности):
offset:Magic:Type:Group:Desc
Offset – смещение, с которого начинаеться Magic-последовательность.
Type и Group – тип и группа, к которой следует относить файл с данной
magic-последовательностью.
Desc – кратное описание, технической нагрузки не несёт.
Для примера загляните в c-icap.magic.

Создаем директорию для хранения инфицированного хлама:
mkdir /var/www/downloads/
chmod 775 /var/www/downloads/
chown proxy:nobody /var/www/downloads/

Скрипт get_file.pl:
cp -p ./contrib/get_file.pl /usr/lib/cgi-bin/
vim /usr/lib/cgi-bin/get_file.pl
Заменить
$filename=”/srv/www/htdocs/downloads/”.$args{“file”};
на
$filename=”/var/www/downloads/”.$args{”file”};
Теперь качаем и копируем файл запуска:
cd /etc/init.d/
wget http://yaroshenko.biz/wp-content/uploads/2008/03/icap
chmod +x /etc/init.d/icap
update-rc.d icap defaults

Стартуем:
root@proxy:/# /etc/init.d/icap start
Starting c-icap:
Initialization of echo module……
Initialization of url_check module……

Проверяем:
root@proxy:/# /etc/init.d/icap status
Status process i-cap:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
c-icap 16918 proxy 5u IPv4 26769 TCP *:1344 (LISTEN)
c-icap 16919 proxy 5u IPv4 26769 TCP *:1344 (LISTEN)
c-icap 16922 proxy 5u IPv4 26769 TCP *:1344 (LISTEN)
c-icap 16926 proxy 5u IPv4 26769 TCP *:1344 (LISTEN)

16984 pts/0 R+ 0:00 \_ /bin/sh -e /etc/init.d/icap status
16918 pts/0 S 0:00 /opt/c_icap/bin/c-icap -d 3 -f /etc/c_icap/c-icap.conf
16919 pts/0 Sl 0:00 \_ /opt/c_icap/bin/c-icap -d 3 -f /etc/c_icap/c-icap.conf
16922 pts/0 Sl 0:00 \_ /opt/c_icap/bin/c-icap -d 3 -f /etc/c_icap/c-icap.conf
16926 pts/0 Sl 0:00 \_ /opt/c_icap/bin/c-icap -d 3 -f /etc/c_icap/c-icap.conf

Идем править конфиг сквида
Находим в конце конфига секцию ICAP OPTIONS
и приводим ее к следующему виду:

icap_enable on
icap_preview_enable on
icap_preview_size 128
icap_send_client_ip on
icap_send_auth_username 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
icap_access class_antivirus allow all

icap_class class_antivirus_req service_avi_req
icap_access class_antivirus_req allow all

Все, теперь reboot и смотрим как все стартует и работает

Протестируем:

http://www.eicar.org/anti_virus_test_file.htm

Идем в секцию Download area using the standard protocol http
и качаем файло, в результате должны получить такое:

icap.png

После попыток скачать зараженные файлы, идем в консоль:
ls -la /var/www/downloads/
drwxrwxr-x 2 proxy root 4096 2008-03-07 00:18 .
drwxr-xr-x 4 root root 4096 2008-03-06 21:47 ..
-rw——- 1 proxy nobody 308 2008-03-07 00:18 CI_TMP_vjR6BV
-rw-r–r– 1 proxy nobody 308 2008-03-07 00:18 eicarcom2.zip
-rw-r–r– 1 proxy nobody 184 2008-03-07 00:18 eicar_com.zip

Все четко, все инфицированные в палате …

Anti-Spam Protection by WP-SpamFree