DansGuardian - фильтрация web-запросов под Linux

Вы, наверное, уже не раз читали на нашем сайте статьи, посвященные так называемой контентной безопасности (content security). Речь шла и о фильтрации web-запросов, и об анализе содержимого web-страниц, и о фильтрации потоков e-mail. Однако почти всегда мы останавливались на продуктах и технологиях, реализованных в основном под Windows.

В данной статье мы решили обратиться к теме контентной безопасности, но уже под Linux. В качестве обсуждаемого продукта был выбран DansGuardian. Это очень известное решение с открытым исходным кодом и бесплатное для домашних пользователей, школ, библиотек, университетов и т.д. О DansGuardian нам расскажет его создатель - Дэниэль Бэррон (Daniel Barron).

Алексей Доля: Расскажите немного о себе, пожалуйста.

Дэниэль Бэррон: Мне 28 лет, я вырос в Кингстоне-на-Халле (Kingston Upon Hull), в Великобритании. Окончил университет в Манчестере. Увлекаюсь садоводством, электроникой, люблю готовить и пешие прогулки, обожаю японскую анимацию и, конечно, компьютеры. Я очень горжусь своим садом, который уже почти превратил в японский. Подумываю над тем, чтобы выучить японский язык.


Фотография, которую вы видите выше, была снята рядом с Хамберским Мостом (Humber Bridge). Этот мост и до наших дней остается самым длинным монолитным мостом в мире. За время, прошедшее с момента снятия фотографии, я отрастил длинные волосы и стал толще!
Сейчас я работаю техническим директором в SmoothWall Ltd. Программированием занимаюсь уже более 19 лет, в IT-отрасли работаю более 9 лет. После окончания университета я получил диплом по вычислительной химии (Computer Aided Chemistry) и пошел работать администратором Novell в многонациональную инженерную компанию. Там мне в основном пришлось обслуживать MoD-сервера. Через некоторое время я возглавил отдел, занимающийся сетями, исследованиями и разработкой. Фактически я прокладывал курс, по которому двигалась компания. Я могу смело утверждать, что в разработке каждого продукта и каждого решения, которые выпускала компания, я участвовал лично.
Используя свой компьютер на базе British RISC OS, я управлял разработкой нескольких проектов (включая всю мою работу в SmoothWall). Одним из самых заметных проектов является DansGuardian.


Алексей Доля: Что натолкнуло вас на идею создания такого продукта?

Дэниэль Бэррон: Когда я работал в Beebug Computers в Великобритании, меня попросили найти какой-нибудь web-фильтр, с открытым исходным кодом и бесплатный. На тот момент был единственный качественный коммерческий web-фильтр - IGear. Но он был просто сверхдорогим. Остальные фильтры типа squidGuard и NetNanny осуществляли только URL-фильтрацию, чего явно недостаточно. Мне удалось отыскать лишь одно приложение с открытым исходным кодом, которое вроде бы делало то, что мне надо. Это был Active Guardian. Довольно быстро выяснилось, что Active Guardian имеет очень много багов, работает очень медленно, а на современных браузерах отказывается работать вообще. Так что я решил научиться программировать под UNIX (в моем случае - Linux), а также выучить С++ и писать программы самому. В октябре 2000 года я начал читать книги по разработке Linux-приложений на С++, а к январю 2001 года почувствовал себя достаточно сильным, чтобы написать первую версию своей программы. С тех пор я внес очень много улучшений в свою программу, расширил её возможности и повысил эффективность.


Алексей Доля: Вы назвали продукт в свою честь? :)

Дэниэль Бэррон: Что-то типа того. В тот момент у меня был замечательный скрипт под названием DansLinux.sh - он превращал мой обычный Red Hat 5.2 в брандмауэр, proxy, почтовый сервер с кэшированием DNS и т.д. Это была моя версия Linux. Рабочее название для web-фильтра было просто шуткой - это была моя версия Active Guardian - DansGuardian. Но имя прижилось, остальное - история.


Алексей Доля: Расскажите подробнее о DansGuardian в плане его возможностей?

Дэниэль Бэррон: DansGuardian - это "движок" для фильтрации web-контента. Я написал и отладил его сам. Продукт используется во многих компаниях по всему миру и имеет довольно широкую базу пользователей. Его основная задача - фильтрация web-страниц на основании анализа их содержимого (картинок, URL, типов файлов и т.д.). Программа справляется со своей задачей очень хорошо, возможно, даже лучше всех.


Алексей Доля: Какие технологии и алгоритмы применяются в DansGuardian?

Дэниэль Бэррон: Обычные web-фильтры типа Cyber Patrol, squidGuard, Net Nanny и т.д. используют очень длинный список плохих web-сайтов. Если вы попытаетесь открыть один из этих сайтов, то фильтр его заблокирует. Таким образом, доступ к ресурсам сети фильтруется по web-адресам.
Интернет - очень быстро меняющаяся среда. Даже такие гиганты web-поиска как Google, Altavista или Yahoo часто не знают даже половины всех существующих ресурсов. Все это приводит к крайне низкой эффективности фильтрации по web-адресам: сайты часто меняют свое содержание или местоположение, да и новые страницы растут, как грибы после дождя. То есть, URL-фильтрация недостаточна. Необходимо проверять каждую запрашиваемую страницу на предмет наличия в ней опасного содержимого, например, богохульства, информации о неприкрытой агрессии, порнографии и т.д. Доступ к подобным ресурсам должен быть заблокирован. Это и называется контентной фильтрацией.
В то время как другие фильтры, использующие базу данных URL, быстро выходят из строя, DansGuardian применяет механизмы динамической фильтрации, быстро адаптируясь к новым web-страницам.
DansGuardian использует следующие алгоритмы: DFA (Детерминированный конечный автомат), бинарный поиск и быстрый поиск. Все они реализованы мною на С++, то есть я отказался от использования довольно медленных библиотек. В результате DansGuardian получился действительно очень быстрым. Как говорят его пользователи, DansGuardian в несколько раз быстрее IGear, а это, между прочим, один из ближайших конкурентов.



Доступ запрещен!

Алексей Доля: Вы не могли бы подробнее остановиться на алгоритмах? Хотелось бы понять, как именно продукт анализирует страницы.

Дэниэль Бэррон: Упс, я, кажется, упустил еще и быструю сортировку. Что касается алгоритмов, то подробнее о работе DansGuardian можно почитать здесь: http://dansguardian.org/?page=dgflow. Я же дам лишь краткую справку.

Quick Search (подробнее). Алгоритм представляет собой линейный проход по тексту и его постоянное сравнивание с конкретной заданной строкой. Алгоритм очень быстрый, он не возвращается каждый раз к точке предыдущего сравнения, а строит специальную таблицу сравнений.

Binary Search (подробнее). Для работы алгоритма необходим список отсортированных объектов. Алгоритм "заглядывает" в середину и проверяет, есть ли там что-нибудь похожее на то, что он ищет. Если да, то алгоритм проверяет одну из оставшихся половин таким же образом. Предположим, вы осуществляете поиск по телефонной книге. В самом худшем случае вам потребуется Ln(O)+1 итераций (O - число записей в телефонной книге). То есть, если в книге будет 1 млн. записей, то вам потребуется 15 итераций.

Quick Sort (подробнее). Это применение стратегии "разделяй и властвуй", как и в предыдущем случае. Только этот алгоритм намного более сложен для понимания, чем обычный бинарный поиск.

DFA (Детерминированный конечный автомат, подробнее). Алгоритм работает следующим образом: строится матрица всех интересующих фраз, а потом текст "пропускается" через эту матрицу. Вы можете осуществлять одновременный поиск более чем 1500 фраз одновременно. С помощью быстрого поиска (Quick Search) вам пришлось бы проверять фразы по одной.

Мне всегда казалось, что таблицу сравнений из алгоритма быстрого поиска (Quick Search) можно как-то применить к алгоритму DFA. Это сделало бы его еще более эффективным. Недавно кто-то сказал мне, что эта идея уже реализована.


Алексей Доля: Есть ли какой-нибудь способ протестировать эффективность и надежность вашего продукта?

Дэниэль Бэррон: Конечно - посмотрите на него в деле! Просто попробуйте получить доступ к каким-нибудь "плохим" ресурсам и убедитесь, что продукт их блокирует. Сравните мой продукт с URL-фильтрами, например, squidGuard или N2H2. Если вы хотите использовать коммерческую версию DansGuardian, то попробуйте Corporate Guardian. Еще один способ убедиться в том, что продукт действительно стоящий - это поговорить с его пользователями.


Алексей Доля: Кого бы назвали самым сильными конкурентом DansGuardian? Может быть Squid?

Дэниэль Бэррон: Squid - это proxy, который DansGuardian использует чаще всего. Это ни в коем случае не конкурент. Proxy необходим для того, чтобы DansGuardian мог работать.
Лучшими альтернативами DansGuardian являются SmoothGuardian или Corporate Guardian. Это полностью коммерческие версии, выпускаемые SmoothWall Ltd. и использующие тот же "движок", что и DansGuardian. Они имеют преимущества: компания-продавец гарантирует выход патчей, поддержку, интерфейс пользователя для работы через сеть, программы для просмотра журнала и создания отчетов, легкую инсталляцию и т.д. Все это написал тоже я :).
DansGuardian нужно инсталлировать и компилировать самому, точно также надо руками редактировать конфигурационные файлы. DansGuardian подойдет сетевым администраторам Unix, а версии, выпускаемые SmootWall - тем администраторам, у которых нет времени на конфигурирование решения и которые хотят получить продукт работающий сразу после того, как его вытащили из коробки. Именно поэтому скриншоты DansGuardian не могут похвастаться красивым и стильным GUI.



Конфигурационный файл DansGuardian

DansGuardian является своего рода базой и платформой для тестирования. В то время как Smooth/Corporate Guardian - это все же стабильные версии. Обе версии стоят друг друга. Примерно так же как и SmoothWall Express (свободный GPL-брандмауэр) и SmoothWall Corporate Server (коммерческий брандмауэр).
Единственный фильтр, который, на мой взгляд, подошел достаточно близко к Guardian, это IGear. Но он стоит очень много денег и работает значительно медленнее. Все остальные фильтры довольно бесполезны, они способны фильтровать лишь web-адреса страниц.


Алексей Доля: Над чем вы сейчас работаете? Какие новые возможности DansGuardian стоит ждать в будущих версиях?

Дэниэль Бэррон: Сейчас я работаю над тем, чтобы DansGuardian поддерживал группы с различными правилами фильтрации. Таким образом, различные группы пользователей смогут иметь различные права доступа к ресурсам Интернета. Также я работаю над тем, чтобы ускорить перезагрузку решения (если она понадобится), а также над другими, более мелкими улучшениями. Если вы всегда хотите быть в курсе событий - посещайте наш web-сайт!


Алексей Доля: DansGuardian можно бесплатно скачать с вашего сайта. Как вы тогда зарабатываете деньги?

Дэниэль Бэррон: Немного не так. Огромное количество людей ошибочно полагают, что GPL-программы являются бесплатными. Это не тот случай. Я позволяю каждому отдельному пользователю скачать продукт и попробовать его. Но коммерческие пользователи должны платить за продукт. Я также позволяю скачивать продукт организациям, не предназначенным для извлечения прибыли, то есть школам, библиотекам и т.д. Собственно и домашним пользователям тоже. Я также прошу пользователей о денежных пожертвованиях. В целом, я не зарабатываю больших денег от платы за использование DansGuardian и так ни разу и не получил пожертвование. Удивительно, как много людей просто переписывают чью-то работу и получают бесплатную поддержку, без какой бы то ни было отдачи. Тем не менее, тех денег, что я зарабатываю, хватает, чтобы не бросить эту работу!
Вы правы в том, что я не останавливаю никого и не мешаю скачивать DansGuardian, но я надеюсь на человеческую честность.
Так как каждый должен платить налоги со своих доходов, я и Джейд (Jade) учредили компанию "DrGuardian". Джейд занимается ей в свободное время. Единственная задача компании - просто существовать. Таким образом, мы платим налоги правительству и ведем абсолютно легальную деятельность. Я бы мог просто задекларировать дополнительный доход, но, имея компанию, я могу покупать аппаратное обеспечение и не платить подоходный налог. Что касается всего остального, то Джейд также получает зарплату в компании (так как тратит на нее времени больше, чем я). Это также позволяет сэкономить немного на налогах. Все абсолютно легально! :) Это хороший опыт для Джейд, которая хочет получить работу бухгалтера.
Зарабатываю на жизнь я работой в SmoothWall Ltd, которая выпускает все коммерческие версии DansGuardian. Я также являюсь директором компании. У меня остается достаточно свободного времени, чтобы бесплатно помогать пользователям и писать новое ПО. Мне нравится быть ближе к обществу.



Типовая картинка, запрещающая доступ к сайту


Алексей Доля: Я слышал, вы женитесь в этом году, не так ли? Удачи вам!

Дэниэль Бэррон: Да, большое спасибо. Я встречаюсь с Джейд уже много лет, она ведет все мое бухгалтерское дело. Я хотел, чтобы все было официально, так что теплым летним вечером за ужином (который я приготовил) при свечах в саду я сделал ей предложение. Она согласилась. Свадьба назначена на май, мы уже забронировали места и разослали приглашения.


Алексей Доля: Спасибо за интервью! Успехов вашей семье и DansGuardian!