The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Сети, протоколы, сервисы" (Архив | Для печати)

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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру