понедельник, 28 января 2008 г.

Использование регулярных выражений в squidGuard

Перевод с англ., оригинал - http://www.squidguard.org/Doc/expressionlist.html

Вам никогда не удастся добавить все возможные плохие страницы в ваш файл domains или urls. Чтобы добиться дополнительного блокирования, могут быть использованы списки регулярных выражений. В списке регулярных выражений вы вводите слова, которые наиболее вероятно являются частью нежелательных доменов и URL. Каждый домен и URL будет сравниваться с строками, найденными в сконфигурированных списках регулярных выражений.
Внимание: Используя списки регулярных выражений, убедитесь, что вы не блокируете нормальные сайты. В дополнение к этому, имейте в виду, что использование этих списков может в результате значительно снизить производительность.

1. Добавление списков регулярных выражений в конфигурацию.

Списки регулярных выражений включаются в тэг dest. Пример ниже показывает соответствующую часть конфигурационного файла squidGuard.conf:
dest porn {
domainlist porn/domains
urllist porn/urls
expressionlist porn/expressions
}

Вы можете добавить список регулярных выражений для каждого определенного места назначения (destination), если вы находите это необходимым (напоминаем о производительности!). SquidGuard ожидает файл регулярных выражений, связанный с определенным параметром dbhome так же, как файлы доменов или URL.

2. Синтаксис списков регулярных выражений.

Формат файла списка регулярных выражений строится на основании регулярных выражений, описанных в man-странице regex(5). Наиболее интересны следующие:

.  - Совпадает с каким-либо одиночным символом (используйте "\." для соответствия "."

[abc] - Совпадает с одним из символов ("[abc]" совпадает с одиночным символом "a" или "b" или "с")

[c-g] - Совпадает с одним из символов в диапазоне ("[c-g]" совпадает с одиночным символом "c" или "d" или "e" или "f" или "g"
"[a-z0-9]" совпадает с любой одиночной буквой или цифрой.
"[-/.:?]" совпадает с любым одиночным "-" или "/" или "." или ":" или "?").

? - Ни одного или один из предшествующего символов ("words?" совпадет с "word" или "words".

"[abc]?" совпадает с одиночным "a" или "b" или "c" или ничего (т.е. "").

* - Ни одного или более из предшествующего ("words*" совпадет с "word","words" и "wordsssssss".

".*" совпадет со всем, что угодно, включая пустую строку).

+ - Один или более символов из предыдущих ("xxx+" совпадет с последовательностью из трех и более символов "x").

(expr1|expr2) - Одно из выражений, которые, в свою очередь, может содержать в себе похожие конструкции ("(foo|bar)" совпадет с "foo" или "bar".
"(foo|bar)? совпадет с "foo" или "bar" или ни с чем (т.е. "").

$ - Конец строки ("(foo|bar)$" совпадет с "foo" или "bar", находящимися только в конце строки).

\x - Игнорировать специальное значение x, когда x - один из специальных символов регулярных выражений ".?*+()^$[]{}\" ("\." совпадет с одиночным ".", "\\" - с одиночным "\" и т.д.)

Строки списков регулярных выражений являются обычным текстом. Таким образом, начало блокирования возможных материалов сексуального содержания регулярным выражением, которое может выглядеть так:
(^|[-\?+=/_])(bondage|boobs?|busty?|hardcore|porno?|sex|xxx+)([-\?+=/_]|$)

Когда все установлено по вашему вкусу, примените изменения следующей командой:
squid -k reconfigure

3. Некоторые замечания и советы.

Если вы не будете строить ваши регулярные выражения очень-очень осторожно, есть большой риск , что вы получите раздраженных пользователей на вашу шею. Типичный пример: вы могли бы нечаянно блокировать "Essex", "Sussex", "breastcancer", "www.x.org" и т.д. в пылу блокирования порнографических материалов. На практике вы могли бы, вероятно, заменить некоторые из слов в примере выше некоторыми более ясными словами, связанными с порнографией, которые я не считаю уместным размещать в список, указанный выше.
Тогда как размер домена и списков URL оказывают незначительное воздействие на производительность, слишком много больших или сложных регулярных выражений будут быстро ухудшать производительность squidGuard. Хотя она может сильно зависеть от производительности соответствующей библиотеки, с которой скомпонован SquidGuard .
Существует набор тестовых файлов для группы возможных порнографических сайтов в samples/dest/adult в исходном каталоге, который вы можете использовать как стартовую точку, если блокировка порнографии - одна из ваших задач. Заметьте, пожалуйста: этот список очень старый и не предназначается для промышленных систем. Используйте их, чтобы протестировать ваш squidGuard. Для начальной установки список будет работать, но мы рекомендуем, чтобы вы просмотрели эти списки до их использования. Эти домены и URL собираются "автомагически" роботом. Не существует руководства к действию для оценки соответствующего контента. Следовательно, есть вероятность, что некоторые непорнографические сайты "просочатся" через фильтр.
Чтобы избежать публикации "полного руководства" запрещенных сайтов вашим пользователям, вы вероятно захотите защитить некоторые из следующих файлов, например:
chmod 640 /wherever/filter/db/dest/adult/*
chown cache_effective_user /wherever/filter/db/dest/adult/*
chgrp cache_effective_group /wherever/filter/db/dest/adult/*

где cache_effective_user и cache_effective_group - значения соответствующих тэгов, определенных в конфигурационном файле squid, squid.conf.