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