SquidGuard предназначен для работы с proxy-сервером Squid и служит для редиректа и фильтрации запросов Squid.
Возможности SquidGuard:
Несколько слов об окружении.
Имеется:
Я хочу рассмотреть только те элементы настройки SquidGuard, которые реально
работают у меня . Думаю, большинству администраторов этого будет достаточно.
Я администрирую работу с Интернет приложениями в учебном заведении.
Общее количество машин - около 100.
SquidGuard позволяет бороться с вредными наклонностями студентов (порнография,
чаты, агрессия, наркотики и т.д.), а также экономить трафик (рекламные
банеры, mp3 и т.д.).
В то же время отдельным пользователям можно позволить посещать всё или только список "хороших" сайтов.
Так, реклама прошла успешно, теперь к делу.
Любым способом устанавливаем пакет SquidGuard (например из портов).
Стандартно инсталляция проходит в папку /usr/local/SquidGuard.
Здесь создаются папки:
Качаем архив blacklists.tar.gz, распаковываем и полученные папки с файлами выкладываем в папку db.
Можно использоать адреса:
Вы получаете папки:
В каждой папке могут быть файлы:
Редактируем squidGuard.conf/
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/in > /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:
По идее все уже работает за исключением следующего:
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 автоматически будет преобразовывать их при загрузке (замедляет загрузку).
Полная докумунтация находится по адресу:
Все отзывы, замечания и критику просьба отправлять по адресу zakat@ukr.net