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
Да, да. Я знаю, вы все думаете: "Что! Опять! Только не это! Ещё один скрипт для создания резервных копий!". Я пару раз слышал разговоры на эту тему в почтовой рассылке и подумал, почему бы и мне не поучаствовать в них....
Этот скрипт прост как "кусок хозяйственного мыла" [7] -- он использует конфигурационный файл (plain text), который содержит список файлов и директорий, с которых вы хотите сделать копии и упаковать в "за-gz-ипованный тарбол" в определённом месте.
Те из вас, кто хорошо знаком с созданием скриптов на BASH'е найдут это немного забавным, но я надеюсь, что мои комментарии помогут тем, кто только пытается изучить программирование на BASH'е.
-------------------
(Текстовая версия файла http://gazette.linux.ru.net/lg78/articles/misc/adam/keyfiles.sh.txt )[13]
#!/bin/bash ################################################# #Keyfiles - tar/gzip configuration files # #Version: Версия 1.0 (черновик) # #Ackn: основан на идее Dave Turnbull # #Authour: Thomas Adam # #Date: Понедельник 28 мая 2001, 16:05 BST # #Website: www.squidproxyapps.org.uk # #Contact: [email protected] # ########################################Комментарии #Комментарии для Dave Turnbull. Чтобы он не заблудился :-). #объявление переменных configfile="/etc/keyfiles.conf" tmpdir="/tmp" wrkdir="/var/log/keyfiles" tarfile=keyfiles-$(date +%d%m%Y).tgz method=$1 #опции выбора операции submethod=$2 #дополнительные опции для "$1" quiet=0 #вывод отладочной информации (по умолчанию) cmd=basename $0 #удаляем путь из имени файла optfiles="Usage: $cmd [--default (--quiet)] [--listconffiles] [--restore (--quiet)] [--editconf] [--delold] [--version]" version="keyfiles: Автор Thomas Adam, Версия 1.0 (Вторник 5 июня 2001, 23:42)" #проверка конфигурационного файла... if [ ! -e $configfile ]; then for beepthatbell in 1 2 3 4 5; do echo -en "\x07" done echo " " | mail -s "[Keyfiles]: отсутствует файл $configfile" $USER echo " [Ошибка!]: отсутствует файл $configfile" $USER exit -1 fi #проверяем существование рабочей директории, если её нет, то создаём [ ! -d $wrkdir ] && mkdir $wrkdir #проверка того, запущен ли скрипт без опций if [ -z $method ]; then echo $optfiles exit 0 fi #синтаксический разбор командной строки check_syntax () { case $method in --default) cmd_default ;; --listconffiles) cmd_listconffiles ;; --restore) shift 1 cmd_restore ;; --editconf) exec $EDITOR $configfile exit 0 ;; --delold) cd $wrkdir && rm -f ./*.old > /dev/null exit 0 ;; --version) echo $version exit 0 ;; --*|-*|*) echo $optfiles exit 0 ;; esac } #Вот теперь и начинается самое интересное..... #объявление функции используемой опцией "--default" cmd_default () { #пакуем все файлы, указанные в $configfile if [ $submethod ]; then tar -cZPpsf $tmp/$tarfile $(cat $configfile) &>/dev/null 2>&1 else tar -vcZPpsf $tmp/$tarfile $(cat $configfile) fi #если содержимое каталогов пусто...... if test $(ls -1 $wrkdir | grep -c -) = "0"; then mv $tmp/$tarfile $wrkdir exit 0 fi for i in $(ls $wrkdir/*.tgz); do mv $i $i.old done mv $tmp/$tarfile $wrkdir } #вывести список, содержащийся в $configfile cmd_listconffiles () { sort -o $configfile $configfile cat $configfile exit 0 } #восстановить файлы...... cmd_restore () { cp $wrkdir/keyfiles*.tgz / cd / #проверка флага тишины :-) if [ $submethod ]; then tar vzxfmp keyfiles*.tgz &>/dev/null 2>&1 rm -f /keyfiles*.tgz exit 0 else tar vzxfmp keyfiles*.tgz rm -f /keyfiles*.tgz exit 0 fi } #вызов головной функции check_syntax
-------------------
Следует заметить, что основные изменения, которые вы можете делать в скрипте -- это изменять три переменные:
configfile="/etc/keyfiles.conf" tmpdir="/tmp" wrkdir="/var/log/keyfiles"
Тем не менее, мой скрипт достаточно "интеллектуален", чтобы проверить существование рабочей директории и в случае необходимости создать её.
Вы должны убедится, что установили для файла со скриптом соответствующие права доступа:
chmod 700 /usr/local/bin/keyfiles
Самый важный файл -- конфигурационный. В моём случае он выглядит так:
-------------------
( Текстовая версия файла http://gazette.linux.ru.net/lg78/articles/misc/adam/keyfiles.conf.txt )
/etc/keyfiles.conf /etc/rc.config /home/*/.AnotherLevel/* /home/*/.fvwm2rc.m4 /home/solent/ada/* /root/.AnotherLevel/* /root/.fvwm2rc.m4 /usr/bin/header.sed /usr/bin/loop4mail /var/spool/mail/*
-------------------
Основные функции в скрипте базируются на утилите tar, которая использует конфигурационный файл, точнее шаблоны имен файлов [wildcards][8] указанные в нём.
Обратите внимание, что каждый раз, когда скрипт выполняется, создаётся копия последнего архива, т.е. файл "keyfiles-DATE.tgz" (если он, конечно, существует) переименовывается в "keyfiles-DATE.tgz.old" прежде, чем будет создан новый.
Всё, что вам нужно для восстановления данных из архива, мой скрипт уже знает -- последний созданный архив имеет расширение ".tgz".
Благодаря этой особенности, я добавил в скрипт ещё одну опцию, которая удаляет из каталога $workdir все старые резервные копии -- "--delold".
Для того, чтобы создать резервную копию, введите:
keyfiles --default
Если вы не хотите, чтобы в процессе работы скрипт выдавал какую-либо информацию, воспользуйтесь вторым ключом -- "--quiet"[9]:
keyfiles --default --quiet
Думаю, названия остальных опций программы говорят сами за себя.
Предложенный вашему вниманию скрипт резервного копирования далёк от совершенства, существуют более удачные аналоги. Но, в любом случае, замечания и пожелания по поводу его работы приветствуются!!
Вернёмся назад, в те дни, когда когда прославленный основатель этого специализированного журнала John Fisk писал для этой колонки. Другой автор, Larry Ayers, имел обыкновение делать обзоры программ. Он кратко упомянул о программе Nedit. Но никогда рассматривал её более подробно.
В таком случае, это сделаю я :-)
Вот уже три года я использую Nedit. Всю работу я делаю в нём -- когда нахожусь в "иксах", как сейчас. Внешний вид Nedit вы можете увидеть на http://gazette.linux.ru.net/lg78/articles/misc/adam/nedit1.png .
Эта программа обладает огромными возможностями. Наиболее популярная из них -- синтаксическая подсветка для языков программирования. Вот их список:
Если случается так, что вы пишете на языке программирования, который не перечислен выше, то вы можете сами написать для него шаблоны в виде регулярных выражений.
Nedit также предоставляет развитый механизм поиска и замены, использующий всё те же шаблоны (регулярные выражения) как с учётом регистра, так и без него.
Типичный пример окна диалога поиска/замены выглядит так:
В нём имеется возможность формировать сложные запросы.
Каждый из пунктов меню (имеется ввиду меню 1-го уровня), может быть "оторван" и расположен в отдельном окне. Это может быть полезно, если какой-то из пунктов приходится вызывать очень часто.
Программа может быть загружена со множеством ключей, большинство из которых я использую, но мне ещё не удалось найти применение для всех опций, с которыми может быть запущен Nedit. Если вам этого мало, то учтите, что Nedit позволяет писать свои собственные макросы, так что вы можете сами создавать "супернавороченные" функции.
Рекомендую эту программу всем и каждому. В то же время, не желая изобретать новый велосипед в стиле Emacs/Vim, я всё-таки считаю Nedit реальной заменой и альтернативой "X11-Emacs", пожирающему слишком много оперативной памяти!! :-)
Вы можете скачать Nedit отсюда:
www.nedit.orgПопробуйте и наслаждайтесь им :-)
Ну что ж, пора и этому месяцу закончиться -- я не ожидал, что он будет таким длинным!! Мой академический год более-менее приближается к концу и в последних числах мая меня ждут экзамены. После них я буду свободен целое лето, достаточно, чтобы привести в порядок все мои идеи относительно Linux'а, поселившиеся у меня в мозгу ( -- после того, как Ben Okopnik промыл его) :-)
До следующего месяца. Удачи и берегите себя.
Любые комментарии и предложения можно отослать мне, не поленившись и щелкнув по ссылке:
Меня зовут 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".
Команда переводчиков:
Владимир Меренков, Александр Михайлов, Иван
Песин, Сергей Скороходов, Александр Саввин, Роман Шумихин, Александр Куприн,
Андрей Киселев
Со всеми предложениями, идеями и комментариями обращайтесь к Сергею Скороходову ([email protected]). Убедительная просьба: указывайте сразу, не возражаете ли Вы против публикации Ваших отзывов в рассылке.
Сайт рассылки: http://gazette.linux.ru.net
Эту статью
можно взять здесь: http://gazette.linux.ru.net/lg78/articles/rus-adam.html