Есть прокси/фаервол/NAT на Debian 7 (7.4). Два сетевых интерфейса (eth0 - WAN; eth1 - LAN (сеть 172.16.1.0/24)). Установлен SQUID (Version 2.7.STABLE9)+ iptables. Интернет есть у всех, канал 8 Mbit.
Этот канал хочу порезать при помощи сквида. До этого никогда такого не делал. Задача: отделить тех, кто качает и ходит в соцсети от всех остальных. Первым (качкам и вконтактникам) порезать скорость, вторым дать "равные" доли от канала. Оставив при этом запаса ~2 Mbit от канала. Нашел несколько инструкций по настройке squid и delay_pool в частности, в итоге получился следующий конфиг:acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 172.16.1.0/24
acl localnet src 172.16.1.0/24 # RFC1918 possible internal network
acl vip src "/etc/squid/lists/vip"
acl file_bad urlpath_regex -i \.mp3$ \.asf$ \.wma$ \.flv$
acl bad_url dst "/etc/squid/lists/bad_url"
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECThttp_access allow manager
http_access allow localnet vip
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access deny all
cachemgr_passwd ghjcnjq all
http_port 172.16.1.1:3128 transparent
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.log squid
log_fqdn on
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
hosts_file /etc/hosts
coredump_dir /var/spool/squid
cache_dir ufs /var/spool/squid 5000 16 256
minimum_object_size 2 KB
maximum_object_size 61440 KB
via off
forwarded_for deletedelay_pools 4
delay_class 1 1
delay_parameters 1 768000/768000
delay_access 1 allow vip
delay_access 1 deny alldelay_class 2 2
delay_parameters 2 64000/5000000 8000/1024000
delay_access 2 allow file_bad
delay_access 2 deny alldelay_class 3 2
delay_parameters 2 64000/5000000 16000/2048000
delay_access 3 allow bad_url
delay_access 3 deny alldelay_class 4 3
delay_parameters 4 704000/50000000 -1/-1 38000/10000000
delay_access 4 allow localnetСквид ошибок не находит в конфиге, нормально стартует. Но при этом ВСЕ пользователи у меня в классе 4. Вторым и третьим классом никто не стал... Что неправильно в конфиге и как добиться выполнения поставленной задачи?
> ... как добиться выполнения поставленной задачи?HTB, SFQ, ipset
>> ... как добиться выполнения поставленной задачи?
> HTB, SFQ, ipsetМожно ли расшифровать Ваш ответ? Я никогда не слышал об этих аббревиатурах.
Да, и я спрашивал как решить поставленную задачу в рамках сквида, поскольку знаю, что подобные вещи как раз на нём делают.
>>> ... как добиться выполнения поставленной задачи?
>> HTB, SFQ,Шейперы трафика это. (см. QoS)
ipset - группировка ip адресов, для работы в паре с фаерволом.> Можно ли расшифровать Ваш ответ? Я никогда не слышал об этих аббревиатурах.
> поскольку знаю, что подобные вещи как раз на нём делают.SQUID работает на 7-5 уровнях OSI, скорость передачи - это 3-2 уровень.
Могу как теоретически, так и практически показать как обойти любое
ограничение скорости реализованное на 7...5 уровнях. (но не буду, долго это и нудно :))
4-й уровень и SPDY - отдельная песнь.
>>> HTB, SFQ,
> Шейперы трафика это. (см. QoS)
> ipset - группировка ip адресов, для работы в паре с фаерволом.Ни разу не сталкивался с этим. Может быть, это хорошие инструменты, но почему-то про них мне информация не попадалась. Я реализую решения на том, что знаю и боюсь, мы можем немного отойти от темы.
>> Можно ли расшифровать Ваш ответ? Я никогда не слышал об этих аббревиатурах.
>> поскольку знаю, что подобные вещи как раз на нём делают.
> SQUID работает на 7-5 уровнях OSI, скорость передачи - это 3-2 уровень.Вы имеете в виду QOS, как я понимаю. Но "Механизмы QoS главным образом работают на четвертом (транспортном) и седьмом (прикладном) уровнях." (http://www.ccc.ru/magazine/depot/03_14/read.html?0301.htm, или в этих протоколах что-то кардинально изменилось?) Соответственно, чем эти механизмы отличаются от Squid мне не очень понятно. Но это уже отклонение от прямой темы форума, посему развивать не буду.
> Могу как теоретически, так и практически показать как обойти любое
> ограничение скорости реализованное на 7...5 уровнях. (но не буду, долго это и
> нудно :))Я не сомневаюсь в Ваших знаниях и умениях. Однако вопрос темы "Как сделать ограничения на Squid", а не "Как обойти ограничения траффика в Squid". Посему опять таки, продолжать углубляться в это не вижу смысла.
> 4-й уровень и SPDY - отдельная песнь.
Да, посему забудем в данном обсуждении.
>[оверквотинг удален]
> delay_class 1 1
> delay_parameters 1 768000/768000
> delay_access 1 allow vip
> delay_access 1 deny all
> delay_class 2 2
> delay_parameters 2 64000/5000000 8000/1024000
> delay_access 2 allow file_bad
> delay_access 2 deny all
> delay_class 3 2
> delay_parameters 2 64000/5000000 16000/2048000ошибка, пул номер 3, а delay_parameters указан для пула c номером 2
> delay_access 3 allow bad_urlпробуй вот так
delay_access 3 allow localnet bad_url
> delay_access 3 deny all
> delay_class 4 3
> delay_parameters 4 704000/50000000 -1/-1 38000/10000000
> delay_access 4 allow localnet
> Сквид ошибок не находит в конфиге, нормально стартует. Но при этом ВСЕ
> пользователи у меня в классе 4. Вторым и третьим классом никто
> не стал... Что неправильно в конфиге и как добиться выполнения поставленной
> задачи?в 4 пуле -1/-1 советую убрать, этим вы сняли все ограничения и лучше сделать его пулом второго класса.
>>[оверквотинг удален]
>> delay_class 2 2
>> delay_parameters 2 64000/5000000 8000/1024000
>> delay_access 2 allow file_bad
>> delay_access 2 deny all
>> delay_class 3 2
>> delay_parameters 2 64000/5000000 16000/2048000
> ошибка, пул номер 3, а delay_parameters указан для пула c
> номером 2Спасибо, не заметил!
>> delay_access 3 allow bad_url
> пробуй вот так
> delay_access 3 allow localnet bad_urlА какой смысл объединять всю локалку и "запретные" урлы? Скорости у них должны быть разные.
>> delay_access 3 deny all
>> delay_class 4 3
>> delay_parameters 4 704000/50000000 -1/-1 38000/10000000
>> delay_access 4 allow localnet
> в 4 пуле -1/-1 советую убрать, этим вы сняли все
> ограничения и лучше сделать его пулом второго класса.Как я понял из прочитанного в сети, -1/-1 убирает ограничения в конкретном пуле для конкретных параметров (для сети, посети или ИП). Или это действует вообще на всё и на всех? А про второй класс я подумаю, идея вполне здравая, спасибо!
>[оверквотинг удален]
> acl bad_url dst "/etc/squid/lists/bad_url"
> delay_access 2 allow file_bad
> delay_parameters 2 64000/5000000 16000/2048000
> delay_access 3 allow bad_url
> delay_parameters 4 704000/50000000 -1/-1 38000/10000000
> delay_access 4 allow localnet
> Сквид ошибок не находит в конфиге, нормально стартует. Но при этом ВСЕ
> пользователи у меня в классе 4. Вторым и третьим классом никто
> не стал... Что неправильно в конфиге и как добиться выполнения поставленной
> задачи?В пулы попадают не "кто-то", а конкретные http-запросы, но да несколько запросов с одного ip в одном пуле получат одно ограничение.
По этим правилам, например, 1 пользователь (=ip) может качать .mp3 на 8kBs, "bad url" на 16-ти, и, скажем какой-нибудь .pdf на 38kBs, всего - до 52kBs. Никаким из 3ёх классов _он, "ip", при этом не становится.
> В пулы попадают не "кто-то", а конкретные http-запросы, но да несколько запросов
> с одного ip в одном пуле получат одно ограничение.Да, я это понимаю. Я неправильно применил терминологию, скажем так.
> По этим правилам, например, 1 пользователь (=ip) может качать .mp3 на 8kBs,
> "bad url" на 16-ти, и, скажем какой-нибудь .pdf на 38kBs, всего
> - до 52kBs. Никаким из 3ёх классов _он, "ip", при этом
> не становится.Да, согласен. Именно этого я и хочу. Но этого почему-то и не происходит. Смотрю sqstat с интервалом обновления 1с, народ качает mp3, flv, заходит на сайты перечисленные в bad_url - и всё это хозяйство попадает в 4 класс. С разных ИП, разные запросы. Но все в одном классе. Проблема в этом. Вопрос про это. Что в указанном конфиге не так?
Ещё попытка.> acl vip src "/etc/squid/lists/vip"
> acl file_bad urlpath_regex -i \.mp3$ \.asf$ \.wma$ \.flv$
> acl bad_url dst "/etc/squid/lists/bad_url"1. Стеснялся спросить, а _vip_ работает?
2. http://wiki.squid-cache.org/SquidFaq/SquidAcl#Fast_and_Slow_...
Как то: dst, пишут, - slow, но delay_access - fast, поэтому пул bad_url не работает.Заменить url_regex-пом, переписав список, например.
Но urlpath_regex - fast, тот пул дожен, вроде работать.
>[оверквотинг удален]
> delay_class 2 2
> delay_parameters 2 64000/5000000 8000/1024000
> delay_access 2 allow file_bad
> delay_access 2 deny all
> delay_class 3 2
> delay_parameters 2 64000/5000000 16000/2048000
> delay_access 3 allow bad_url
> delay_access 3 deny all
> delay_class 4 3
> delay_access 4 allow localnet3. Порядок директив - и deny-и _везде.... Я как-то с этим морочался, припоминаю.
-> добавь для последнего пула deny all в конце, или даже переписать в виде
deny vip
deny file_bad
deny bad_url
allow all
> Ещё попытка.Спасибо! :)
>> acl vip src "/etc/squid/lists/vip"
>> acl file_bad urlpath_regex -i \.mp3$ \.asf$ \.wma$ \.flv$
>> acl bad_url dst "/etc/squid/lists/bad_url"
> 1. Стеснялся спросить, а _vip_ работает?Как ни удивительно, VIP работает исправно.
> 2. http://wiki.squid-cache.org/SquidFaq/SquidAcl#Fast_and_Slow_...
> Как то: dst, пишут, - slow, но delay_access - fast, поэтому
> пул bad_url не работает.
> Заменить url_regex-пом, переписав список, например.Хм... Мне весьма сомнительна идея заменить список сайтов регулярным выражением... К тому же
> Но urlpath_regex - fast, тот пул дожен, вроде работать.
Этот пул тоже НЕ работает... Работают 1 и 4, 2 и 3 не работают, хотя запросы, которые должны подпадать под правила в них, есть. Кто не попал в 1, оптом попадают в 4, как будто остальных пулов нет.
> 3. Порядок директив - и deny-и _везде.... Я как-то с этим морочался,
> припоминаю.
> -> добавь для последнего пула deny all в конце, или даже переписать
> в виде
> deny vip
> deny file_bad
> deny bad_url
> allow allА вот это завтра попробую. По результату напишу.
> 3. Порядок директив - и deny-и _везде.... Я как-то с этим морочался,
> припоминаю.
> -> добавь для последнего пула deny all в конце,Да, добавил, сквид рестарнул - тот же фаберже :( 1 и 4 работают, остальные - нет.
>или даже переписать в виде
> deny vip
> deny file_bad
> deny bad_url
> allow allХм, запретить пользоваться этими классами? А смысл? Или я не так понял Ваш совет?
>[оверквотинг удален]
>> -> добавь для последнего пула deny all в конце,
> Да, добавил, сквид рестарнул - тот же фаберже :( 1 и 4
> работают, остальные - нет.
>>или даже переписать в виде
>> deny vip
>> deny file_bad
>> deny bad_url
>> allow all
> Хм, запретить пользоваться этими классами? А смысл? Или я не так понял
> Ваш совет?Я имел в виду последний
>>> delay_class 4 3
>>> delay_parameters 4 704000/50000000 -1/-1 38000/10000000
>>> delay_access 4 allow localnetпереписать, как
delay_class 4 3
delay_parameters 4 704000/50000000 -1/-1 38000/10000000
delay_access 4 deny vip
delay_access 4 deny file_bad
delay_access 4 deny bad_url
delay_access 4 allow all
>> Хм, запретить пользоваться этими классами? А смысл? Или я не так понял
>> Ваш совет?
> Я имел в виду последнийДа, спасибо за подсказку!
> переписать, как
> delay_class 4 3
> delay_parameters 4 704000/50000000 -1/-1 38000/10000000
> delay_access 4 deny vip
> delay_access 4 deny file_bad
> delay_access 4 deny bad_url
> delay_access 4 allow allПереписал, перезапустил. Результат отрицательный. Мне не понятно почему работают только 1 и 4 пулы? Что в них такого "правильного"?
>[оверквотинг удален]
> Да, спасибо за подсказку!
>> переписать, как
>> delay_class 4 3
>> delay_parameters 4 704000/50000000 -1/-1 38000/10000000
>> delay_access 4 deny vip
>> delay_access 4 deny file_bad
>> delay_access 4 deny bad_url
>> delay_access 4 allow all
> Переписал, перезапустил. Результат отрицательный. Мне не понятно почему работают только
> 1 и 4 пулы? Что в них такого "правильного"?ЭТО есть
delay_access 2 allow file_badА вот этого
http_allow file_bad
нет
>[оверквотинг удален]
>>> delay_access 4 deny file_bad
>>> delay_access 4 deny bad_url
>>> delay_access 4 allow all
>> Переписал, перезапустил. Результат отрицательный. Мне не понятно почему работают только
>> 1 и 4 пулы? Что в них такого "правильного"?
> ЭТО есть
> delay_access 2 allow file_bad
> А вот этого
> http_allow file_bad
> нетНормально там всё с этим. Есть http_access allow на manager (хотя это не совсем обычно, но не суть), vip, localnet и localhost.
>>> Переписал, перезапустил. Результат отрицательный. Мне не понятно почему работают только
>>> 1 и 4 пулы? Что в них такого "правильного"?
>> ЭТО есть
>> delay_access 2 allow file_bad
>> А вот этого
>> http_allow file_bad
>> нет
> Нормально там всё с этим. Есть http_access allow на manager (хотя это
> не совсем обычно, но не суть), vip, localnet и localhost.На всякий случай проверил - прописывание http_access для этих acl ничего не даёт...
> Переписал, перезапустил. Результат отрицательный. Мне не понятно почему работают только
> 1 и 4 пулы? Что в них такого "правильного"?Я исчерпал предположения. Следующий шаг, приходящий в голову, взять кувалду побольше: debug 9 и расшифровывание больших-больщих логов. Но это не ко мне.
>> Переписал, перезапустил. Результат отрицательный. Мне не понятно почему работают только
>> 1 и 4 пулы? Что в них такого "правильного"?
> Я исчерпал предположения. Следующий шаг, приходящий в голову, взять кувалду побольше: debug
> 9 и расшифровывание больших-больщих логов. Но это не ко мне.Спасибо Вам за помощь! Приёмами с кувалдой тоже не владею. Может быть кто-нибудь ещё что-то сможет подсказать. Проблема не стоит ребром, но хотелось бы её решить!
>>> Переписал, перезапустил. Результат отрицательный. Мне не понятно почему работают только
>>> 1 и 4 пулы? Что в них такого "правильного"?
>> Я исчерпал предположения. Следующий шаг, приходящий в голову, взять кувалду побольше: debug
>> 9 и расшифровывание больших-больщих логов. Но это не ко мне.
> Спасибо Вам за помощь! Приёмами с кувалдой тоже не владею. Может быть
> кто-нибудь ещё что-то сможет подсказать. Проблема не стоит ребром, но хотелось
> бы её решить!включи debug в конфиге сквида уровень побольше и смотри cache.log
увидишь какие правила срабатывают а какие нет
> включи debug в конфиге сквида уровень побольше и смотри cache.log
> увидишь какие правила срабатывают а какие нетСпасибо, попробую, после выходных напишу.
И так, проблему решил сам. Всё было просто, дело в моём непонимании некоторых моментов и невнимательности:Было:
> acl file_bad urlpath_regex -i \.mp3$ \.asf$ \.wma$ \.flv$
> acl bad_url dst "/etc/squid/lists/bad_url"Стало:
acl file_bad urlpath_regex -i mp3$ asf$ wma$ flv$
acl bad_url dstdomain "/etc/squid/lists/bad_url"Было:
>[оверквотинг удален]
> delay_parameters 2 64000/5000000 8000/1024000
> delay_access 2 allow file_bad
> delay_access 2 deny all
> delay_class 3 2
> delay_parameters 2 64000/5000000 16000/2048000
> delay_access 3 allow bad_url
> delay_access 3 deny all
> delay_class 4 3
> delay_parameters 4 704000/50000000 -1/-1 38000/10000000
> delay_access 4 allow localnetСтало:
delay_pools 4delay_class 1 1
delay_parameters 1 768000/768000
delay_access 1 allow vip
delay_access 1 deny alldelay_class 2 2
delay_parameters 2 64000/5000000 8000/1024000
delay_access 2 allow file_bad
delay_access 2 deny alldelay_class 3 2
delay_parameters 3 64000/5000000 16000/2048000
delay_access 3 allow bad_url
delay_access 3 deny alldelay_class 4 2
delay_parameters 4 704000/50000000 38000/10000000
delay_access 4 allow localnet
delay_access 4 deny allТеперь это хозяйство работает нормально. Все попадают в нужные пулы с нужной скоростью. Всем принявшим участие в обсуждении большое спасибо за помощь!