Гуру, помогите пожалуйста разобраться:
допустим на mail.ru есть вещи типа знакомства, круг итд так вот, необходимо закрыть доступ к этому делу в диапазоны времени и разрешить при этом использовать доступ к почте на мейле через веб интерфейс.
У меня получилось закрыть доступ ко всему на mail.ru и оставить доступ к почте но если при заходе в браузер при авторизации нажимаешь отмену то получаеться ползать неавторизированному пользователю по white листу.auth_param basic program /usr/local/squid/libexec/ncsa_auth /etc/squid/internet_users
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
# ----- user
acl test proxy_auth test
# ----- raznoe
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 25 #
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 CONNECT method CONNECT
acl timezp time 08:00-13:00
acl timezp1 time 14:00-18:00
acl ftpproto proto ftp
acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$ \.zip$ \.rar$ \.avi$ \.arj$ \.mpeg$ \.mpg$ \.exe$ \.com$ \.ex$ \.7g$ \.tar$
#
# ----- spiski
acl socnet url_regex -i "/proxy/list/socnet"
acl good url_regex -i "/proxy/list/good"
acl bad url_regex -i "/proxy/list/bad"
#
# ----- access
http_access allow SSL_ports
icp_access allow all
http_access deny bad
http_access deny media
http_access allow ftpproto
http_access allow good
http_access deny socnet timezp
http_access deny socnet timezp1
http_access allow test
http_access deny CONNECT !SSL_ports
http_access deny manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny all
#
# ----- delay
delay_pools 1delay_class 1 1
delay_access 1 allow test
delay_access 1 deny all
delay_parameters 1 -1/-1в листе "good"
http://mail.ru
win.mail.ruв листе "socnet"
\mail.ru
Сколько раз твердили миру... rtfm... что 1)http_access выполняются сверху вниз до первого "совпавшего", следующие уже не проверяются и _его_ действие (allow|deny) используется для; 2) образцы в одном acl (=по имени) "складываются" по ИЛИ, а в одной строке *_access по И. Вооружившись этим Знанием и надо читать, что ж ты сам себе написал. Ж*)>acl timezp time 08:00-13:00
>acl timezp1 time 14:00-18:00Если они ^^ не используются по отдельности, "собираем" в один acl:
acl timezp time 08:00-13:00 14:00-18:00
то же, что
acl timezp time 08:00-13:00
acl timezp time 14:00-18:00
, но короче. Сравни с определением Safe_ports.># ----- access
>http_access allow SSL_portsТут всем можно. = Независимо от пароля и времени.
>http_access deny bad
>http_access deny media
>http_access allow ftpproto
>http_access allow goodЭти ^^^ тоже -- независимо от пароля и времени.
>http_access deny socnet timezp
>http_access deny socnet timezp1
>http_access allow test= пользователя test не проверять дальше и просто пустить.
Заметь, что тех, кого пустили в правилах allow выше^^^ может даже и пароль не спрашивать.>http_access deny CONNECT !SSL_ports
>http_access deny manager localhost? allow? ^^^ :)
>http_access deny manager
>http_access deny !Safe_ports
>http_access deny all
>#Я бы организовывал так: сначала все правила deny, которые "общие", потом правила чётко выбирающие что именно можно, потом финальное deny all.
что-нибудь вроде ---
http_access deny CONNECT !SSL_ports
http_access deny !Safe_ports
http_access deny bad
http_access deny media#"Локальная" ветка allow-listed+1*deny-all~ , для одного протокола
http_access allow manager localhost
http_access deny manager#про авторизацию надо отдельно смотреть...
#http_access allow test
#например, пускать [дальше] только тех, кто сказал правильный пароль~~
#?acl passed proxy_auth REQUIRED
#?http_access deny !passed
#если я не напутал чегоhttp_access allow SSL_ports
http_access allow ftpproto
http_access allow good
http_access allow socnet !timezphttp_access deny all
#
(squid/2.6.STABLE18)Получилось так
# Говорим чем будем авторизовать и где лежит
auth_param basic program /usr/local/squid/libexec/ncsa_auth /etc/squid/internet_users
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off# Создал в списках (ncsa_auth) пользователя test, в alc делаю раздельно для каждого
# пользователя для дальнейшего использования в delay_pools
acl test proxy_auth test# С этим все понятно
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
acl icq_ports port 443 #HTTPS
acl Safe_ports port 80
acl CONNECT method CONNECT
acl timezp time 08:00-13:00 14:00-18:00
acl ftpproto proto ftp
acl media urlpath_regex -i \.mp3$# Создал списки
acl socnet url_regex -i "/proxy/list/socnet"
acl good url_regex -i "/proxy/list/good"
acl bad url_regex -i "/proxy/list/bad"# Разрешаем 443
http_access allow icq_ports
# не совсем понимаю
http_access deny CONNECT icq_ports
# запрещаем конекты на порты
http_access deny !Safe_ports
# все понятно
http_access deny bad
http_access deny media
http_access allow manager localhost
http_access deny manager
# Если пользователь test прошел авторизацию то разрешить
http_access allow test
# Разрешаем ftp
http_access allow ftpproto
# разрешаем белый список
http_access allow good
# Запрещаем socnet в диапазон времени timezp
http_access deny socnet timezp
http_access deny all# делаем для пользователя test ограничения по скорости
delay_pools 1
delay_class 1 1
delay_access 1 allow test
delay_access 1 deny all
delay_parameters 1 3000/3000При таком конфиге получается что пользователю test после авторизации можно ходить не смотря на списки socnet и good а если не авторизовался то ничего нельзя кроме 443, а нужно чтоб в timezp было закрыт доступ на socnet но разрешен good и все это только авторизованным.
P.S. Понимаю что косячу но не понимаю где.
>Получилось так(2)
># Разрешаем 443
>http_access allow icq_portsЭто вообще-то не icq :) в общем случае...
># не совсем понимаюСам написал и не понял, то есть? :))
>http_access deny CONNECT icq_ports
># Если пользователь test прошел авторизацию то разрешить
>http_access allow test(1)
># Разрешаем ftp
>http_access allow ftpproto
># разрешаем белый список
>http_access allow good
># Запрещаем socnet в диапазон времени timezp
>http_access deny socnet timezpОбрати внимание, что это ^^^ **не** одно и тоже, что
http_access allow socnet !timezp
как и (1) не одно и то же, что
http_access deny !test>http_access deny all
>При таком конфиге получается что пользователю test после авторизации можно ходить не
>смотря на списки socnet и good а если не авторизовался то
>ничего нельзя кроме 443Именно это :) и написано в конфигурации....
>, а нужно чтоб в timezp было закрыт
>доступ на socnet но разрешен good и все это только авторизованным.#Вот:
acl passed proxy_auth REQUIRED
http_access deny !passed
http_access allow good
http_access allow socnet !timezp
http_access deny all
#-именно то, что ты написал.Но, боюсь, не то, что _хотел_. :-D
>P.S. Понимаю что косячу но не понимаю где.
#Вот так по-проще будет... может быть:
acl passed proxy_auth REQUIRED
http_access allow passed good
http_access allow passed socnet !timezp
http_access deny all
#а может и нет. %)
Спасибо Андрей.>># Разрешаем 443
>>http_access allow icq_ports
>Это вообще-то не icq :) в общем случае...Это понятно. HTTPS
>># не совсем понимаю
>Сам написал и не понял, то есть? :))
>>http_access deny CONNECT icq_portsАга, растолкуйте пожалуйста (если несложно)
>># Если пользователь test прошел авторизацию то разрешить
>>http_access deny socnet timezp
>Обрати внимание, что это ^^^ **не** одно и тоже, что
>http_access allow socnet !timezp
>как и (1) не одно и то же, что
>http_access deny !testНе совсем понял, но имхо выражение "!timezp" говорит о том что - все timezp
а я в acl указал acl timezp time 08:00-13:00 14:00-18:00>#-именно то, что ты написал.
>Но, боюсь, не то, что _хотел_. :-D:-D именно так
>#Вот так по-проще будет... может быть:
>acl passed proxy_auth REQUIRED
>http_access allow passed good
>http_access allow passed socnet !timezp
>http_access deny all
>#а может и нет. %)Точно, наверное так и должно быть, ааа только не понял почему socnet allow мне же надо deny в это время, и как прикрутить сюда пользователя тест а не всех авторизовавшихся, или я совсем ничего не понимаю ?
acl test proxy_auth test # авторизация на пользователя test
http_access allow test good # разрешаем пользователю тест лезть на url из списка good
http_access allow test socnet !timezp # разрешаем пользователю тест лезть на url из списка socnet в диапазон времени указанный в timezp
http_access deny all # запрещяем все всем.Но тогда получается что пользователь никуда не может ходит кроме списков разрешения, а мне надо чтоб он ходил везде кроме списка socnet во время timezp но при этом запрете мог всегда пройти на URL списка good
>>># Если пользователь test прошел авторизацию то разрешить
>>>http_access deny socnet timezp
>>Обрати внимание, что это ^^^ **не** одно и тоже, чтоещё раз! :) Hint^^^, hint^^^ !
>>http_access allow socnet !timezp
>Не совсем понял, но имхо выражение "!timezp" говорит о том что -
>все timezp
>а я в acl указал acl timezp time 08:00-13:00 14:00-18:00!timezp = "условие timezp не совпало"
##http_access allow socnet !timezp
[[если предыдущие правила не дали результата, "не сопоставились",]]
~разрешить доступ, если( URL сопоставился с "socnet" И время НЕ в "timezp" )
[[, иначе продолжить сопоставлять далее по списку правил.]]>>#Вот так по-проще будет... может быть:
>>acl passed proxy_auth REQUIRED((-->>))
Перечитай "Сокровенное Знание" из поста#1. Первый абзац!
Дополнение: ! означает "не".Читаем (представим, для простоты, что есть только эти 3 строки):
>>http_access allow passed good
>>http_access allow passed socnet !timezp
>>http_access deny allif( user.passed() && url.good()) return ALLOW;
else if (user.passed() && url.socnet() && !time.timezp() ) return ALLOW;
else return DENY;>>#а может и нет. %)
Повторять с ((-->>)) до просветления, пока хотябы в "три строчки" не въедешь! :))
>Точно, наверное так и должно быть, ааа только не понял почему socnet
>allow мне же надо deny в это время"В это время" и получится deny: по _третьему_ правилу --> когда timezp _сопоставится_, !timezp _не_ сопоставится, и второе правило _не_ сработает.
>, и как прикрутить сюда пользователя тест а не всех авторизовавшихся
>, или я совсем ничего не понимаю ?Ну, про REQUIERED -- это я твоего "хотения" не "разумел"... Вообще, конфигурация, которую я написал скорее пример в попытке "научить читать". Понимание вырабатывай :) , потом можно будет продолжить? ;-)
Спасибо, очень помог, ночное чтение манов рулит :)
проблема отсутствия времени сказывается на понимании, сорри за тупость.
>Спасибо, очень помог, ночное чтение манов рулит :)Рад помочь, приятно видеть рождение понимания. :-D
>проблема отсутствия времени сказывается на понимании, сорри за тупость.Этт не тупость, просто "более сложные" проблемы не пешаются с наскока и редактирования конфигов "на глазок". Squid, exim, .....
Успехов!
>>acl passed proxy_auth REQUIRED
>>http_access allow passed good
>>http_access allow passed socnet !timezp
>>http_access deny allПолучилось что если passed авторизовался то говорим ему что ходить можно только на список good, но как только время НЕ timezp разрешаем ему еще в догонку ползать на url'ки из списка socnet, это осилил :/
Но при этом passed не может ходить по url которых нет в списке.
но как сделать чтоб можно было ходить куда угодно в любое время но в timezp было запрещенно только \mail.ru но при этом разрешено www.mail.ru и win.mail.ru
Все допер, спасибо.>>>acl passed proxy_auth REQUIRED
>>>http_access allow passed good timezp
>>>http_access deny passed socnet timezp
>>>http_access allow passed
>>>http_access deny all
>Но при этом passed не может ходить по url которых нет в
>списке.
>но как сделать чтоб можно было ходить куда угодно в любое время
>но в timezp было запрещенно только \mail.ru но при этом разрешено
>www.mail.ru и win.mail.ruacl goodmailru ....
acl badmailru ....
acl timezpmailru
#acl passed ...
http_access deny timezpmailru badmailru !goodmailru
http_access allow allПохоже?
PS: а про passed в этом %) ТЗ ничего не было
Да нет фишка именно в то что получилось, в смысле вот как хотел.
|
|
\|/
\
acl test proxy_auth test
http_access allow test good timezp # www.mail.ru win.mail.ru
http_access deny test socnet timezp # \mail.ru
http_access allow test
http_access deny allПросто в данной конфигурации добился что вне рабочее время (к примеру mail.ru) доступ к услугам типа знакомств и тд на mail.ru забанен но при этом доступ к почте на mail.ru разрешен всегда и еще плюс к этому в обед можно и доп услугами майла воспользоваться, просто посчитал что закрывать все сервисы сайта перечисляя их не стоит, они могут добавляться, проще закрыть все и разрешить только то что нужно.
Отец всегда говорит.... читай МАНЫ, не надо беспокоить людей.