Документация по ОС FreeBSD Пятница, 19.04.2024, 02:53
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Squid

Пилим squid и sams в примерах и задачках. +Установка SqStat [2009]
Вступление
Установив sams я начал радоваться жизни и весело тыкать мышкой в вэб интерфейсе.Но к хорошему быстро привыкаешь и его становится мало. Хотелось резать все и всем :))
Вопрос как быть с возможной с утечкой информации через инет тоже беспокоил начальство.
Примечание: Статья писалась скорее как-бы шпаргалка для самого себя, статья не претендует на правильность и это моя первая статья, так что прошу сильно ногами не пинать.
Итак поехали.
Имеем  
web00# uname -a
FreeBSD web00 7.2-RELEASE-p3 FreeBSD 7.2-RELEASE-p3 #0: 
Fri Sep 4 10:42:46 EEST 2009 i386
web00# squid -v
Squid Cache: Version 2.7.STABLE7
SAMS v. 1.0.4 

    ACL

Сперва небольшая шпаргалка по ACL:
acl aclname port 80 70 21 - ACL, описывающий порты. Вместо простого перечисления можно указать диапазон, например 1-1024.
acl aclname proto HTTP FTP - ACL, описывающий протокол, по которому клиент желает сделать запрос на сервер.
acl ftp url_regex -i ^ftp:// - использовать регулярки для отлова содержимого адресной строки.
"-i"  игнорирует разницу между заглавн и строчными буквами
acl aclname method GET POST - метод, которым передаются данные клиента серверу.
acl aclname time [day-abbrevs] [h1:m1-h2:m2] - ACL, описывающий время.
Коды дней недели определяются так: S - Sunday - Воскресенье, M - Monday - Понедельник, T - Tuesday - Вторник, W - Wednesday - Среда, H - Thursday - Четверг, F - Friday - Пятница, A - Saturday - Суббота. Ну а вместо h1:m1 и h2:m2 вставляется время.
acl worktime time MTWHF 08:00-17:00 описывает рабочее время с понедельника по пятницу, с 8 утра до 5
вечера.
acl weekday time SA описывает целиком субботу с воскресеньем, а
acl evening time 17:00-23:59 описывает время до полуночи. Если необходимо описать всю ночь, то приходится
заводить два ACL- первый с вечера до полуночи, а второй с полуночи до утра.

    Мои ACL в SAMS

Типичные ACL самса имеют вид
# TAG: acl
acl _sams_default src "/usr/local/etc/squid/default.sams"
acl _sams_4901c4f49225b src "/usr/local/etc/squid/4901c4f49225b.sams"

если пытаться что то ваять используя их, то будет большая вероятность что при следующем реконфиге самса вы свои строки больше не увидите, да и читать их не удобно, потому сделаем свои и о чудо Самс их не тронет.
# Мои ACL
acl sams_default src "/usr/local/etc/squid/default.sams"
acl sams_menegeri src "/usr/local/etc/squid/4901c4f49225b.sams"
acl sams_Buhi src "/usr/local/etc/squid/490f01a78f0ab.sams"
#sams_default будут админские/шефские IP, остальные менегеры и бухи

# это пригодится нам потом
acl ftp_port port 21 20
acl work_time time 08:00-17:00
# ночь можно определять как !work_time или вот так
acl night_time1 time 17:00-23:59
acl night_time2 time 00:00-08:00

    Запрещаем закачку файлов больше определенного размера

Запретим каждой группе превышать свой размер скачиваемого файла, себе ставим побольше :), а остальным кто не в группе (например вновь прибывшим) режем по максимуму. Можно вместо deny писать allow, но результат у меня получался не такой как мне хотелось.
#--------------------- ------------------ ------------------- 
# Запрещаем закачку файла больше определенного размера,
# остальным как доктор прописал
reply_body_max_size 410000 deny sams_menegeri
reply_body_max_size 1400000 deny sams_Buhi
reply_body_max_size 11001001000 deny sams_default
reply_body_max_size 1000 deny all
#====================================================================

Размер указывается в байтах. В реальности будет резать с небольшой погрешностью из-за служебной информации файла или еще чего-то там еще. Пишем внутрифирменную инструкцию, что все файлы большого размера качать запрещено. А если очень надо, то кидать ссылку на почту админу и приходить с пивом/кофем забирать. Админ качнет когда у него будет время :)   Пойдем дальше...

    Запрещаем выгрузку(upload) файлов больше определенного размера

Данный пример показывает как это можно реализовать
# размер загаловка меньше 90 кб
acl upload_limit1 req_header Content-Length [0-9]{6,}
# размер загаловка меньше приблиз 900 кб
acl upload_limit2 req_header Content-Length [0-9]{7,}
# проверяется метод post
acl upload_method method post
http_access deny sams_Buhi upload_method upload_limit1
http_access deny sams_ip upload_method upload_limit2
.................
...................
#наши правила пишем ДО правил самса, ниже идут его правила,

# TAG: http_access
http_access allow _sams_default..
http_access allow _sams_4901c4f49225b !_sams_4909e12d54f8f.

# в конце обязательно должно быть 
http_access deny all

Принцип работы основан на регулярках где [0-9]{6,} означает 6 цыфер от 0 до 9. Рекомендую сильно мало не ставить, иначе большой текст на на вэб формах (например, форумах) оно тоже будет тоже резать.
При желании можно блеснуть умом и придумать что то более заумное(жду ваших предложений).
В инете видел еще такое решение, оно мне не подошло.. для полного запрета выгрузки на  html формах
acl fileupload req_mime_type -i ^multipart/form-data$

      Режем порты на примере борьбы с торентами.

Вышеперечисленные правила могут не сработать если юзер будет качать/раздавать из торентов. Дело в том, что
согласно этому протоколу, закачка будет мелкими кусочками по 16,32...4096 kb (смотря как задал размер то кто создавал торрент файл). Вот такая вот засада...Чешем репу и думаем что делать.... Активность торрента вычисляется в логах по коннектам к многочисленным хостам (как правило не имеющим статистического адреса) в широком диапазоне портов. Как вариант решения проблемы можно, глянув логи, бить такого юзера линейкой по голове...Глянем, что еще можно сделать...
Первое что приходит в голову порезать левые порты для такой категории юзеров:

acl Safe_ports port 80 # http
acl Safe_ports port 443 # https
acl Safe_ports123 port 21 # ftp
acl Safe_ports123 port 70 # gopher
acl Safe_ports123 port 210 # wais
acl Safe_ports123 port 1025-65535 # unregistered ports
acl Safe_ports123 port 280 # http-mgmt
acl Safe_ports123 port 488 # gss-http
acl Safe_ports123 port 591 # filemaker
acl Safe_ports123 port 777 # multiling http

# режем нашим юзерам почти все порты кроме http,ssl
http_access deny sams_Buhi !Safe_ports
http_access deny sams_ip !Safe_ports
# ну или наоборот режем только наиболее страшные порты
#http_access deny sams_Buhi Safe_ports123
#http_access deny sams_ip Safe_ports123

# TAG: http_access
http_access allow _sams_default
http_access allow _sams_4901c4f49225b !_sams_4909e12d54f8f
http_access allow _sams_490f01a78f0ab !_sams_4909e12d54f8f

# Всем остальным, кто не моих правилах и правилам, 
# самса тоже режем порты 
#(остальным самс разрешил доступ притом по всем портам).
# хотя по идее эта строка бесполезна, тк уже всех перечислили 
# и есть правило http_access deny all
http_access deny !Safe_ports

Обратите внимание- строки надо ставить ПЕРЕД #  TAG: http_access, иначе после реконфига, самс их поставит после своих строк и ничего не будет работать, так как предыдущие правила самса разрешат полный доступ по портам.
Более гуманный способ это порезать скорость на левых портах об этом расскажу ниже.
Есть еще такой вариант, может кому пригодится - резать для сети порты, только еще и запросы по методу CONNECT
acl block_soft_ports port 6660-6669
acl CONNECT method CONNECT
acl net src 192.168.0.0/255.255.255.0
http_access deny CONNECT block_soft_ports net

    Нарезаем скорость. Пример №1

Как известно в вэб интерфейсе Самса можно менять скорость.После реконфига самс уже за нас все прописует в squid.conf , попытаемся понять что там
# самс находит этот тэг и добавляет при реконфиге свое, 
# в начало, удаляя ваши строки :)))
# TAG: delay_class
# описует скока будет труб
delay_pools 6
# для каждого номера трубы (1-6) задаем ее тип 
# самс использует 2 тип труб, в которой можно задать 
#скорость на всю группу и на отдельного товарища в ней 
delay_class 1 2
delay_class 2 2
delay_class 3 2
delay_class 4 2
delay_class 5 2
# указываем кто попадет в трубу, тут аналог с http_access с тем 
# отличием что указывать можно по одному ACL,
# несколько ACL задается списком, но сработает тот, 
# кто первый попадет под условие. 
# комбинация из двух и более не пашет, сработает только первый ACL
# номер трубы___разрешить/запретить___acl
delay_access 1 allow _sams_4901c4f49225b
# как и в http_access, в конце все остальное,запрещаем для 
# каждого номера трубы
delay_access 1 deny all
# и наконец, задаем параметры нарезки - 
#номер трубы_ограничения на группу_ограничения на клиента
delay_parameters 1 100000/100000 70000/70000
 # остальное по аналогу для 2 трубы
delay_access 2 allow _sams_4909909c6f0fa
delay_access 2 deny all
delay_parameters 2 200100/200100 15100/15100 

delay_parameters 2 200100/200100 15100/2300100 # эту строку с решеткой
# самс не удалит

Объясню как это работает.
В первую трубу 2 класса попадет некий перечень IP клиентов.
(acl _sams_4901c4f49225b src "/usr/local/etc/squid/4901c4f49225b.sams). Для все группы скорость будет 100000 байт/с и 70000 байт/с для каждого в отдельности. Второе число после слеша задает размер буфера в который влазит файл(файлы), а первое число это и есть скорость ограничения. Можно указать "100000/100000 -1/-1", тогда будет без ограничения на клиента и скорость будет упираться в ограничение группы. При одинаковых числах файлы приходят в буфер и уходят.
Во второй трубе группа имеет постоянное ограничение на 200100 байт/с, а у клиента при превышении размера файла 2300100 байт (2,1 мб) (который не влезет в буфер), скорость резко упадет до 15100 байт/с. Если после закачки большого файла дальше пойдут мелкие, то спустя некоторое время (по моим наблюдениям около 15-40 сек) скорость снова подымится и упрется в ограничение на группу. Как менять время восстановления скорости, я пока не нашел, жду ваших советов. 2,1 Мб в принципе хватает для просмотра без тормозов страниц с новостями, в которых много картинок. В примере параметры второй трубы указаны два раза, второй пример я дописал руками и наличие в конце решетки защищает его от удаления самсом, и как ни странно именно это значение применится в итоге.

    Нарезаем скорость. Пример №2

Если хочется сделать что то более сложное, то придется все таки отказаться от услуг самса (да и еще к сожалению строки delay_access с решеткой на конце сквид не понимает думая что там будет ACL). Делается это так- В вэб интерфейсе -Настройки Самс-"Включить ограничение скорости доступа пользователей (delaypool)" убрать галку. Можно не беспокоиться, если ее вернуть, то прежние числа скорости снова появятся. Скопируем правила самса и подрихтуем. Глянем, что я тут начудил:
# TAG: delay_class
delay_pools 7
delay_class 1 2
delay_class 2 2
delay_class 3 2
delay_class 4 2
delay_class 5 2

delay_access 1 allow _sams_4901c4f49225b
delay_access 1 deny all
delay_parameters 1 100000/100000 70000/70000
delay_access 2 allow _sams_4909909c6f0fa
delay_access 2 deny all
delay_parameters 2 524288/524288 999288/999288
delay_access 3 allow _sams_490f01a78f0ab
delay_access 3 deny all
delay_parameters 3 28000/28000 14000/14000

# ночной трафик и трафик с левых портов 
для этих товарищей будет в отдельной трубе
delay_access 4 deny !work_time
delay_access 4 deny Safe_ports123
delay_access 4 allow sams_menegeri
delay_access 4 deny all
delay_parameters 4 200100/200100 15100/2300100

# ночной трафик и трафик с левых портов для 
этих товарищей будет в отдельной трубе
delay_access 5 deny !work_time
delay_access 5 deny Safe_ports123
delay_access 5 allow _sams_default
delay_access 5 deny all
delay_parameters 5 2000100/2000100 40100/2300100

#
#delay_class 6 2 
# у остальных запрещаем этому типу трафа попадать в этот тип трубы
# надо учесть, что на деле юзер будет хавать общий траф из двух(!) труб
delay_access 6 allow !work_time
delay_parameters 6 28000/28000 14000/230011 # fgg
delay_access 6 deny all

delay_class 7 2 
# у остальных запрещаем этому типу трафа попадать в этот тип трубы
# надо учесть, что на деле юзер будет хавать общий траф из двух(!) труб
delay_access 7 allow Safe_ports123
delay_parameters 7 211000/211000 101000/230011 # fgg
delay_access 7 deny all

Пользователи из трубы 1,2,3 будут на одинаковой скорости зимой и летом.
Для пользователей списка sams_menegeri и _sams_default обычный траф будет в трубах 4 и 5, а другой траф для них пойдет ночью в трубу 6, а траф по другим портам в трубу 7.
В принципе получилось довольно заумно, если можно сделать как-то проще с радостью перепишу по-другому. Насколько упадет скорость сквида под очень большой нагрузкой не проверял, у себя в конторе я разницы не
заметил.
*****************************************
Забавно, что в этом примере и ну или если взять попроще пример (ниже),
если написать вместо труб 6 и 7 вот такую 6 трубу ,то траф к клиенту пойдет из двух труб-
-часть по портам 80,443 будет идти по трубе 4(5)
-часть по остальным портам или ночью по трубе 6
#delay_class 6 2 
delay_access 7 allow Safe_ports123
delay_access 6 allow !work_time
delay_parameters 6 28000/28000 14000/230011 
delay_access 6 deny all

так что надо учесть, что суммарная скорость приходящего трафа будет больше.

Таким образом, можно сильно урезать работу торентов и прочего софта по левым портам. Не забываем, что есть еще acl по протоколу, так что вариантов много, как испортить юзерам сладкую жизнь, надеюсь эти примеры итак уже некисло это обеспечат... :))

Конец ...:)))  


Ccылки на доп литературу:
http://forum.lissyara.su/viewtopic.php?f=3&t=20393 (для начинающих приблизительный пример конфига с русскими комментами)
http://linuxnews.ru/docs/squid.html (основы по ACL)
http://www.kernel-panic.it/openbsd/proxy/proxy3.html (ACL посложнее)


Установка SqStat.
SqStat это скрипт на пыхе мониторинга того кто и на какой скорости качает через сквид в реальном времени.Официальный сайт. Скриншот.
При условии что у меня в squid.conf аутентификация ncsa и редиректор sams
auth_param basic program /usr/local/libexec/squid/ncsa_auth 
/usr/local/etc/squid/ncsa.sams
url_rewrite_program /usr/local/bin/samsredir

Ставим
portinstall sqstat

Рихтуем httpd.conf
Alias /sqstat "/usr/local/share/sqstat/"
 <Directory /usr/local/share/sqstat/>
 DirectoryIndex sqstat.php
 Order deny,allow
 Allow from 10.0.0.22/32
 </Directory>

config.inc.php
$squidhost[0]="127.0.0.1";
$cachemgr_passwd[0]="pass123";

squid.conf
acl localhost src 127.0.0.1/32
acl manager proto cache_object
# без этой стороки постоянно писало ошибку аутентификации
cachemgr_passwd pass123
http_access allow manager localhost
http_access deny manager
# для работы с редиректором самса
redirector_access deny localhost



Источник: http://www.lissyara.su/articles/freebsd/programms/squid_sams/
Категория: Squid | Добавил: oleg (24.02.2010) | Автор: gonzo111
Просмотров: 1812 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links
remove pdf password;pdf password remover tumblr 9;recover pdf password mac

Copyright MyCorp © 2024