Разделы сайта
Главная страница
Новости
Полезное
Squid Traffic Counter
Информация
Документация
Downloads
Демо-версия
Screenshots
Статистика загрузок
Связь
Форум
Контакты
STC
website



SquidGuard - ДЛЯ ВСЕХ. Савченко Андрей


Эта статья - попытка разобраться с полезной на мой взгляд
программой SquidGuard редиректа и фильтрации запросов Squid.
SquidGuard предназначен для работы с proxy-сервером SQUID.

Возможности SquidGuard:
1) гибкая фильтрация запросов;
2) опознавание пользователей по IP-адресу или имени;
3) работа по расписанию;
4) обрезка (а точнее подмена) banners и т.д.

Я хочу рассмотреть только те элементы настройки SquidGuard, которые реально
работают у меня . Думаю, большинству администраторов этого
будет достаточно.
Я администрирую работу с Интернет приложениями в учебном
заведении. Общее количество машин - около 100.
SquidGuard позволяет бороться с вредными наклонностями студентов (порнография,
чаты, агрессия, наркотики и т.д.), а также экономить трафик (рекламные
банеры, mp3 и т.д.).
В то же время отдельным пользователям можно позволить посещать всё
или только список "хороших" сайтов.
Так, реклама прошла успешно, теперь к делу.


Любым способом устанавливаем пакет SquidGuard (например из портов).
Стандартно инсталляция проходит в папку /usr/local/SquidGuard.
Здесь создаются папки db, log и файлы squidGuard, squidGuard.conf
Качаем архив blacklists.tar.gz, распаковываем и полученные папки с файлами
выкладываем в папку db. Можно использоать адреса:
ftp://ftp.teledanmark.no/pub/www/proxy/squidGuard/contrib/blacklists.tar.gz
http://ftp.teledanmark.no/pub/www/proxy/squidGuard/contrib/blacklists.tar.gz

Вы получаете папки:
ads - реклама (баннеры)
agressive - насилие
hacking - no comment
publicite - реклама
porn - no comment
warez - порно

В каждой папке могут быть файлы:
1. domains -список доменных имен : sex.com
adult.com
216.185.108.1
(обращение ко всему домену)

2. expressions-список ожидаемых фрагментов слов в url : (sex|adult|lolita)
(проверка на наличие указанных фраз в пути)

3. urls - no coment : host.com/anus
12.10.220.125/alisa
(обращение к части домена)

Редактируем squidGuard.conf/

Все примеры взяты из реального conf - файла.
Поэтому несколько слов об окружении.
Имею:
FreBSD-4.5
Squid/2.4.STABLE3
Apache/1.3.20 www.my.host
SquidGuard 1.1.4



logdir /var/SquidGuard # путь к лог директории
dbhome /usr/local/squidGuard/db # путь к базам

#готовим прикольную подмену для mp3 файлов

rewrite mp3 {
s@.*.mp3$@http://www.my.host/my.mp3@r
}
# по адресу http://www.my.host/my.mp3 выложим свой mp3 - прикол (например:
#"Так мычит обычная корова ..")

#готовим диапазоны времени (нерабочее время)

time leisure-time {
weekly * 00:00-08:00 17:00-24:00 # ночь и вечер
weekly fridays 16:00-17:00 # + пятница с 16:00 до 17:00 (если у вас короткий день)
weekly sat sun 00:00-24:00 # + выходные
date*.01.01 # + Новый Год
# и т. д.
}

#Создаем группы

src kids {
ip 192.168.0.200 #любит качать mp3 (но канал не резиновый)
}
src student {
ip 192.168.0.1-192.168.0.45 #любят все (но не все стоит показывать)
}
src vasya {
ip 192.168.0.62 #просто Вася (chat,chat и еще раз chat)
}
src vasya2 {
ip 192.168.1.20 # просто Вася II (и ел бы "inet" ,и спал бы
#c "inet", а работать, когда!?! )
}
src comandor {
ip 192.168.4.170 192.168.1.1 #начальство (добавить нечего)
}
src my {
ip 192.168.0.100 #a это моя машинка
}


#Наша цель:
#Для :
# kids - обрезать файлы mp3;
# student - обрезать все неприличное и ненужное;
# vasya - в рабочее время отключить chat;
# vasya2 - в рабочее время отключить все кроме списка
# "хороших" адресов;
# my - мне можно все!!!
# для всех - убрать рекламу.
#
# Подключение баз.

dest pornography {
domainlist porn/domains
expressionlist porn/expressions
urllist porn/urls
}
dest warez {
domainlist warez/domains
urllist warez/urls
}
dest agressive {
domainlist agressive/domains
urllist agressive/urls
}
dest good {
domainlist good/domains #список "хороших" адресов
#(составляется самостоятельно)

}
dest chat {
domainlist chat/domains #список "chat" адресов
#(составляется самостоятельно)
expressionlist chat/expressions #ожидаемые фразы
}
dest ads {
domainlist ads/domains
expressionlist ads/expressions
urllist ads/urls
redirect 302: http://www.my.host/Images/not_banner.gif
# адрес рисунка для подмены рекламных баннеров
}
dest drugs {
domainlist drugs/domains
urllist drugs/urls
}
dest hacking {
domainlist hacking/domains
urllist hacking/urls
}
acl {

kids {
pass !ads all #все кроме рекламы
rewrite mp3 #подмена mp3 файлов на наш файл (смотри выше)
}

student {
pass !warez !chat !pornography !agressive !drugs !hacking !ads all
#все, кроме ,warez ,chat ,pornography ,agressive ,drugs ,hacking ,ads
redirect http://www.my.host/cgi-bin/bl.cgi?clientaddr=%a&clientname=%n&clientident=%i& clientgroup=%s&targetgroup=%t&url=%u
}

vasya within leisure-time {
pass !ads all #все, кроме рекламы, в нерабочее время
} else {
pass !chat !ads all #отключение chat-ов в рабочее время
redirect http://www.my.host/cgi-bin/bl.cgi?clientaddr=%a&clientname=%n&clientident=%i& clientgroup=%s&targetgroup=%t&url=%u
}

vasya2 within leisure-time {
pass !ads all #все, кроме рекламы, в нерабочее время
} else {
pass good !ads all #ограничение разрешенных сайтов списком good в рабочее время
redirect http://www.my.host/cgi-bin/bl.cgi?clientaddr=%a&clientname=%n&clientident=%i& clientgroup=%s&targetgroup=%t&url=%u
}

my {
pass all
}

comandor {
pass !warez !chat !pornography !agressive !drugs !hacking !ads all
#покажем, что мы недаром кушаем хлеб
#pass all # все равно "попросят"
}

default { #для всех остальных
pass none
redirect http://www.my.host
log /var/SquidGuard/defoult.log #и запишем в лог
}
}





Файл bl.cgi поставляется как squidGuard.cgi.in . Он выводит на экран
симпатичный ответ в случае отказа на запрос.
Базы взяты из файла blacklists.tar.gz по адресу www.sguidguard.org
SguidGuard выполняет redirect только на host, а не на файловую систему.
Предположим, что файл squidGuard.conf у нас готов. У меня он лежит
по пути /usr/local/bin/squidGuard.conf.
Проверяем владельца и разрешения.
Для squidGuard и squidGuard.conf - владелец тот же, что и в squid.conf
прописан для cache_effective_user
Разрешения:
squidGuard 755
squidGuard.conf 644

Перед запуском squidGuard из под Squid-а , желательно протестировать
его работу.

Тестируем.

Создаем исполняемый файл test и пишем
/usr/local/ squidGuard /squidGuard /usr/local/squidGuard/squidGuard/out -d
Из файла in будет чтение запросов, в файл out будет выведен результат.
Ключ -d - для режима отладки.
Создаем файл in. Как видно ниже, у него некий стандартный формат:

http://www.adult.com/live.mp3 192.168.0.200/- - GET #1
http://www.adult.com 192.168.0.200/- - GET #2
http://www.aport.ru 192.168.0.200/- - GET #3
http://www.sex.ru 192.168.0.10/- - GET #4
http://www.chat.ru 192.168.0.1/- - GET #5
http://www.k_k_k.com 192.168.0.20/- - GET #6
http://www.aport.ru 192.168.0.15/- - GET #7
http://adv.aport.ru:8000/banners/GOLDEN.gif 192.168.0.22/- - GET #8
http://www.chat.ru 192.168.0.62/- - GET #9
http://www.aport.ru 192.168.0.62/- - GET #10
http://adv.aport.ru:8000/banners/GOLDEN.gif 192.168.0.62/- - GET #11
http://www.sex.ru 192.168.0.100/- - GET #12
http://www.sex.ru 192.168.0.100/- - GET #13
http://www.chat.ru 192.168.0.100/- - GET #14
http://www.k_k_k.com 192.168.0.100/- - GET #15
http://www.aport.ru 192.168.0.100/- - GET #16
http://adv.aport.ru:8000/banners/GOLDEN.gif 192.168.0.100/- - GET #17
http://www.aport.ru 192.168.5.200/- - GET #18
http://www.mus.ru/live.mp3 192.168.0.227/- - GET #19

*Для удобства разбора полетов я справа пронумеровал строки.

Запускаем файл test в рабочее время. На экране получаем сообщения
о загрузке баз, и в результате получаем файл out.
В случае сообщения об ошибке в строке N## следует учитывать ,
что ошибка может быть в предыдущей строке!!!


302: http://www.my.host/my.mp3 192.168.0.200/- - GET #1
#2
#3
http://www.my.host/cgi-bin/bl.cgi?clientaddr=192.168.0.10&clientname=&clientident=& clientgroup=student&targetgroup=pornography&url=http://www.sex.ru 192.168.0.10/- - GET #4
http://www.my.host/cgi-bin/bl.cgi?clientaddr=192.168.0.1&clientname=&clientident=& clientgroup=student&targetgroup=chat&url=http://www.chat.ru 192.168.0.1/- - GET #5
#6
#7
302:http://www.my.host/Images/not_banner.gif 192.168.0.22/- - GET #8
http://www.my.host/cgi-bin/bl.cgi?clientaddr=192.168.0.62&clientname=&clientident=& clientgroup=vasya&targetgroup=chat&url=http://www.chat.ru 192.168.0.62/- - GET #8
#10
302:http://www.my.host/Images/not_banner.gif 192.168.0.62/- - GET #11
#12
#13
#14
#15
#16
#17
http://www.my.host 192.168.5.200/- - GET #18
http://www.my.host 192.168.0.227/- - GET #19


Как видим, kids будет слушать "Корову ...".
2 ,3,6,7,10,12,13,14,15,16,17-ий запросы прошли без редиректа;
4, 5 - блокирование porno для студентов;
8, 11 - подмена баннера;
9 - блокирование chat-а для vasya;
18,19 - чужаки.

Изменив leisure-time, запускаем файл test для нерабочего времени .
В результате получаем файл out для нерабочего времени

302: http://www.my.host/my.mp3 192.168.0.200/- - GET


http://www.my.host/cgi-bin/bl.cgi?clientaddr=192.168.0.10&clientname=&clientident=& clientgroup=student&targetgroup=pornography&url=http://www.sex.ru 192.168.0.10/- - GET
http://www.my.host/cgi-bin/bl.cgi?clientaddr=192.168.0.1&clientname=&clientident=& clientgroup=student&targetgroup=chat&url=http://www.chat.ru 192.168.0.1/- - GET


302:http://www.my.host/Images/not_banner.gif 192.168.0.22/- - GET


302:http://www.my.host/Images/not_banner.gif 192.168.0.62/- - GET






http://www.my.host 192.168.5.200/- - GET
http://www.my.host 192.168.0.227/- - GET

Как видим, vasya получил доступ к chat-ам




Теперь, разобравшись в этой кухне, вы можете написать свой Conf ,
протестировать его и запустить из под Squid-а.

Cтартуем из squid.
Добавляем в файл squid.conf.

redirect_program /usr/local/bin/squidGuard
redirect_children 3
redirector_bypass on # для случая, если все редиректы заняты -
ломись напрямую, иначе squid слетает.
По идее все уже работает за исключением следующего:

1. Для строки подмены banners через редирект
http://www.my.host/Images/not_banner.gif нужно
выложить файл www.my.host/Images/not_banner.gif .
Это может быть ваш banner, logo или рисунок 1х1.

2. Для красивого ответа на запрет "строка вида"
http://www.my.host/cgi-bin/bl.cgi?clientaddr=192.168.0.1&clientname=&clientident=& clientgroup=student&targetgroup=chat&url=http://www.chat.ru
нужно найти файл
...../port/www/squidguard/work/squidGuard-1.1.4/samples/squidGuard.cgi.in,
переименовать (например, bl.cgi) и подправить под свой host.
Выложить в свою web/cgi-bin и подправить путь для редиректа
в файле squidGuard.conf

Теперь можно наслаждаться результатами своей работы.
В случае необходимости правим файлы domains,expressions и urls
ПРИМЕЧАНИЕ !
Если вы внесли изменения в файл domains или urls, то для вступления
изменений в силу вам необходимо выполнить следующую команду
/usr/local/bin/squidGuard -C all для создания файлов domains.db и urls.db.
Если лень, то удалите все файлы *.db, и squidGuard автоматически будет
преобразовывать их при загрузке (замедляет загрузку).

Полная докумунтация находится по адресу http://www.squidguard.org

1.03.2002 Киев.
Савченко Андрей

Все отзывы, замечания и критику просьба отправлять по адресу zakat@ukr.net

Сайт создан 16.02.2004

Copyright © 2003-2016 Slivarez

Hosted by webhostnow.net


OpenNET