В предыдущей статье я писал как сделать связку 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
и качаем файло, в результате должны получить такое:
После попыток скачать зараженные файлы, идем в консоль:
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
Все четко, все инфицированные в палате …
Эта запись была опубликована 07.03.2008в 12:40 дп. В рубриках: Howto. Вы можете следить за ответами к этой записи через RSS 2.0. Вы можете оставить свой комментарий или трекбек со своего сайта.
Yaroshenko @blog
Стартуем:
root@proxy:/# /etc/init.d/icap start
Starting c-icap:
Initialization of echo module……
Initialization of url_check module……
—————————————————————
После запуска вываливается процесс в бесконечность.
Initialization of echo module……
Initialization of url_check module……
После перезагрузки аналогично и не стартуются остальные сервисы так как этот процесс еще не запущен. Лечил проблему через safe во время запуска удалил и потер файл.
Проверял на 4.0r3. В чем может быть проблема ?
Вопрос снят, я на 2-ю ветку squid вешал а соответственно icap там еще не реализован. Дальнейшие шаги по установке только для 3 версии squid.
На самом деле оно там реализовано, но не по умолчанию,
необходимо пересобирать кальмара из исходников, указывая нужные ключи.
c_icap, при инициализации антивируса подвисает, никто не сталкивался?
Если быть совсем точным, то icap поддерживается squid’ом версии 2.5, а вот в 2.6 уже нет. Хорошо, что в 3 icap вернули
Спасибо!!!!
пересобрал только squid и всё пошло.
Респект, тебе, дружише.
Русифицировать то сообщение что вылазиет, про вирус - которое врезано намертво в код. Для этого рихтуем строки в файле (в исходниках):
services/clamav/srv_clamav_vir.c
char *e_message=”A VIRUS FOUND”\
“You try to upload/download a file that contain the virus”;
char *t_message=”This message generated by C-ICAP srvClamAV/antivirus module”;
const char *msg=”Your file was saved as:”;
const char *msg2=”Ask your administration for info how to get it”;
на такие, например:
char *e_message=”\n\nВ запрошенной странице содержался вирус “\
“-> доступ запрещщён.\n\n”\
“\n\n\n”\
“В запрошенной странице содержался вирус!\n\n”\
“Вы попытались зайти на страницу содержавшую вирус:“;
char *t_message=”Это сообщение автоматически сгенерированно сервером.”\
” Модуль: \”C-ICAP srvClamAV/antivirus module\”";
const char *msg=”\nЗапрошенный Вами файл сохранён как:“;
const char *msg2=”\n\nЕсли он Вам действительно нужен - “\
“спросите системного администратора, как его получить.”\
“\n\n\n\n”;
И в файле services/clamav/srv_clamav.c
char *error_message=”A VIRUS FOUND”\
“You try to upload/download a file that”\
“contain the virus”;
char *tail_message=”This message generated by C-ICAP “\
“srvClamAV/antivirus module”;
на такие:
char *error_message=”\n\nВ запрошенной странице”\
” содержался вирус “\
“-> доступ запрещщён.\n\n”\
“\n\n\n”\
“В запрошенной странице содержался вирус!\n\n”\
“Вы попытались зайти на страницу содержавшую вирус.”;
char *tail_message=”Это сообщение автоматически сгенерированно сервером.”\
” Модуль: \”C-ICAP srvClamAV/antivirus module\”\n\n”;
После чего пересобираем, и переставляем icap.