Перевод (C): Александр Куприн


Часть вторая

Краткое введение: SquidGuard


Что такое 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 промыл его) :-)

До следующего месяца. Удачи и берегите себя.


Любые комментарии и предложения можно отослать мне, не поленившись и щелкнув по ссылке:

[email protected]


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".


Copyright (C) 2002, Thomas Adam.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 78 of Linux Gazette, May 2002

Команда переводчиков:
Владимир Меренков, Александр Михайлов, Иван Песин, Сергей Скороходов, Александр Саввин, Роман Шумихин, Александр Куприн, Андрей Киселев

Со всеми предложениями, идеями и комментариями обращайтесь к Сергею Скороходову ([email protected]). Убедительная просьба: указывайте сразу, не возражаете ли Вы против публикации Ваших отзывов в рассылке.

Сайт рассылки: http://gazette.linux.ru.net
Эту статью можно взять здесь: http://gazette.linux.ru.net/lg78/articles/rus-adam.html