URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID12
Нить номер: 5363
[ Назад ]

Исходное сообщение
"Запрет доступа на саты по времени."

Отправлено Jss , 28-Янв-08 12:51 
Гуру, помогите пожалуйста разобраться:
допустим на 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 1

delay_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


Содержание

Сообщения в этом обсуждении
"Запрет доступа на саты по времени."
Отправлено Andrey Mitrofanov , 28-Янв-08 14:01 
Сколько раз твердили миру... 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 !timezp

http_access deny all
#


"Запрет доступа на саты по времени."
Отправлено Jss , 28-Янв-08 15:00 
(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. Понимаю что косячу но не понимаю где.


"Запрет доступа на саты по времени."
Отправлено Andrey Mitrofanov , 28-Янв-08 15:17 
>Получилось так

(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
#а может и нет. %)


"Запрет доступа на саты по времени."
Отправлено Jss , 28-Янв-08 15:43 
Спасибо Андрей.

>># Разрешаем 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 в это время, и как прикрутить сюда пользователя тест а не всех авторизовавшихся, или я совсем ничего не понимаю ?


"Запрет доступа на саты по времени."
Отправлено Jss , 28-Янв-08 16:26 
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


"Запрет доступа на саты по времени."
Отправлено Andrey Mitrofanov , 28-Янв-08 17:39 
>>># Если пользователь 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 all

if( 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 -- это я твоего "хотения" не "разумел"... Вообще, конфигурация, которую я написал скорее пример в попытке "научить читать". Понимание вырабатывай :) , потом можно будет продолжить? ;-)


"Запрет доступа на саты по времени."
Отправлено Jss , 29-Янв-08 09:17 
Спасибо, очень помог, ночное чтение манов рулит :)
проблема отсутствия времени сказывается на понимании, сорри за тупость.

"Запрет доступа на саты по времени."
Отправлено Andrey Mitrofanov , 29-Янв-08 10:58 
>Спасибо, очень помог, ночное чтение манов рулит :)

Рад помочь, приятно видеть рождение понимания. :-D
>проблема отсутствия времени сказывается на понимании, сорри за тупость.

Этт не тупость, просто "более сложные" проблемы не пешаются с наскока и редактирования конфигов "на глазок". Squid, exim, .....

Успехов!


"Запрет доступа на саты по времени."
Отправлено Jss , 29-Янв-08 16:51 
>>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


"Запрет доступа на саты по времени."
Отправлено Jss , 29-Янв-08 17:24 
Все допер, спасибо.

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


"читаем по-тихоньку? начинай писать!"
Отправлено Andrey Mitrofanov , 29-Янв-08 17:29 
>Но при этом passed не может ходить по url которых нет в
>списке.
>но как сделать чтоб можно было ходить куда угодно в любое время
>но в timezp было запрещенно только \mail.ru но при этом разрешено
>www.mail.ru и win.mail.ru

acl goodmailru ....
acl badmailru ....
acl timezpmailru
#acl passed ...
http_access deny timezpmailru badmailru !goodmailru
http_access allow all

Похоже?

PS: а про passed в этом %) ТЗ ничего не было


"читаем по-тихоньку? начинай писать!"
Отправлено Jss , 29-Янв-08 17:59 
Да нет фишка именно в то что получилось, в смысле вот как хотел.
      |
      |
     \|/
      \
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 разрешен всегда и еще плюс к этому в обед можно и доп услугами майла воспользоваться, просто посчитал что закрывать все сервисы сайта перечисляя их не стоит, они могут добавляться, проще закрыть все и разрешить только то что нужно.

Отец всегда говорит.... читай МАНЫ, не надо беспокоить людей.