Журнал LinuxFormat - перейти на главную

LXF81:DansGuardian

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Новая: ==DansGuardian Умные фильтры== ''Устали от дряни, на которую вы, ваши сотрудники и ваши дети набредают в Интерн...)
 
м (Подключаем ваши фильтры)
Строка 241: Строка 241:
 
===Подключаем ваши фильтры===
 
===Подключаем ваши фильтры===
 
Доказав концепцию, окинем взглядом общую картину. Пройдите в каталог $INSTALL_DIR/etc/DansGuardian/lists и введите
 
Доказав концепцию, окинем взглядом общую картину. Пройдите в каталог $INSTALL_DIR/etc/DansGuardian/lists и введите
find . -type f | sort | more
+
<source lang="bash">
 +
find . -type f | sort | more
 +
</source>
  
 
чтобы получить более-менее упорядоченный список всех доступных
 
чтобы получить более-менее упорядоченный список всех доступных
Строка 258: Строка 260:
 
подразделы сайтов соответственно: в последнем случае вы можете
 
подразделы сайтов соответственно: в последнем случае вы можете
 
разрешить http://www.somenewspaper.com/sport и http://www.somenewspaper.com/travel, отклонив другие разделы этого же портала.
 
разрешить http://www.somenewspaper.com/sport и http://www.somenewspaper.com/travel, отклонив другие разделы этого же портала.
 +
 
===Рейтинги PICS===
 
===Рейтинги PICS===
 
Не заблуждайтесь насчет файла pics, поскольку он не связан с изображениями. В нем даются указания DG, как использовать платформу для
 
Не заблуждайтесь насчет файла pics, поскольку он не связан с изображениями. В нем даются указания DG, как использовать платформу для

Версия 17:18, 14 марта 2008

Содержание

DansGuardian Умные фильтры

Устали от дряни, на которую вы, ваши сотрудники и ваши дети набредают в Интернете? У цензора Марко Фиоретти есть открытое решение – оно поможет вам установить гибкие, изощренные фильтры содержимого для Сети.

В LXF76 читатели учебника Hardcore Linux накопили немало БКЧ – «Баллов Компьютерной Чокнутости» (Geek Points), установив прокси-сервер Squid. Если вы в этом участвовали, пари держу, что теперь вы бороздите просторы Интернета быстрее, чем когда-либо, и ваши дети защищены от скачивания вирусов или попадания на подозрительные сайты. В этом уроке я собираюсь подорвать ваше свежеобретенное ощущение безопасности, и помогу вам справиться с более мрачными угрозами интернета – и, конечно же, набрать дополнительные Баллы Чокнутости.

Мы вас надули

Безусловно, фильтрация по URL и IP-адресам, которую осуществляет Squid, очень быстрая и простая, но существенно ограниченная. При минимуме изобретательности ее можно обойти, и многие web-сайты (особенно сомнительного содержания) постоянно изменяют свои параметры, делая это быстрее, чем вы успеете сказать «ядро».

Ответом на все это является программа Даниэля Бэррона под названием DansGuardian. Как и Squid, DansGuardian (далее – DG) может блокировать IP-адреса, URL или целые домены, числящиеся в черном списке. Но подлинная причина, по которой его следует использовать – та, что в первую очередь это фильтр содержимого (контента). DG действительно способен просканировать входящую web-страницу и заблокировать ее, если ее текст нарушает некоторые определенные пользователем критерии.

DG не скачивает web-страницы напрямую: он создан для работы поверх прокси-сервера, например, Squid, и это Хорошая Штука по двум причинам. Первая – остаются доступными все преимущества повышения скорости, присущие прокси-серверам, и разработчикам не надо дублировать код. Вторая – поскольку вы, несомненно, читали LXF76, вы можете (скорее всего) пропустить часть, касающуюся прокси, и сосредоточиться на разъяснении черной магии DG-фильтрации.

Галопом по функциям

Самое важное из вещей, предлагаемых DG – именно то, что делает свободное ПО столь интересным: если вы готовы потратить немного времени и немного «запачкать» руки, то достигнете полного контроля и станете господином вашей вселенной. Вы и только вы вольны решать, что допускать из Интернета на свой компьютер, а что нет. Это может быть у вас дома, на работе, в школе и вообще везде, где вы отвечаете за управление доступом в Интернет (многие некоммерческие и общественные организации, использующие DG, перечислены на его домашней странице, http://DansGuardian.org).

DG работает на всех известных людям Unix-подобных системах, включая Mac OS X. И еще одно преимущество – то же, что и у любого другого сервера: требуется лишь один Linux-шлюз «DG + Squid», чтобы защитить все компьютеры в вашей сети, и неважно, сколько различных операционных систем в ней используется, как часто меняется их конфигурация, сколько людей с ними работает и любят ли эти люди менять браузеры. Модуль Webmin обеспечивает удаленное сопровождение через web-интерфейс.

Что же касается собственно фильтрации, то DansGuardian может определять неприемлемые страницы несколькими способами. Простейший из них, который DG разделяет с более традиционными web-фильтрами – это занесение в черные списки IP-адресов, определенных URL или целых доменов. Чтобы определить эти параметры с предельной гибкостью, можно использовать регулярные выражения.

А уж где DG блистает, так это в распознавании слов или фраз, которые вы хотели бы заблокировать внутри текста web-страницы, даже если они замаскированы смешанным HTML-кодом или умышленно нашпигованы пробелами. Многие слова и фразы, которые, по общепринятым нормам, следует блокировать, внесены в настройки по умолчанию и в список слов, поставляемый с DG (мы займемся ими позже). Еще один уровень гибкости предоставляется за счет разделения пользователей на группы, каждая со своими настройками фильтрации.

Как и web-фильтры, DG может блокировать или ограничивать скачивание файлов, а также загрузку файлов на сервер через web-формы. Типы MIME, расширения файлов или их размер – все это можно использовать как критерии блокировки. Есть и способы определения вирусов в допустимых вложениях.

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

Установка из исходников? Точно!

Прежде чем приступить к работе, проверьте на сайте DG наличие последней версии (исходные тексты и RPM-пакеты для версии 2.8.0.6 можно также взять с нашего диска). Если менеджер пакетов вашего дистрибутива отыщет соответствующий двоичный пакет, можете прямо его и использовать; но если вы ни разу не собирали программу из исходных кодов, то сейчас самая пора научиться.

Причина, по которой я советую вам сойти с накатанного пути, заключается в том, что DG – один из безопаснейших способов пройти этот ритуал посвящения. DG специально написан без обращений к сторонним библиотекам, так что замечательно соберется везде, где есть современный инструментарий GNU. Итак, чего вы ждете? Прежде всего, скачайте архив с последней версией и выполните (как суперпользователь) следующие команды:

gunzip DansGuardian-НОМЕР_ВЕРСИ .tar.gz
tar xf DansGuardian-НОМЕР_ВЕРСИ .tar
cd DansGuardian-НОМЕР_ВЕРСИ /
./configure
make
make install

где НОМЕР_ВЕРСИИ – номер версии пакета, который вы скачали [достаточно выполнить от имени root только последнюю команду, – прим.ред.].

Если все прошло превосходно, а похоже, что так и будет, не унывайте: первая западня может подстерегать вас тут же за углом. Что делают настоящие Linux-хакеры, как только что-нибудь установят? Естественно, принимаются читать man-страницы. Для запуска программы man-страница потребует (по крайней мере, в версии 2.9.6.2) набрать в ответ на приглашение оболочки, или внести в сценарий инициализации, следующую строку:

/etc/rc.d/init.d/DansGuardian [stop|start|status|restart]

Вместо нее наберите, пожалуйста, это:

/etc/rc.d/init.d/DansGuardian start

Сделали? Отлично! Получили сообщение об ошибке “No such file or directory” (нет такого файла или каталога)? Мы тоже! Без паники: DG установился, но что за радость, если документация всегда соответствует действительности?

Вы узнаете, где ж он засел в вашей системе, набрав whereis DansGuardian:

# whereis DansGuardian
DansGuardian: /usr/local/sbin/DansGuardian /usr/local/etc/DansGuardian

Случилось то, что сценарий компиляции по умолчанию использует в качестве базового каталога /usr/local. Для установки в другое место вам нужно добавить в приведенную выше команду ./configure опцию --prefix=НОВЫЙ_КАТАЛОГ.

Настройка DansGuardian

Умение убедить DG делать именно то, что вы хотите, и тем способом, каким надо, можно разделить на три основных части: сетевые и другие общие установки и настройка фильтрации и производительности. Давайте рассмотрим их в указанном порядке.

Все основные параметры DG сосредоточены в его конфигурационном файле DansGuardian.conf, с достаточно подробными комментариями и значениями по умолчанию. Прежде всего откройте конфигурационный файл в любом текстовом редакторе и проверьте эти две переменные:

filterport = 8080
proxyport = 3128

Они означают, что DG, как мы и предупреждали, сидит между браузером и прокси-сервером: в этом случае он будет использовать TCP- порт 8080 для общения с браузером и одновременно порт 3128 для связи с любым прокси-сервером, прослушивающим этот порт. Поскольку 3128 «совершенно случайно» является портом по умолчанию Squid’а, оба сервера сразу же найдут друг друга при стандартных настройках.

Конечно, нет никаких мистических причин держаться указанных выше номеров: главное, чтобы они соответствовали. То есть значение proxyport должно совпадать с параметром Squid http_port (или эквивалентной переменной выбранного вами прокси-сервера), а значение filterport – с записанным в настройках вашего браузера полем порта прокси-сервера. (Это если вы не прибегнули к трюкам по фильтрации пакетов, о которых рассказывается дальше.)

В случае, если DG и прокси-сервер работают на разных компьютерах, вам нужно также определить IP-адрес прокси-сервера в параметре proxyip в DansGuardian.conf.

При таком способе настройки ваши пользователи могут за пару секунд свести на нет любую фильтрацию, просто приказав своему браузеру игнорировать прокси (с помощью радио-кнопки “Direct connection to the Internet” – Прямое соединение с Интернет в Firefox) или настроив его непосредственно на порт Squid.

Есть несколько решений этой проблемы – все они основаны на принудительном направлении всех пакетов, идущих к вашим браузерам или от них через DG и прокси-сервер в должном порядке, независимо от настроек (расстроек) самих браузеров. Поскольку этот прием не относится непосредственно к DG или в целом к фильтрации web-трафика, я просто сошлюсь на сайт, где разъяснено, как этим воспользоваться для DG и Squid: http://tinyurl.com/elf3t.

Убедившись, что вы правильно стыковали все кусочки мозаики, найдите в файле конфигурации раздел Web Access Denied Reporting: настало время решить, какое сообщение ваши пользователи (или вы сами, пока будете тестировать фильтр) должны увидеть, попав на недопустимую web-страницу.

Выбрать можно один из четырех режимов, от 0 (невидимый) до 3. Невидимый режим подловат: все сомнительные посещаемые страницы фиксируются в журнале, но не блокируются – то есть пользователи не подозревают, что их прогулки по Сети – «под колпаком». Я рекомендую режим 3, когда браузер отображает заранее заготовленный шаблон сообщения вместо заблокированной страницы, что можно даже использовать для невинных шуток, как будет показано позже.

HTML-шаблон, используемый в этом случае – это файл с именем template.html, расположенный в каталоге и подкаталоге, определяемых следующими двумя переменными:

languagedir = ‘/usr/local/share/DansGuardian/languages’
language = ‘ukenglish’

Проглядите этот файл и подправьте формулировку по своему вкусу: она может быть любой, от лаконичного «НЕТ» до развернутого «Не будь скверным мальчишкой» или «Извините, попытайтесь еще раз». Однако я советую начать с нижних строк: здесь есть список всех переменных DG, которые вы можете использовать в теле шаблона, чтобы вывести дополнительную информацию. Если включенных комментариев недостаточно, или их слишком скучно читать, просто добавьте все переменные и посмотрите, что будет, когда вы зайдете на запрещенный сайт. Моя любимая переменная для тестирования DG – это -REASONLOGG ED-, потому что она точно показывает прямо в браузере, какие именно фильтры заблокировали провинившуюся страницу.

Действия DG фиксируются в файле, определяемом переменной loglocation. Поддерживаются журнальные файлы в формате CSV (через запятую) или с символом табуляции в качестве разделителя, чтобы их было проще импортировать в электронные таблицы или базы данных и потом вечно стыдить пользователей: просто установите соответствующее значение logfileformat. Чтобы сделать журналы анонимными, то есть не включать в них имена пользователей и IP-адреса, раскомментируйте строку

anonymizelogs = on

Установив эту опцию, прервитесь и насладитесь благодарными аплодисментами ваших пользователей.

Осадить умных серферов

Готовы? Теперь начинается сложнейшая, мощнейшая и потенциально самая забавная часть настроек DG. Вещи, которые нужно блокировать – нежелательные адреса, нецензурные фразы и так далее, просто перечислены, строка за строкой, в группе текстовых файлов. Однако прежде чем посмотреть, как это работает, коротко вспомним простейшие и хорошо известные способы обмануть плохо настроенный проксисервер (не считая возможности отключить прокси в браузере, мы о ней уже позаботились).

Прежде всего, это подмена IP-адреса. Да, DG умеет выполнять фильтрацию по URL: просто добавьте http://www.linuxsucks.com в соответствующий список, и никто не сможет прочитать эту ересь – до тех пор, пока не введет в браузере непосредственно IP-адрес вместо доменного имени. Чтобы навеки прикрыть данную брешь, установите reverseaddresslookups в значение On: DG будет проверять, какое доменное имя связано с IP-адресом, а дальше работать уже по имени. Однако это влияет на производительность, так что не все тут просто. В комментариях в DansGuardian.conf предлагаются альтернативные способы разобраться с этой проблемой.

(thumbnail)
Рис. 1 Целых десять результатов? [в строке поиска набрано «Все мужчины – сволочи».] Это ж надо, сколько мусора болтается в Интернете, а?
(thumbnail)
Рис. 2 К счастью, DansGuardian помог защитить невинных и восстановить истину. [Текст страницы гласит: «Милочка! Мы обшарили все киберпространство, но не нашли даже малейшего доказательства сего странного тезиса.»]

Другой способ надругаться над любым браузером и посмеяться в лицо DG – это использование поисковых машин. Запросите некоторую скандальную тему или имя в Google, или, еще лучше, в Google Images, и вы сможете провести интересные полчаса – правда, перейти по ссылке на соответствующий сайт вряд ли удастся, но и на страницах результатов будет на что посмотреть, пока DG и системный администратор хлопают друг друга по спине, радуясь, как здорово вы защищены. Заметьте, что этот фокус часто работает (особенно с изображениями), даже если поисковая машина находится в «безопасном» режиме. Вопрос на засыпку: вы замечали, как много псевдонимов порно-звезд составлены из обычных, с виду безобидных слов?

И что, такими трюками можно надуть DG? Да ни в жизнь. Решение лучше показать на примере. Представьте себе Энди Каппа в конце трудного дня, потраченного на игру в дартс, бильярд и футбол: правда же, он заслужил поход в бар, чтобы попить пивка? Но Фло ни с того ни с сего начинает скулить про их годовщину и ужин, который она весь день готовила. С криком “Ты сволочь, и я это докажу!”, она садится за компьютер и вводит строку “Все мужчины – сволочи” в Google. Не будь в мире DG, бедняга Энди был бы разоблачен результатами, представленными на рисунке 1. На практике, если он линуксоид и прочел этот учебник, бедняжка Фло получит только ответ с рисунка 2; заметьте, что URL в обоих случаях один и тот же.

Что произошло? Если коротко, то DG умеет распознавать поисковые машины и обрабатывать их особым образом. Чтобы разобраться, как именно, нам нужно детально изучить текстовые файлы его черных списков. Это предварительно подготовленные списки, поставляемые с DG, чтоб вы не ломали голову, какое бы нецензурное слово, фразу, расширение или порно-сайт еще добавить, хотя вы, естественно, можете подогнать списки под тип контента, который вы хотите отфильтровывать, и под нужный уровень строгости. Если вы считаете, что на свете нет мерзей меха шиншиллы, усыпанного бриллиантами – заблокируйте с помощью DG любой намек на него.

В моем примере с Энди Каппом обратите внимание на рисунок 1, где изображена страница Google Safesearch. DG может усилить этот режим, налагая запрет на любой URL Google, содержащий подстроку “safe=off” в файле phraselists/pornography/banned:

<google>,<&safe=of>

Большую часть отсева сделает Google, а DG будет работать лишь с тем, что останется. Фрагмент, который будет блокировать точную фразу “Husbands are losers” в поиске Google в файле phraselists/googlesearch/banned:

<?q=%22husbands+are+losers%22>

Единственная хитрость в этом определении – надо задавать все URL в правильно зашифрованном виде. В нашем случае, пробелы были заменены на знаки “+”, а двойные кавычки – на %22 [Если бы нам надо было заблокировать фразу “Все мужчины – сволочи”, каждую русскую букву пришлось бы также подвергнуть URL-кодированию, – прим.ред.].

Подключаем ваши фильтры

Доказав концепцию, окинем взглядом общую картину. Пройдите в каталог $INSTALL_DIR/etc/DansGuardian/lists и введите

find . -type f | sort | more

чтобы получить более-менее упорядоченный список всех доступных черных списков. DG находит их по указателям в etc/DansGuardian/ DansGuardianf1.conf. Любой файл может подгружать другие с помощью директивы .include: поэтому на добавление, удаление и реорганизацию больших списков тратится минимум усилий.

Многие файлы в $INSTALL_DIR/etc/DansGuardian/lists используются для настройки фильтрации, основанной на URL, IP или доменных именах. Например, Bannerdsitelist блокирует целые домены; bannedurllist – только некоторые их части. Urlregexplist, напротив, разъясняет DG, как прозрачно подменять одни URL другими, (теоретически) более безопасными. Кроме переключения некоторых поисковых машин в безопасный (опять-таки теоретически, см. выше) режим, его также можно использовать для таких вещей, как автоматическое перенаправление запроса о сомнительной книге с Amazon на форму, которая отошлет запрос на Library Manager, чтобы оценить ту же книгу для покупки.

Особое внимание уделите всем файлам, имена которых начинаются с “exception”. В них перечислено все – от расширений файлов до IP-адресов – что должно быть исключено из фильтрации. Exceptionsitelist и exceptionsurllist, например, содержат все безгрешные сайты или подразделы сайтов соответственно: в последнем случае вы можете разрешить http://www.somenewspaper.com/sport и http://www.somenewspaper.com/travel, отклонив другие разделы этого же портала.

Рейтинги PICS

Не заблуждайтесь насчет файла pics, поскольку он не связан с изображениями. В нем даются указания DG, как использовать платформу для выбора интернет-контента (Platform For Internet Content Selection, PICS). Это система, задуманная W3C, которая «...включает метки (метаданные), ассоциированные с интернет-контентом». Хотя эта концепция вроде бы противоположна тезису «я сам сужу, к чему разрешать доступ с моего компьютере», польза в ней есть. Зайдите на http://tinyurl.com/oscc6.

Каталог phraselist содержит – как нетрудно догадаться – все актуальные списки слов и фраз, которые не должны допускаться в содержимом web-страниц или, как в случае с Энди Каппом, в URL. Она делится по темам (азартные игры, порнография, насилие и так далее), языку и типу страницы (например, поиск в Google), чтобы упростить ее предоставление в общий доступ и сопровождение. Формат отностительно прост, и позволяет определять «вес», или уровень доступности, для каждого элемента. Вот как можно указать DansGuardian, что компьютеры Windows (по крайней мере) в 20 раз более нетерпимы, или имеют больший вес, чем компьютеры Apple:

<Macintosh><10>
<Windows><2000>

Скажем, администратор установил фильтры поисковых машин. Пользователи могли попытаться обойти их, выполняя поиск по иностранным словам (бывало, если вы знали название некоего интересного увлечения по крайней мере на двух языках, в конечном счете вы его находили). Но с DG администратор может просто загрузить списки запрещенных слов на разных языках. Подробно о списках DG можно прочесть на http://tinyurl.com/lstlf.

Еще одно слово, чтобы предостеречь вас от разочарования и недовольства пользователей: контентная фильтрация DG умеет работать очень хорошо, но вы должны быть терпеливы, пока не настроите фильтры правильно: не слишком мягко и не слишком жестко, и прежде всего – надо правильно скомбинировать со всеми другими функциями фильтрацию по URL или IP-адресам: в идеале, вам сперва нужно заблокировать все запрещенные URL, затем все запрещенные IP, и заниматься требовательной к ресурсам контентной фильтрацией только для того, что останется.

Я говорю об этом потому, что при всей их мощи, списки, поставляемые с DG, имеют одну потенциально большую проблему. Как они есть, они будут блокировать многие страницы, совершенно безопасные как для взрослых, так и для детей, почти в любом смысле. Например, мы не сможем прочитать статью о том, как дети обходят web-фильтры (http://news.com.com/Kids+outsmart+Web+filters/2009-1041_3-6062548.html). Почему, спросите вы? Только потому, что в ней говорится, что дети хотят просматривать «взрослые материалы» и Playboy.com (кто бы мог подумать?), а обе эти фразы относятся к запрещенным в DG – ирония судьбы! Можно предполагать, что так же будет со многими медицинскими сайтами, на которых очень часто попадается в любых комбинациях слово «sex», и так далее.

Нет, я не говорю, что DG слишком умный, чтобы быть полезным – просто вы должны позволить ему производить анализ слова только тогда, когда это действительно необходимо (например, для неизвестных страниц), а не тогда, когда просматриваются достойные уважения сайты: в примере выше, подразумевается добавление http://news.com.com в exceptionsiteslist.

Вдарить по web

Последний, но серьезный, потенциально неприятный факт о DG. Контенториентированная web-фильтрация намного сильнее нагружает ресурсы системы, чем контроль за URL и IP-адресами. Убедитесь, что используете ее только после других методов, которым подвергается страница: списки исключений здесь – ваши друзья. Чтобы снизить нагрузку на процессор, можете отключить (off) параметр weightedphrasemode в файле конфигурации, но только предварительно протестировав отличия. В любом случае, для вашей же пользы проведите, пожалуйста, несколько тестов производительности, прежде чем дать DG разгуляться на вашем семейном компьютере. Или прежде чем триумфально объявить: «Эй, благодаря Linux мы можем воскресить этот старый ПК с жалкими 64 МБ ОЗУ для работы в качестве семейного прокси-сервера».

Нагрузку со стороны DG на ваше оборудование можно также подрегулировать с помощью множества конфигурационных переменных, которые ограничивают число дочерних процессов, размер кэша, и т.п. Просмотрите все переменные с именами, начинающимися на “max” и “min” в DansGuardian.conf.

Вы довольны тем, как DansGuardian оберегает ваши домашние прогулки по Сети? Подумываете посоветовать его вашему боссу или установить для ваших клиентов? Отлично, но сперва справьтесь с бюджетом: программа распространяется по лицензии GPL только для некоммерческого использования. Коммерческие версии стоят в районе ста долларов для сети до 99 компьютеров и Unix-сервера. Убедитесь, что проверили условия лицензии на http://DansGuardian.org/&page=copyright2


ЛОВУШКИ WEB-ФИЛЬТРАЦИ

Несмотря на замечательные свойства DG, я не могу уберечь вас от некоторых ловушек, которым подвержена любая система web-фильтрации на любой платформе. С помощью DG легко блокировать предосудительные изображения. Использовать ту же технологию для блокировки баннерной рекламы так же легко, однако это стрельба в собственную ногу. Нравится это вам или нет, но многие интересные бесплатные сайты существуют только благодаря тому, что их авторы (это вовсе не обязательно алчные корпорации) получают за рекламу достаточно денег для оплаты хостинга и времени, которое они тратят, сидя за клавиатурой. Фильтрация всех баннеров без разбора – прекрасный способ угробить абонентскую плату исключительно на бессвязную белиберду, по которой плачет проверка орфографии. Но еще более важен факт, что никакой компьютер не заменяет заботливых родителей, и обеспечить полную защиту от людских гадостей невозможно в принципе. Как бы вы ни фильтровали, ничто не воспрепятствует поганцам сделать порно-снимок, назвать его «Сьюзи встречается с мальчиками» и сослаться на него с фразы «Первый день Сьюзи в офисе». Цена свободы – постоянная бдительность.

РЕСУРСЫ

Руководство для новичков по установке SUSE 9 и DansGuardian (http://tinyurl.com/pdrmr) не слишком новое, но, безусловно, все еще полезное. Кроме того, http://dansguardian.org/?page=documentation содержит целый раздел в HOWTO по фильтрации контента, фокусирующийся, как вы уже догадались, на фильтрации всего Интернета с помощью DG и любых комбинаций других инструментов. Список рассылки DG находится на http://groups.yahoo.com/group/dansguardian. Наконец, страница http://dansguardian.org/?page=extras перечисляет изображения, ссылки и другие материалы, которые вы можете использовать, работая с DansGuardian.

Персональные инструменты
купить
подписаться
Яндекс.Метрика