Поиск по этому блогу

Powered By Blogger

воскресенье, 29 августа 2010 г.

Бесплатный контент-фильтр в Linux Debian

Использование интернета открывает доступ огромному количества информации. К сожалению, эта информация не всегда несет пользу. Для фильтрации информации применяются всевозможные контентфильтры. В большинстве своем они платные или требуют участия в проектах.
В этой статье я хочу показать пример настройки бесплатной системы фильтрации, основанной на анализе содержимого. Кроме того, будет настроена система антивирусной проверки всего HTTP трафика антивирусом ClamAv и настроена система фильтрации рекламы и банеров AdZapper.

1. Если у Вас не стоит Squid (кальмар), то устанавливаем его
#apt-get install squid3
Если Squid у Вас все же стоял, то Вам это скажут
2. Устанавливаем DansGuardin - контентфильтр, Adzapper - фильтр рекламы и банеров, Havp - демон, для работы с антивирусом ClamAv
#apt-get install dansguardian adzapper havp
На вопрос об установке дополнительных пакетов отвечаем: Y

3. Дальнейшая настройка сводится к правке конфигурационных файлов. Лично у меня все эксперименты с различными конфигурациями заняли около месяца. При этом было перечитано огромное количество русско- и англоязычных материалов. Результатом являются нижеприведенные конфиги. Их можно просто скопировать и ими заменить ваши.

Конфигурация кальмара.
/etc/squid3/squid.conf
Мой пример конфигурации сквида и краткое руководство можно найти по адресу http://sogiuu.oskoluno.ru/area/forum/viewtopic.php?f=4&t=15
Добавить в самое начало конфигурации перед строкой http_port 192.168.0.1:3128 transparent следующее:

# podkluchaem adzapper 
redirect_program /usr/bin/adzapper.wrapper
# podkluchaem havp
cache_peer 127.0.0.1 parent 8080 0 no-query no-digest no-netdb-exchange default
cache_peer_access 127.0.0.1 allow all
acl Scan_HTTP proto HTTP
never_direct allow Scan_HTTP

Сохраняемся.

Конфигурируем DansGuardian
/etc/dansguardian/dansguardian.conf
Делаем на всякий случай бэкап. Настроек много, но все настройки прокомментированы на понятном английском. Остановлюсь на главном:
filterip = 192.168.0.1 - адрес на котором будет работать фильтр
filterport = 3129 - порт на котором будет работать фильтр
proxyip = 192.168.0.1 - адрес, по которому фильтру искать прокси-сервер (наш Squid).
proxyport = 3128 - порт, который слушает прокси-сервер по выше указанному адресу (где фильтру его искать).



# DansGuardian config file for version 2.10.1.1
reportinglevel = 3
languagedir = '/etc/dansguardian/languages'
language to use from languagedir.
language = 'russian-koi8-r'
loglevel = 2
logexceptionhits = 2
logfileformat = 1
filterip = 192.168.0.1
filterport = 3129
proxyip = 192.168.0.1
proxyport = 3128
accessdeniedaddress = 'http://YOURSERVER.YOURDOMAIN/cgi-bin/dansguardian.pl'
nonstandarddelimiter = on
usecustombannedimage = on
custombannedimagefile = '/usr/share/dansguardian/transparent1x1.gif'
filtergroups = 1
filtergroupslist = '/etc/dansguardian/lists/filtergroupslist'
bannediplist = '/etc/dansguardian/lists/bannediplist'
exceptioniplist = '/etc/dansguardian/lists/exceptioniplist'
showweightedfound = on
weightedphrasemode = 2
urlcachenumber = 1000
urlcacheage = 900
scancleancache = on
phrasefiltermode = 2
preservecase = 0
hexdecodecontent = off
forcequicksearch = off
reverseaddresslookups = off
reverseclientiplookups = off
logclienthostnames = off
createlistcachefiles = on
maxuploadsize = -1
maxcontentfiltersize = 256
maxcontentramcachescansize = 2000
maxcontentfilecachescansize = 20000
filecachedir = '/tmp'
deletedownloadedtempfiles = on
initialtrickledelay = 20
trickledelay = 10
downloadmanager = '/etc/dansguardian/downloadmanagers/fancy.conf'
downloadmanager = '/etc/dansguardian/downloadmanagers/default.conf'
contentscanner = '/etc/dansguardian/contentscanners/clamav.conf'
contentscannertimeout = 60
contentscanexceptions = off
recheckreplacedurls = off
forwardedfor = off
usexforwardedfor = off
logconnectionhandlingerrors = on
logchildprocesshandling = off
maxchildren = 120
minchildren = 8
minsparechildren = 4
preforkchildren = 6
maxsparechildren = 32
maxagechildren = 500
maxips = 0
ipcfilename = '/tmp/.dguardianipc'
urlipcfilename = '/tmp/.dguardianurlipc'
ipipcfilename = '/tmp/.dguardianipipc'
nodaemon = off
nologger = off
logadblocks = off
loguseragent = off
softrestart = off
mailer = '/usr/sbin/sendmail -t'

После сохранения настроек, делаем рестарт сервисов, они же демоны (в виндовс это службы)
# /etc/init.d/havp restart
# /etc/init.d/squid3 restart
# /etc/init.d/dansguardian restart

Получаем такую схему работы контентфильтра:

 ИНТЕРНЕТ -> ПРОКСИ (совместно с антивирусом и банерорезкой) -> Контентфильтр -> ПОЛЬЗОВАТЕЛЬ

Схему можно несколько перестроить поменяв местами звенья между Интернетом и пользователем. Но, экспериментируйте сами . 
В нашей схеме в кэше прокси не хранятся банеры, не хранятся ВИРУСЫ.

В настройке браузера пользователя указываем:
для фильтрации контента адрес 192.168.0.1 порт 3129
для подключения без фильтрации контента адрес 192.168.0.1 порт 3129

Возможен вариант, когда все компьютеры в сети уже настроены на 192.168.0.1 порт 3128, а ходить перенастраивать лень . Тогда....

в настройке сквида меняем порт
http_port 192.168.0.1:3128 transparent 
на
http_port 192.168.0.1:3129 transparent

в настройке DansGuardian также меняем порты
filterport = 3128
proxyport = 3129

И настройки прокси в браузере менять не надо, а доступ в интернет без фильтрации по адресу 192.168.0.1 порт 3129.

Желаю удачи. Пишите отзывы, не ленитесь .

Компилируем ядро в Debian. Решаем проблемы с initrd.

Ядро - центральная часть операционной любой системы (ОС), обеспечивающая приложениям координированный доступ к ресурсам компьютера, таким как процессорное время, память и внешнее аппаратное обеспечение. Также обычно ядро предоставляет сервисы файловой системы и сетевых протоколов. Более подробно о ядре операционной системы можно прочитать в этой статье http://ru.wikipedia.org/wiki/%D0%AF%D0%B4%D1%80%D0%BE_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B

О ядре ОС Линукс подробно читайте здесь: http://ru.wikipedia.org/wiki/%D0%AF%D0%B4%D1%80%D0%BE_Linux

При установке любого дистрибутива Линукс, в систему устанавливается ядро, собранное поставщиком дистрибутива. Но не всегда это нас устраивает: не тот набор драйверов, нет поддержки нужных устройств, отключены или наоборот включены какие-то опции. Иногда просто надо поставить проприетарный драйвер. И приходится собирать ядро самому. В каждой новой версии появляются десятки или даже сотни новых возможностей: поддержка устройств, протоколов, способов управления и т.д.
У каждой версии ядра есть редакции, в которых исправляются ошибки обнаруженные в процессе эксплуатации. К каждой новой версии увеличивается не только размер ядра, но и повышается скорость работы. Хотя это можно оспорить, если у Вас компьютер образца начала века. Но в основном скорость работы на имеющемся оборудовании увеличивается с каждой новой версией ядра (в отличие от windows, где с выходом новой версии OC, требования к оборудованию практически удваиваются). 

Собрать ядро (откомпилировать) поначалу кажется чем-то фантастическим и страшным. Ведь это сердце ОС, там могут работать только спецы. Это не так, хотя при первом знакомстве с ОС Линукс именно так я думал сам. Но время не стоит на месте.

1. Получить исходники.
Качаем с сайта http://www.kernel.org нужную версию ядра. Например 2.6.32.хх. (2.6.32 - версия ядра, хх - номер редакции). Рамер около 70 Mb.

2. Готовимся к сборке
Для компиляции ядра необходимо установить в систему следующие пакеты gcc - компилятор С, libncurses5-dev - библиотека псевдографического интерфейса, kernel-package - непосредственно сборщик ядра в deb пакет :
#apt-get install gcc libncurses5-dev kernel-package

3. Подготовка исходников
Войдя под пользователем root копируем архив 2.6.32.хх.tar.bz2 в папку /usr/src. Распаковываем 
# tar xjf 2.6.32.хх.tar.bz2
Можно и просто в mc войти в архив и скопировать из него содержимое в нужную папку. Не имея большого опыта я так сам делал, но как оказалось, при таком способе распаковки, времени уходит в 2 раза больше. А при распаковке архивов 200Mb и более, это очень ощутимо.
Создаем на папку /usr/src/2.6.32.хх символическую ссылку в папку /usr/src/
#ln -s /usr/src/2.6.32.хх /usr/src/

4. Первый этап на пути к ядру
Заходим в папку с исходниками и даем команду:
# make oldconfig
При этом:
- если версии ядра совпадают, то просто появится сообщение о создании файла .config в папке исходников.
- если версия ядра была была младше нашей, Вам будет предложено ответить на вопросы о включении в состав ядра новых, по сравнению с текущим ядром, возможностей. Возможные варианты ответов: Y/n/m/? - может быть три, а не четыре. При этом ответ по умолчанию (т.е. то что будет принято просто нажав Enter) стоит первым и является безопасным. Ответ Y (да, включить в ядро) редко стоит первым в списке ответов, в основном всегда стоит N (нет, не включать в ядро ), m - (да, включить в ядро модулем). Модуль подгружается в память только при необходимость его использования или при явной команде об этом). ? - помощь по данной опции ядра: всегда на английском, в большинстве случаев понятна, часто содержит рекомендацию типа: если не уверен что делаешь, поставь N или безопасно поставить m. Результат сохранится в файле .config в папке исходников.
- если версия ядра ниже используемой, подумай-те, зачем вам это. Снижать версию ядра можно, но зачем?

5. Конфигурирование ядра или основной этап
Запускаем программу конфигурирования ядра.
# make menuconfig
Здесь Вы и уведите зачем была нужна библиотека псевдографики.
Главное окно программы конфигурации ядра содержит список разделов или групп опций.

General setup ---> # главные настройки 
[*] Enable loadable module support ---> # поддержка загрузки модулей ядра 
-*- Enable the block layer ---> # включение уровня блокировок 
Processor type and features ---> # тип процессора и с этим связанные настройки
Power management and ACPI options ---> # настройка управление питанием
Bus options (PCI etc.) ---> # настройка шин 
Executable file formats / Emulations ---> # Выполняемые файлы / Эмуляция
-*- Networking support ---> # Опции настройки сетевых возможностей 
Device Drivers ---> # Драйверы устройств
Firmware Drivers ---> # Настройка несвободных драйверов
File systems ---> # Поддерживаемые файловые системы
Kernel hacking ---> # Настройка ядра (продвинутые настройки или хакинг)
Security options ---> # Настройки безопасности
-*- Cryptographic API ---> # Настройки шифрования
[*] Virtualization ---> # Виртуализация
Library routines ---> # Опции библиотек
--- 
Load an Alternate Configuration File 
Save an Alternate Configuration File

---> означает что это раздел

[ ] блок может быть скомпилированным как встроенным в ядро (Y) или не включаться в ядро вообще (n)
< > блок может быть скомпилированным как встроеным в ядро, подгружаемым модулем (m) или не включаться в ядро вообще 
{ } блок может быть скомпилированным как встроеным в ядро или подгружаемым модулем (т.е. в любом случае скомпилируется)
* - блок будет встроенным
M - будет скомпилирован как подгружаемый модуль
пробел - блок не будет компилироваться.
Здесь http://sogiuu.oskoluno.ru/area/forum/download/file.php?id=5 есть готовый файл конфигурации для ядра 2.6.32. (в архиве нет точки перед названием файла, переименуйте его в .config). Он подойдет для большинства компьютеров и ноутбуков с одной поправкой. Я компилировал его для двухядерных процессоров Intel. Поэтому для себя Вы должно выбрать тот процессор, который вам необходим. Для этого надо зайти в раздел Processor type and features --->, в пункте Processor family (Core 2/newer Xeon) ---> выбрать нужный тип процессора. 
При использовании готового конфигурационного файла команду make oldconfig выполнять не надо, все равно .config будет заменен.

6. Компилируем модули.
Этот этап занимает довольно таки много времени. В зависимости от мощность процессора он может занять от 15 мин. (4-х ядерный и 5 потоков компиляции) до 40 мин и более.
Если вы обладатель многоядерного процессора, то операцию компиляции модулей можно существенно ускорить, включив параллельную работу компилятора.
Для одноядерного процессора команда будет 
# make modules.
Для многодерного
# make -j N modules
где -j - (jobs) - флаг - указатель на многопоточную компиляцию, N - целое число потоков, рассчитанное по принципу: количество ядер плюс один (для двухядерного процессора N=3)
Для процессоров Intel Pentium 4 HT, i3, i5, i7, поддерживающих гипертрейдинг думаю будет справедливо попробовать рассчитать N из следующих соображений N = (количество ядер) * 2 +1. Прервать компиляцию можно комбинацией Ctrl+C. 
 Внимание!!! При многопоточной компиляции процессор загружается на 98-100% , и его температура резко возрастает. Например, корпус моего ноутбука разогревается так, что его невозможно взять в руки. Поэтому, обеспечьте компьютеру хорошую вентиляцию.

7. Собираем deb пакет ядра.
После того, как у Вас безошибочно прошла компиляция модулей, можно (НО НЕ НАДО) находясь в папке с исходниками установить ядро командой 
#make install
Ядро установится, но в случае каких-либо проблем, его не так просто удалить. Таким способом работают любители дистрибутива Slackware linux. При работе с этим дистрибутивом все программы компилируются из исходников. Это надежно, но очень долго.
Надо сказать большое СПАСИБО разработчикам Debian, которые заранее позаботились об установке и удалении программного обеспечения. Наряду с исконно линуксовой установкой через make install, ими была разработана система управления процессом установки/удаления ПО. Эта система управляет deb - пакетами, архивными файлами с расширением deb. Система отвечает за правильность установки ПО, обеспечение зависимостей, контролем размещения файлов и соответственно удалением всего этого хозяйства при необходимости. В общем МОЛОДЦЫ.
Собираем deb пакет
# make-kpkg --initrd kernel_image
Через минут 15-40 в каталог появится файл linux-image-2.6.32-тра-та-та.deb
Если у Вас многоядерный процессор, то команда принимает вид:
# CONCURRENCY_LEVEL=N make-kpkg --initrd kernel_image
где N - число потоков компилирования (расчет N см. выше )

8. Самое приятное. Установка ядра.
Находясь в папке /usr/src/ устанавливаем пакет с ядром командой:
# dpkg -i linux-image-2.6.32-тра-та-та.deb

Иногда при перезагрузке, после установки ядра, машина не хочет загружаться, появляется текст kernel panic. Это известный баг и устраняется он просто:
- Перезагружаемся под старой версией ядра.
- Смотрим в папке /boot/ загрузочный образ ядра initrd.img-2.6.32-тра-та-та. Если его нет, то смотрим правильное название нового ядра по файлу vmlinuz-2.6.32-тра-та-та и следующей командой создадим загрузочный образ initrd
# update-initramfs -c -k 2.6.32-тра-та-та
Следующей командой обновим конфигурацию загрузчика GRUB
# update-grub
Перезагружаемся 
# reboot
И пользуемся.
______________________________________________________
Если после очередной компиляции и сборки ядро выполняет какие-то странные действия после установки (от полной остановки вашей системы, странных проблем с вводом/выводом до малой производительности), то перед повторной компиляцией надо произвести чистку:
#make clean
!!!!При такой чистке файл .config сотрется. Делайте копию.
Для приведения компилированных исходников в девственно-скаченный вид выполняй команду:
#make mrproper






среда, 5 мая 2010 г.

Hitachi StarBoard vs Linux Debian - 0:1 в нашу пользу

Так получалось, что мой класс информатики укомплектован интерактивной доской Hitachi StarBoard. Ох уж и намучился я с её запуском. Последнее что удалось отыскать в интернете - каталонский сайт с драйверами под ядро 2.6.13 для Ubuntu 8.04. Не заработало. Но вернемся к хорошим людям http://vixdeb.blogspot.com/, которые так же были озадачены этим животрепещущим вопросом.
В этом блоге есть все необходимые ссылки на софт и доработанные драйверы для этой доски. На официальном сайте Hitachi прямых ссылок на linux драйверы и ПО я не нашел. Так вот, благодаря Гусеву Андрею (лично не знаком, но при встрече выражу огромное спасибо в каком-нибудь жидком эквиваленте), эта "чудо" доска работает на ура. Есть одна особенность. При использовании этого deb-пакета, а он все таки для Ubuntu, на старых машинах наблюдаются некоторые тормоза именно в программе для доски. Все остальное летает. Интерфейс слегка отличается от Windows версии, а в остальном очень легко осваивается.

С чего же начать?

Первое знакомство с Линуксом - пакет первой помощи 2.0.  Если бы так же впервые познакомился с девушкой - стал бы монахом. Может мне просто не повезло, но первая же установка дистрибутива AltLinux 4  потерпела поражение. Причем на самом простом этапе - определение видео. Уважаемые разработчики,видимо Вы несколько недоперестарались с разработкой (это я теперь понял). На этом путь Альтов в наше образовательное учреждение прекратился, так и не успев начаться.
Как быть? Что делать? Стало несколько страшно. Или мне не хватает умений, навыков, знаний или что?
Мне очень повезло. На своем информационном пути я встретил очень хорошего человека http://vixdeb.blogspot.com/. Вот он в принципе и определил дальнейшее направление в деле внедрения свободного программного обеспечения.
Мы перешли на другой дистрибутив. Debian GNU/Linux http://www.debian.org/  версия 5 lenny. На сайте сказано: Debian — это свободная универсальная операционная система и набор прикладных программ для вашего компьютера. Уважаемые коллеги - это действительно так. Полугодовой опыт общения с Debian все больше и больше меня в этом убеждает.
Но просто взять и использовать дистрибутив - несколько просто с точки зрения Российского законодательства, поэтому администрация школы выделила средства для официального приобретения дистрибутива. Все удовольствие обошлось в !!!! 650 рублей. А купили дистрибутив здесь: http://www.linuxcenter.ru/  раздел магазин. Заказ на сайте, доставка почтой - 3 недели ожидания и дистрибутив у Вас в руках. Ставьте его на баланс и пользуйтесь в свое удовольствие. Не пугайтесь, полный дистрибутив Debian это 5 DVD дисков. Один дистрибутив и для сервера, и для десктопа и для ноутбука и даже на нетбуки ставили. Все работает как швейцарские часы.
Я ни разу не разочаровался в данном решении и всем советую.
Разработчики настолько "допиливают" систему, даже слов нет. МОЛОДЦЫ.
А по поводу распространения - пожалуйста. Хотите официально передать копию дистрибутива - составьте акт приема-передачи со ссылкой на лицензию GNU, передайте дистрибутив и все.

Краткое введение в обстановку.

Имеется: образовательное учреждение, парк десктопов в количестве 40 штук, мобильный класс - 13 ноутбуков, лаборатория - 16 МакБуков,  проложенная локальная сеть,  6 точек доступа wifi, 4 интерактивных доски Hitachi StarBoard, 4 доски SmartBoard, куча периферии,  2 учителя информатики и 1 электроник (студент факультета Информационные технологии).
Задача: внедрить свободное программное обеспечение на территории образовательного учреждения, обеспечить работоспособность оборудования и периферии обучить персонал, организовать локальную сеть с общим доступом в Интернет на скорости 128 кбит/с с участием контент фильтра, централизованное хранилище информации, с разграниченным доступом и ... более или менее контроль за всем этим хозяйством.
Вроде бы это все, ... пока. Если какие-то задачи появятся, список дополню. А пока попробую решить хотя бы эти.