Что такое SquidGuard?
SquidGuard -- внешняя программа переадресации ("редиректор"), с помощью которой squid осуществляет фактическую пересылку пришедших к нему запросов. Задача SquidGuard'а -- лучшее управление процессом фильтрации, чем это делает сам Squid.
Хочу сразу заметить, что использовать SquidGuard при построении простых фильтров не имеет смысла.
Установка
SquidGuard можно найти на http://www.squidguard.org/download (забавно, правда?). Этот сайт содержит много информации о том, как его настраивать.
Как и Squid, SquidGuard можно скачать в двух форматах -- rpm и .tar.gz.
Если ваш дистрибутив поддерживает пакеты RPM, установить его можно так:
su - -c "rpm -i ./SquidGuard-1.2.1.noarch.rpm"
Если же формат RPM не поддерживается, то можно скачать и откомпилировать исходники, вот так:
tar xzvf ./SquidGuard-1.2.1.tgz ./configure make && make install
Файлы будут установлены в "/usr/local/squidGuard/"
Настройка
Прежде чем мы начнём править конфигурационный файл "/etc/squidGuard.conf", требуется внести небольшие изменения в конфигурационный файл нашего старого друга "/etc/squid.conf". Найдите в нём такое место:
#redirect_program none
Раскомментируйте строку и замените слово "none" на путь к главному файлу SquidGuard. Если не знаете, где он -- воспользуйтесь командой:
whereis squidGuard
после чего впишите нужные путь и имя файла. Выглядеть это будет примерно так:
redirect_program /usr/local/bin/squidGuard
Сохраните файл и перезагрузите squid:
squid -k reconfigure
Это заставит его заново перечитать конфигурационный файл.
Хорошо. Теперь начинается самое интересное. Указав squid'у, что мы будем фильтровать приходящие к нему запросы с помощью внешней программы переадресации, мы должны определить соответствующие правила:
Основной конфигурационный файл SquidGuard -- это "/etc/squidGuard.conf". Выглядит он примерно так:
-------------------
( текстовая версия на http://gazette.linux.ru.net/lg78/articles/misc/adam/squidGuard.conf.txt)
logdir /var/squidGuard/logs dbhome /var/squidGuard/db src grownups { ip 10.0.0.0/24 # диапазон 10.0.0.0 - 10.0.0.255 # И user foo bar # идентификаторы foo и bar } src kids { ip 10.0.0.0/22 # диапазон 10.0.0.0 - 10.0.3.255 } dest blacklist { domainlist blacklist/domains urllist blacklist/urls } acl { grownups { pass all } kids { pass !blacklist all } default { pass none redirect http://localhost/cgi/blocked?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u } }
-------------------
Теперь разберём каждую секцию отдельно:
logdir /var/squidGuard/logs dbhome /var/squidGuard/db
Первая строка указывает каталог, где будет размещаться файл журнала, и создаёт его, если он не существует.
Вторая строка описывает каталог баз(ы) данных, в которых будут храниться имена запрещённых сайтов, регулярные выражения для фильтров и прочее.
src grownups { ip 10.0.0.0/24 # диапазон 10.0.0.0 - 10.0.0.255 # И user foo bar # ident foo or bar }
Этот блок настраивает сразу несколько параметров. Во-первых, src "grownups" определяет диапазон IP-адресов и пользователей, являющихся "членами" этого блока. Обычные "неопределенно-личные" идентификаторы "foo" и "bar" используются здесь в качестве примера.
Следует заметить, что метка [TAG] user может использоваться, если идентифицирующий сервер [6] запущен на том же сервере, который перенаправляет запросы proxy-серверу, иначе оно будет недействительным.
src kids { ip 10.0.0.0/22 # диапазон 10.0.0.0 - 10.0.3.255 }
Этот раздел настраивает другой блок, называемый "kids". Он описывает только диапазон IP-адресов, без указания имён пользователей.
Вы можете думать о grownups и kids, как о таких же именах ACL, определенных в "/etc/squid.conf".
dest blacklist { domainlist blacklist/domains urllist blacklist/urls expression blacklist/expressions }
Этот раздел кода важен, т.к. описывает список (dest), используемый конкретными фильтрами. В своей работе SquidGuard использует три основных способа фильтрации:
1. domainlist -- список доменов, каждый в отдельной строке, например:
nasa.gov.org squid-cache.org cam.ac.uk
2. urllist -- список web-страниц с пропущенным префиксом "www.", например:
linuxgazette.com/current cam.ac.uk/~users
3. expression -- слова (регулярные выражения) встречающиеся в URL:
sex busty porn
Последний блок кода:
acl { grownups { pass all } kids { pass !blacklist all } default { pass none redirect http://localhost/cgi/blocked?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u } }
Здесь, в разделе "grownups" acl-блока описывается разрешение на полный доступ к Интернет пользователям, входящим в группу "src grownups", вне зависимости от URL, наличия в их составе регулярных выражений и прочих ограничений, определённых в dest blacklist.
Раздел "kids" разрешает пользователям, входящим в группу "src kids" получать результат любого запроса, за исключением подпадающих под правила из dest blacklists. В случае, если URL совпадает с одним из определений dest blacklists, запрос перенаправляется по адресу, определённому в секции default.
В секцию default запрос перенаправляется в том случае, если его источник не принадлежит ни "grownups", ни "kids". При этом клиент попадает на web-страницу, , которая выглядит как страница с сообщением об ошибке.
Переменные, приходящие вместе с командой переадресации, указывают тип запроса и другую информацию, которая может использоваться cgi-скриптом, например для создания специального сообщения об ошибке.
Следует отметить, что для того, чтобы фильтрация работала, как минимум должен присутствовать следующий участок кода:
default { pass none }
С командой переадресации или без неё.
Существует множество "навороченных" опций конфигурации, которые могут быть применены в этом файле. Примеры вы можете найти на http://www.squidguard.org/configuration.
На этом введение в "основы" Squid и SquidGuard заканчивается. Дополнительную информацию можно найти по ссылкам, которые встречались в этой статье или на моём сайте: www.squidproxyapps.org.uk
"А напоследок я скажу..."
Ну что ж, пора и этому месяцу закончиться -- я не ожидал, что он будет таким длинным!! Мой академический год более-менее приближается к концу и в последних числах мая меня ждут экзамены. После них я буду свободен целое лето, достаточно, чтобы привести в порядок все мои идеи относительно Linux'а, поселившиеся у меня в мозгу ( -- после того, как Ben Okopnik промыл его) :-)
До следующего месяца. Удачи и берегите себя.
Любые комментарии и предложения можно отослать мне, не поленившись и щелкнув по ссылке:
Thomas Adam
Меня зовут Thomas Adam. Мне 18, и в настоящее время я готовлюсь к A-Levels (= вступительные экзамены в университет). Живу на маленькой ферме в округе Дорсет в Англии. Я большой энтузиаст Linux, и помогаю в школе со всеми делами, связанными с его повседневным использованием. Linux использую уже около шести лет. Когда я не работаю с Linux, то играю на пианино, люблю пешие прогулки и кататься на мотоцикле.[10]
Примечания переводчика
[Если у вас возникнет вопрос: "А почему ссылки не по порядку?", отвечу: "Вам шашечки или чтобы ехать?" ;-)][6] Не могу сказать с уверенностью на все "сто", но, по моему, речь идёт о DNS-сервере.
[7] Вообще-то я не уверен в том, есть ли в Объединенном Королевстве хозяйственное мыло. 8-)
[8] Цитата из "Инсталляция Linux и первые шаги", автор М. Уэлш: "Ключевое свойство большинства оболочек Unix -- это способность ссылаться сразу более, чем на один файл, используя специальные символы ... так называемые "дикие карты" (wildcards)..."
[9] Только не спутайте очерёдность ключей.
[10] Автор немного забыл обновить свои автобиографические данные. Судя по всему, теперь он "обычный" студент "обычного" университета. И не исключено, что времени для игры на пианино у него сейчас меньше обычного. В любом случае спасибо ему за то, что нашёл время возобновить работу колонки LWM. 8-)
[13] В скрипт пришлось внести небольшие изменения -- вряд ли вам нужно, чтобы он отсылал пять одинаковых сообщений о том, что не найден конфигурационный файл "/etc/keyfiles.conf".