Главная » 2009 Сентябрь 29 » DansGuardian+Clamav
11:14 DansGuardian+Clamav |
Введение Цель данной статьи рассказать и показать, как можно настроить систему фильтрации контента для пользователей, работающих в доменной структуре MS Windows. Возможности данной системы должны позволять делить пользователей на группы и, в зависимости от принадлежности, давать доступ только в рамках своей группы фильтрации. Так же должна происходить проверка на вирусы, а в случае скачивания файлов должно появиться информационное окошко, которое покажет сколько скачалось,сколько осталось и общий размер. Задача В качестве некоторой тестовой задачи хотелось получить функционирование системы фильтрации контента, в связке с антивирусом, с несколькими группами фильтрации на основе их аккаунтов. Для этой задачи было принято решение использовать следующий набор ПО: Squid - как кеширующий прокси сервер Dansguardian - как система фильтрации контента Clamav - как антивирус Samba - как прослойка между MS AD и Unix/Linux Active Directory - как единое хранилище пользовательских данных В качестве операционной системы был выбран RedHat Enterprise Linux 5. На вопрос почему я отвечу очень просто: все что было под рукой. Если раскрывать более детально, то RHEL 5 имеет более новое ядро, а так же важную функциональность CPUSET, благодаря которой у нас появилась возможность создавать защищённую среду для работы процессов. Защищённость в том смысле, что пользователь может задавать на каких процессорах исполнять тот или иной процесс и его потомков. После таких ограничений процесс не сможет перейти на свободный процессор, что дает нам возможность корректнее распределять нагрузку на процессоры, а так же даст возможность ограничить особо прожорливые процессы. Например в нашей конфигурации можно сделать так: 1 процессор для SQUID, 1 для DansGuardian, 1 для Clamav, 1 для самбы. В итоге у каждой службы будет своё процессор со своей нагрузкой (не считая системную). Описание процесса настройки CPUSET выходит за рамки данной статьи и будет описано позже (если найдется время ). Задача формулировалась так: Система должна кешировать сайты Система должна фильтровать содержимое сайтов и запрещать доступ Система должна иметь несколько групп фильтрации и быть легкоуправляемой Система должна производить проверку на наличие вредоносного кода как при скачивании файлов, так и при просмотре странниц (вредные javascripts ) Система должна интегрироваться в единый каталог пользователей Система должна визуально показывать пользователю, что идёт процесс скачивания и проверки и производить информирование по результату выполнения. Для решения данной задачи оптимально - разбиваем её на несколько этапов. Этап 1 На данном этапе будет произведена установка ОС и всех базовых служб, таких как: squid 2.6 samba kerberos Т.к. все эти службы входят в дистрибутив, то процесс установки будет банальным rpm -ivh <Нужные пакеты> Этап 2 На этом этапе мы остановимся подробнее. Здесь будет описан процесс конфигурирования системных служб и проверка настроек. SAMBA Настройка самбы тривиальна. Базовый конфиг /etc/samba/smb.conf, в котором исправляются нужные вам опции workgroup = RESEARCH называем рабочую группу RESEARCH server string = server имя сервера server security = ads режим безопасности ads - т.е. Active Directory, т.к. у нас основная задача интеграция именно с ним. password server = x.x.x.x указываем IP адресс контролера домена realm = RESEARCH.LAN указываем полное наименование MS Windows домена. В нашем случае это RESEARCH.LAN. Важная особенность - полное наименование должно быть большими буквами. winbind cache time = 10 указываем период обновления кеш данных. Необходимо, если мы не хотим каждый раз при изменении в АД перезапускать службу winbind encrypt passwords = yes winbind use default domain = no winbind uid = 10000-20000 winbind gid = 10000-20000 winbind enum users = yes winbind enum groups = yes опции необходимые для маппинга доменных пользователей локально, установка локальных ID пользователей и групп и т.п. Теперь добавляем в автозапуск службу, чтобы при перезагрузки она стартовала автоматически: # chkconfig winbind on Убеждаемся в том, что служба занесена в автозагрузку # chkconfig --list winbind winbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off Как мы видим на уровнях 2, 3, 4, 5 служба прописана. Производим запуск службы # service smb start # service winbind start На этом вся настройка самбы может быть смело закончена. Теперь можно переходить к настройке kerberos и вводу машины в домен. Kerberos Надо отредактировать файл /etc/krb5.conf. Выглядить он будет примерно так: [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm =RESEARCH.LAN dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h forwardable = yes [realms] RESEARCH.LAN = { kdc = x.x.x.x:88 admin_server = x.x.x.x:749 default_domain = research.lan } [domain_realm] .research.lan = RESEARCH.LAN research.lan = RESEARCH.LAN [kdc] profile = /var/kerberos/krb5kdc/kdc.conf [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false } где адрес x.x.x.x совпадает с адресом контроллера домена, который указывали в конфигурационном файле самбы. Важное замечание: Необходимо соблюдать регистр, т.е. там где прописаны большими буквами домены они должны быть большими. Это требование kerberos. Синхронизация времени Чтобы избежать проблем с kerberos необходимо, чтобы время на контроллере домена и на машине было одинаковым. Допускается разница в 5 минут, но даже это крайне не желательно. Для начала мы просто синхронизируем время: # ntpdate -u x.x.x.x где x.x.x.x адрес контроллера домена. После чего у вас должен появиться такой ответ: 22 Aug 19:48:50 ntpdate[30264]: step time server x.x.x.x offset 4.082098 sec Чтобы время синхронизировалось вне зависимости от вас, надо в файле /etc/ntp.conf прописать строку server x.x.x.x Теперь добавляем в автозапуск службу, чтобы при перезагрузки она стартовала автоматически: # chkconfig ntpd on Убеждаемся в том, что служба занесена в автозагрузку # chkconfig --list ntpd ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off Как мы видим на уровнях 2, 3, 4, 5 служба прописана. Производим запуск службы: # service ntpd start Вводим в домен Для правильной работы нам потребуется ввести машину в домен. Это делается тривиальным способом: # net ads join -U admin%admin123 где запись «admin%admin123» обозначает ни что иное как логин%пароль. Проверяем в домене ли мы: # wbinfo -u Данная команда выведет список всех пользователей домена следующего вида: RESEARCH\administrator RESEARCH\guest и т.п. Теперь необходимо, чтобы система видела пользователей и группы доменной системы. Для этого редактируем файл /etc/nsswitch.conf следующим образом: passwd: files winbind shadow: files winbind group: files winbind И проверяем правда ли мы видим, или есть ошибки. # getent group # getent passwd Если все сделано правильно и без ошибок, то мы получим такие ответы # getent group root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon ...... RESEARCH\domain computers:*:10010: RESEARCH\domain controllers:*:10011: RESEARCH\schema admins:*:10012: и т.п. # getent passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ...... RESEARCH\backup:*:10028:10000:backup:/home/RESEARCH/backup:/bin/false RESEARCH\dfs:*:10029:10000:dfs:/home/RESEARCH/dfs:/bin/false и т.п. Мы убедились что у нас в системе отражаются пользователи. Теперь надо задать пользователя от которого будет происходить аутентификация: # wbinfo --set-auth-user=RESEARCH\\admin%admin123 # wbinfo --get-auth-user RESEARCH\admin%admin123 Теперь переходим к настройке кеширующего прокси сервера. Squid В дистрибутиве уже есть squid версии 2.6 который нам подойдет. Все что нам надо - это произвести его настройку, для этого в файле /etc/squid/squid.conf редактируем следующие опции: http_port 127.0.0.1:3128 опция задает сетевой адрес и порт, на котором сквид будет принимать соединения. На не нужно, чтобы к сквиду обращались напрямую, поэтому вешаем его на петлевой интерфейс auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp auth_param ntlm children 5 auth_param ntlm keep_alive on auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic 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 Заставляем сквид авторизовывать по NTLM, если браузер не поддерживает этого, то используем basic авторизацию. Здесь важна последовательность, поэтому другого варианта быть не может, иначе будут проблемы в работе. acl RESEARCH proxy_auth REQUIRED Создаем список доступа, согласно которому все, кто подпадает под него должны проходить авторизацию в обязательном порядке. http_access allow RESEARCH localhost Говорим сквиду, что все, кто идёт с адреса 127.0.0.1 обязаны пройти авторизацию. Остальные опции настраивайте по вашему усмотрению. Документации на просторах интернета много, поэтому не вижу смысла описывать в очередной раз. Теперь добавляем в автозапуск службу, чтобы при перезагрузки она стартовала автоматически: # chkconfig squid on Убеждаемся в том, что служба занесена в автозагрузку # chkconfig --list squid squid 0:off 1:off 2:on 3:on 4:on 5:on 6:off Как мы видим на уровнях 2, 3, 4, 5 служба прописана. Производим запуск службы: # service squid start На этом этап настройки завершён. Переходим к этапу настройки антивируса и системы контроля за контентом. Этап 3 На данном этапе на понадобиться антивирус clamav и система контроля за контентом dansguardian. Скачиваем с сайта www.clamav.net последнюю версию антивируса (на момент публикации версия была 0.91.1) Скачиваем с сайта www.dansguardian.org версию 2.9.9.0 Скачиваем патч для dansguardian (позже объясню для чего) отсюда: ntlm_group.patch.gz Clamav Распаковываем скачанный файл $ tar xzvf clamav-0.91.1.tar.gz Собираем антивирус со следующими опциями $ ./configure --prefix=/opt --with-user=squid --with-group=squid --with-tcpwrappers--enable-dns-fix Описание этих опций можно получить по команде $ ./configure --help Далее производим компиляцию и установку $ make # make install Теперь добавим в /etc/ld.so.conf.d/clamav.conf следующую строчку /opt/clamav/lib Добавим в /etc/profile.d/clamav.sh следующее PATH=/opt/clamav/bin:/opt/clamav/sbin:$PATH LD_LIBRARY_PATH=/opt/clamav/lib:$LD_LIBRARY_PATH Обновим кеш библиотек # ldconfig -n /opt/clamav/lib Обновим переменные окружения, которые мы задали, чтобы увидеть исполняемые файлы clamav # source /etc/profile Есть второй и более правильный вариант - использовать rpm репозитарии. Чтобы задействовать репозитарий надо скачать пакет rpmforge-release, в котором уже есть необходимые конфигурационные файлы и GPG ключи. И так качаем его с сайта http://dag.wieers.com/rpm/packages/rpmforge-release/ Берем самый последний, который соответствует нашей операционной системе. Для RHEL 5 был последним пакет http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm После того, как скачивание будет завершено произведём его установку # rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm Теперь у нас подключен репозитарий, с которого будет производиться так же и обновление. Чтобы установить clamav последней версии воспользуемся стандартными средствами RHEL для управления пакетами, а именно yum # yum update произведём обновление пакетов, если есть более новые версии. # yum install clamav после этого у вас в системе появится clamav последней версии, а так же будет обновляться по мере необходимости. Этот вариант более предпочтителен, т.к. вам не надо заботиться об обновлении антивируса, система сделает это за вас. Установка завершена. Теперь осталось сконфигурировать антивирус и обновить базы. Описывать эти процедуры не буду, т.к. есть документация. DansGuardian Что такое DansGuardian? DG - это система фильтрации контента, в отличии от стандартных редиректоров сквида она умеет фильтровать не только по URL сайтов, но и по их содержимому, проставляя баллы и на основе набранных баллов разрешать или запрещать тот или иной сайт. DG умеет работать с несколькими группами фильтрации, что позволяет администратору давать гибко настраивать систему и разрешать/запрещать те или иные сайты для групп. Что не мало важно - DG умеет работать с антивирусами, что позволяет не только фильтровать но и проверять содержимое на наличии вирусов. Поддерживаются следующие виды антивирусов: Kaspersky и Clamav, остальные антивирусы могут работать либо через ICAP протокол, либо через командную строку. Для clamav есть следующие возможности: libclamav Данная возможность позволяет DG сканировать данные, используюя библиотеку антивируса. Здесь есть свои плюсы и минусы. К плюсам можно отнести полную интеграцию антивируса, сканирование будет производиться самостоятельно, без запуска демона clamd. Я рекомендую данную возможность на системах с 1 процессором. Минусы такого подхода в том, что DG тратит своё время на проверку вирусов, вместо того, чтобы отдать демону clamd контент и заниматься своим делом, ожидая ответа вида Чист/Заражён. clamd Данная возможность позволяет DG отдавать данные демону clamd и не заниматься самовыявлением. Такой подход хорош, когда у нас многопроцессорная машина и, в купе с CPUSET, мы можем отдать тяжёлую работу отдельному демону, который будет замаплен на процессор и не будет грузить остальные. commanline Самый тяжёлый метод - метод когда DG передает утилите сканирования, как параметр, файл с контентом. Зачем нужен патч? Дело в том, что при использовании NTLM протокола DG удостоверится, что пользователю разрешён доступ и далее будет искать его в своих группах фильтрации. Проще говоря, нам надо будет ручками прописывать каждого пользователя к группе фильтрации, что может быть не эффективно, а если пользователей более 10 ещё и обременительно. Патч исправляет этот недочет. Благодаря ему, мы имеем возможность создавать системные группы вида dgfilterX где X - номер группы от 1 до 99. Теперь нам надо всего лишь задействовать механизм nsswitch для подключения нужных нам каталогов и создать в каталогах группы. Члены группы автоматически будут подключены к той или иной группе фильтрации, нам останется лишь создать необходимое количество конфигурационных файлов вида danguardianfX.conf где X - номер группы, там же поправить опции groupmode = X где X - номер политики 0 = banned 1 = filtered 2 = unfiltered (exception) и назвать группу (что не обязательно) groupname = 'XXXX' где XXX - запись любого вида. Цель её просто назвать группу, ну например Full Access, WWW pages only и т.п. После этого в том же Active Directory мы просто добавляем пользователя в группу. Важно знать: 1. Если пользователь в нескольких группах, то система автоматически направит его в группу по умолчанию, т.к. пользователь не может быть в 2-х и более группах одновременно 2. При создании группы в AD надо выбирать параметры Group scope: "Global" и Group Type: "Security" Переходим непосредственно к установке. Распаковываем скачанный файл $ tar xzvf dansguardian-2.9.9.0.tar.gz Накладываем патч $ zcat ../ntlm_group.patch.gz | patch -Np1 Производим конфигрурирование $ ./configure --prefix=/opt/dg --with-proxyuser=squid --with-proxygroup=squid --with-zlib --enable-ntlm --enable-trickledm --enable-fancydm --enable-commandline --enable-icap --enable-kavd --enable-clamd --enable-clamav --enable-pcre Опции '--enable-ntlm' включить поддержку NTLM '--enable-trickled' включить поддержку менеджера докачки. Данный менеджер позволяет постепенно отдавать контент, чтобы пользователь видел его статус, по окочанию скачивани и проверки будет принято решение отдавать до конца или заблокировать. '--enable-fancydm' включить поддерку менеджера докачки. Данный менеджер будет выводить странницу со статусом скачивания файла и результатом проверки. В случае, если будет найден вирус, то появится сообщение в браузере об этом. Важно знать, что на сайтах, где закачка подключается через javascript (например sourceforge.net) данная странница не появится, поэтому надо будет переходить по реальной ссылке. При этом закачка не будет останавливаться и при переходе вы получите текущий статус скачивания. '--enable-commandline' '--enable-icap' '--enable-clamd' '--enable-clamav' '--enable-kavd' режимы проверки на вредоносность данных '--enable-pcre' включить поддержку библиотеки регулярных выражений. Далее производим сборку и установку $ make # make install После этого производится конфигурация самого DG в файле <PATH_TO_INSTALL>/etc/dansguardina/dansguardian.conf Файл хорошо документирован, поэтому вдаваться в детали каждой опции не буду, опишу только те, на которые стоит обратить внимание: language = 'russian-1251' странница с сообщение о блокировке будет выдаваться на русском языке. Шаблоны лежат в директории languagedir = '/opt/dg/share/dansguardian/languages' можете перенести куда вам будет удобнее и исправить тут путь. filterip = 10.0.60.150 filterport = 8080 IP адресс и порт, по которым DG будет работать. proxyip = 127.0.0.1 proxyport = 3128 адрес прокси сервера, в нашем случае сквида. DG не умеет работать отдельно, только в связке. filtergroups = 2 здесь необходимо прописывать количество групп фильтрации. Т.е. у вас в системе все группы должны идти последовательно и количество этих групп должно быть тут указано. Например у вас есть группы dgfilter1, dgfilter2 и dgfilter3 в итоге количество групп у нас будет 3. deletedownloadedtempfiles = on удалять файлы, после того как будут закачены. downloadmanager = '/opt/dg/etc/downloadmanagers/fancy.conf' downloadmanager = '/opt/dg/etc/downloadmanagers/default.conf' тут указывается необходимый вам менеджер докачки, которые я описал выше contentscanner = '/opt/dg/etc/contentscanners/clamav.conf' указываем, что хотим использовать libclamav authplugin = '/opt/dg/etc/authplugins/proxy-basic.conf' authplugin = '/opt/dg/etc/authplugins/proxy-ntlm.conf' указываем что хотим использовать авторизацию по NTLM и BASIC. На самом деле авторизация будет проходить на сквиде, а не на DG. Поэтому если у вас сквид не настроен, то работать DG не будет. forwardedfor = off usexforwardedfor = off опции необходимы, если вы хотите чтобы в логах сквида отображался IP адрес клиента, вместо 127.0.0.1 Вот собственно и все. Конфигурация закончена. Теперь приведу некоторое объяснение как создавать группы фильтрации. Если вы обратите внимание, то рядом с конфигурационным файлом лежит файл dansguardianf1.conf, который есть ни что иное, как файл конфигурации группы фильтрации по умолчанию. Чтобы создать файлы для других групп надо просто скопировать заменив суффикс на соответствующий, т.е.: dgfilter1, default - dansguardianf1.conf dgfilter2 - dansguardianf2.conf dgfilter3 - dansguardianf3.conf Далее копируем директорию с шаблонами проверки lists и создаем нужную вам структуру шаблонов (1 группа фильтрации использует директорию lists поэтому можно начать со второй), например так: groups groups/fgroup2 groups/fgroup3 И соответсвенно заменяем в файлах конфигурации пути до списков согласно вашей структуре. Так же в этих файлах вы можете отключать для групп фильтрацию всего контента, делать группы, которым будет заблокирован доступ вообще и т.п. Теперь добавляем в автозапуск службу, чтобы при перезагрузки она стартовала автоматически, для этого скопируем из директории <PATH_TO_INSTALL>/share/dansguardian/scripts/systemv-init в директорию /etc/init.d/ # cp <PATH_TO_INSTALL>/share/dansguardian/scripts/systemv-init /etc/init.d/dansguardian # chkconfig --add dansguardian # chkconfig dansguardian on Убеждаемся в том, что служба занесена в автозагрузку # chkconfig --list dansguardian ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off Как мы видим на уровнях 2, 3, 4, 5 служба прописана. Производим запуск службы: # service dansguardian start Важно знать: При первом запуске DG будет ругаться на отсутствие файлов, просто досоздайте их по тому же пути, на который он ругается при помощи команды ''touch''. Вот и все, остальное дело ваше. Играйтесь, настраивайте, отсылайте ошибки разработчику. Эксперементируйте и/или наслаждайтесь. |
|
Всего комментариев: 0 | |