Автор: raider | 07.03.2008 | 12:00 | В рубриках: Howto

В предыдущей статье я писал как сделать связку 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

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

Эта запись была опубликована 07.03.2008в 12:40 дп. В рубриках: Howto. Вы можете следить за ответами к этой записи через RSS 2.0. Вы можете оставить свой комментарий или трекбек со своего сайта.

Комментариев (7)

  1. 09.04.2008 в 1:28 дп


    Стартуем:
    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. В чем может быть проблема ?

    Автор: nocture
  2. 09.04.2008 в 1:49 дп


    Вопрос снят, я на 2-ю ветку squid вешал а соответственно icap там еще не реализован. Дальнейшие шаги по установке только для 3 версии squid.

    Автор: nocture
  3. 13.04.2008 в 9:26 пп


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

    Автор: raider
  4. 15.04.2008 в 2:33 пп


    c_icap, при инициализации антивируса подвисает, никто не сталкивался?

    Автор: bevice
  5. 24.04.2008 в 4:46 пп


    Если быть совсем точным, то icap поддерживается squid’ом версии 2.5, а вот в 2.6 уже нет. Хорошо, что в 3 icap вернули :)

    Автор: Agent
  6. 05.05.2008 в 9:51 пп


    Спасибо!!!!
    пересобрал только squid и всё пошло.
    Респект, тебе, дружише.

    Автор: Эд
  7. 09.07.2008 в 7:12 пп


    Русифицировать то сообщение что вылазиет, про вирус - которое врезано намертво в код. Для этого рихтуем строки в файле (в исходниках):
    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.

    Автор: Илья

Оставьте свой комментарий

Примечание: Осуществляется проверка комментариев, и это может задержать их публикацию. Отправлять комментарий повторно нет необходимости.