PavelVinogradov / sams2

Automatically exported from code.google.com/p/sams2
GNU General Public License v2.0
21 stars 20 forks source link

(Trac:399) неверное конфигурирвоание squid.conf при использовании rejik #392

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
(Trac:399) Originaly reported by dmitry a. frolov <f0s@f0s.spb.ru> on 
2009-11-18 10:09:29

Самс не верно добавляет в конфиг сквида acl-и 
при использовании связки squid + sams + rejik3 + 
авторизации по IP, в следствии чего 
пользователям одного из шаблона не выйти в 
интернет совсем (идет блокировка на уровне 
сквида)

Подробнее:

_'Дано._'

Система:

{{{
f0s@ubuntu9:/etc/squid$ uname -a
Linux ubuntu9 2.6.28-16-server #55-Ubuntu SMP Tue Oct 20 20:37:10 UTC 2009 
x86_64 GNU/Linux
}}}

Самс ставил отсюда: 
nixdev.net/release/sams/debian/lenny/sams_1.0.4-1_amd64.deb

{{{
f0s@ubuntu9:/etc/squid$ sams -V
Version SAMS-1.0.4
}}}

вот конфиг самса:

{{{
f0s@ubuntu9:/etc/squid$ cat /etc/sams.conf
[client]
SQUID_DB=squidlog
SAMS_DB=squidctrl
MYSQLHOSTNAME=localhost
MYSQLUSER=sams
MYSQLPASSWORD=passwd
MYSQLVERSION=5.1
SQUIDCACHEFILE=access.log
SQUIDROOTDIR=/etc/squid
SQUIDLOGDIR=/var/log/squid
SQUIDCACHEDIR=/var/spool/squid
SAMSPATH=/usr
SQUIDPATH=/usr/sbin
#SQUIDGUARDLOGPATH=/var/log
#SQUIDGUARDDBPATH=/etc/squid/squidGuard.conf
RECODECOMMAND=iconv -f KOI8-R -t 866 %finp > %fout
#LDAPSERVER=servername_or_ipadress
#LDAPBASEDN=your.domain
#LDAPUSER=DomainAdministrator
#LDAPUSERPASSWD=passwd
#LDAPUSERSGROUP=Users
REJIKPATH=/usr/local/rejik3
SHUTDOWNCOMMAND=shutdown -h now
CACHENUM=0
}}}

Сквид:

{{{
f0s@ubuntu9:/etc/squid$ dpkg-query -l | grep squid
ii  squid                                     2.7.STABLE3-4.1ubuntu1            
Internet object cache (WWW proxy cache)
ii  squid-common                              2.7.STABLE3-4.1ubuntu1            
Internet object cache (WWW proxy cache) - co
f0s@ubuntu9:/etc/squid$
}}}

стоит rejik3.

Что сделано в веб-интерфейсе самса:

Считать трафик: _Полный_ 
Преобразовывать DNS имена: _галка НЕ стоит_
Уровень детализации записей в журнале: _9_
Домен по умолчанию: _vici.msk.ru_
Выберите скрипт, используемый для отправки 
сообщения при отключении пользователей: 
    _NONE_
Введите адрес администратора, на который 
следует посылать сообщения  _my@email.com_

Настройка авторизации пользователя: _IP_

Настройка samsdaemon
Проверять наличие команды на 
реконфигурирование squid каждые _'1_'   секунд
Обрабатывать логи SQUID     _- отмечено галкой_
обрабатывать через _'1_'   минут
Автоматически очищать счетчики трафика 
пользователей  _- НЕ отмечено_

Путь к wbinfo:     /usr/bin
файл перенаправления запроса 
    httр://192.168.51.254/sams/icon/classic/blank.gif
Путь к каталогу, где лежат файлы запрета 
запроса httр://192.168.51.254/sams/messages 
Редиректор    _Rejik_
Включить ограничение скорости доступа 
пользователей (delaypool)  _- Отмечено галкой_
Сохранять данные о трафике в базе за 
последние 1    месяцев.
Данные сохраняются в файл и удаляются из 
базы. 

В меню пользователи созданы группы: 
администраторы, юзеры. в каждой есть 
пользователи. авторизация по IP

в графе "запрет доступа" по url, подраздел chats 
прописано vkontakte.ru

В графе "доступ разрешен" создан список, 
который назван _allowurl_, в котором 
перечислены сайты к которым разрешен 
доступ

в меню шаблоны пользователей создано два 
шаблона:
_'unlim_', _'limited_'

для шаблона _'unlim_' указано:
запрет доступа к chats
больше галок не стоит

для шаблона _'limited_' указано:
Доступ запрещен ко всем URL
и поставлена галка ниже: Доступ к URL 
разрешен: к _allowurl_

заходим на вкладку squid жмем 
реконфигурировать.

самс конфигурирует, сквид, режик. получаем.

вот такие настройки добавляет в rejik:

{{{
f0s@ubuntu9:/usr/local/rejik3$ ls -l
total 456
-rw-r--r-- 1 root  root     406 2009-11-18 08:46 4831439d52dcd.sams
-rw-r--r-- 1 proxy proxy     29 2009-11-18 08:46 483162ae0e07b.sams
drwxr-xr-x 6 proxy proxy   4096 2003-07-25 09:02 banlists
-rwxr-xr-x 1 proxy proxy  48339 2009-11-16 15:44 make-cache
-rwxr-xr-x 1 proxy proxy  53484 2009-11-16 15:44 redirector
-rw-r--r-- 1 root  root    3202 2009-11-18 08:46 redirector.bak
-rw-rw-rw- 1 proxy proxy   3202 2009-11-18 08:46 redirector.conf
-rw-r--r-- 1 proxy proxy   3082 2009-11-16 15:44 redirector.conf.dist
-rw-r--r-- 1 proxy proxy  92432 2009-11-18 08:46 redirector.err
-rw-r----- 1 proxy proxy 220618 2009-11-18 08:06 redirector.log
drwxr-xr-x 5 proxy root    4096 2009-11-18 08:46 _sams_banlists
drwxr-xr-x 2 proxy proxy   4096 2009-11-16 15:42 tools
}}}

короткой строкой по содержимому файлов:

{{{
f0s@ubuntu9:/usr/local/rejik3$ cat 4831439d52dcd.sams
192.168.51.7
192.168.51.8
192.168.51.151
192.168.51.1
}}}

это список айпи шаблона _'unlim_'

{{{
f0s@ubuntu9:/usr/local/rejik3$ cat 483162ae0e07b.sams
192.168.51.51
192.168.51.111
}}}

ну а это список айпи с шаблона _'limited_'

итак, посмотрим как сконфигурировался 
режик:

{{{
f0s@ubuntu9:/usr/local/rejik3$ cat redirector.conf
error_log /usr/local/rejik3/redirector.err
change_log /usr/local/rejik3/redirector.log
make-cache /usr/local/rejik3/make-cache
#allow_urls /usr/local/rejik3/banlists/allow_urls

<_sams_4831439d52dcd_denied>
work_ip f:/usr/local/rejik3/4831439d52dcd.sams
ban_dir /usr/local/rejik3/_sams_banlists/4831439d52dcd_denied
url 
http://192.168.51.254/sams/messages/blocked.php?action=rejikdenied&url=#URL#  
#_sams_
<_sams_483162ae0e07b_allow>
work_ip f:/usr/local/rejik3/483162ae0e07b.sams
ban_dir /usr/local/rejik3/_sams_banlists/483162ae0e07b_allow
url 
http://192.168.51.254/sams/messages/blocked.php?action=rejikdenied&url=#URL#  
#_sams_
reverse  #_sams_
}}}

здесь все идеально. все добавлено 
правильно и грамотно.

далее смотрим настройки сквид:

{{{
f0s@ubuntu9:/etc/squid$ ls -l
total 944
-rw-r--r-- 1 root root    870 2009-11-18 08:46 4831439d52dcd.sams
-rw-r--r-- 1 root root     61 2009-11-18 08:46 483162ae0e07b.sams
-rw-r--r-- 1 root root 151723 2009-11-18 08:46 squid.conf
-rw-r--r-- 1 root root 151021 2009-11-18 08:46 squid.conf.bak
}}}

опять так, здесь мы видим, что:
4831439d52dcd.sams - это список айпи адресов шаблона 
_'unlim_'

483162ae0e07b.sams - это список айпи адресов шаблона 
_'limited_'

вот собственно что добавляет самс в сквид:

{{{
f0s@ubuntu9:/etc/squid$ diff squid.conf squid.conf.bak
1d0
< # created by SAMS _sams_ 2009-11-18 8:46:28
2334,2337d2332
< acl _sams_4831439d52dcd src "/etc/squid/4831439d52dcd.sams"
< acl _sams_4831439d52dcd_time time MTWHFAS 00:00-23:59
< acl _sams_483162ae0e07b src "/etc/squid/483162ae0e07b.sams"
< acl _sams_483162ae0e07b_time time MTWHFAS 00:00-23:00
2598,2599d2592
< http_access allow _sams_4831439d52dcd  _sams_4831439d52dcd_time
< http_access allow _sams_4831439d52dcd  _sams_4831439d52dcd_time  
_sams_483162ae0e07b_time
3053,3061d3045
< delay_pools 2
< delay_class 1 2
< delay_class 2 2
< delay_access 1 allow _sams_4831439d52dcd
< delay_access 1 deny all
< delay_parameters 1 524288/524288 524288/524288
< delay_access 2 allow _sams_483162ae0e07b
< delay_access 2 deny all
< delay_parameters 2 524288/524288 524288/524288
}}}

пока опустим комментарии проверим.
берем польщователя из группы _'unlim_'. идем на 
комп с айпи 192.168.51.7 и пробуем войти в 
интернет. заходим на google.ru. Класс. все 
работает. Заходим на vkontakte.ru - видим 
сообщение типа "доступ к vkontakte.ru запрещен" и 
картинка самса (приведение перечеркнутое). 
Как мы можем догадаться, это сработал 
запрет доступа к chats для группы _'unlim_'

вроде все работает. но тут рано радоваться. 
берем комп из группы _'limited_'. пусь это будет 
192.168.51.111
пробуем войти в инет (по задумке нас должно 
пускать только на те сайты, которы 
перечислены в _allowurls_). Вводим сайт из списка 
_allowurls_. Это yandex.ru. Ага. Что мы видим на 
экране. Сквидовское сообщение:

{{{
ERROR
The requested URL could not be retrieved

While trying to retrieve the URL: httр://yandex.ru/

The following error was encountered:

    * Access Denied.

      Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.
}}}

то есть это значит, что запрет произошел 
еще на стадии сквида (до редиректора с 
самсом еще дело не дошло). 

Попробуем разобраться в чем же дело. идем 
обратно в сквид конфиг, который для нас 
смастерил самс. внимательно смотрим acl (я 
буду для наглядности комментировать здесь 
конфиг с помощью знака #). Итак:

{{{
acl _sams_4831439d52dcd src "/etc/squid/4831439d52dcd.sams"
acl _sams_4831439d52dcd_time time MTWHFAS 00:00-23:59
# это задается acl для шаблона unlim 
(соответсвенно в файле перечислены 
IP-адреса тех, кому можно в инет на все сайты, 
кроме сайтов из запрещенной группы chats)

acl _sams_483162ae0e07b src "/etc/squid/483162ae0e07b.sams"
acl _sams_483162ae0e07b_time time MTWHFAS 00:00-23:00
# это задается acl для шаблона limited (в файле 
перечислены IP-адреса тех, кому можно в инет 
только по заданным адресам)

[..skip..]

http_access allow _sams_4831439d52dcd  _sams_4831439d52dcd_time
# видим разрешение для выхода в инет 
шаблону unlim в заданное в самсе время

http_access allow _sams_4831439d52dcd  _sams_4831439d52dcd_time  
_sams_483162ae0e07b_time
# видим опять-так разрешение для выхода в 
инет того же шаблона unlim в заданное время + 
указано время для шаблона limited! (и никакого 
упоминая о шаблоне limited!)

http_access deny all
# ну а это обычно дефолтовое правило сквида.
}}}

как мы видим, в сквид не добавляется http_access 
для шаблона _'Limited_', поэтому польщзователи 
из этой группы сразу попадают на дефолтвое 
сквидовское http_access deny all, и поэтому они 
видят сквидовское сообщение о том, что 
доступ запрещен.

Давайте теперь зайдем на редактирование в 
конфиг сквида. и исправим acl с того что нам 
создал самс:

{{{
http_access allow _sams_4831439d52dcd  _sams_4831439d52dcd_time
http_access allow _sams_4831439d52dcd  _sams_4831439d52dcd_time  
_sams_483162ae0e07b_time
}}}

на следующие:

{{{
http_access allow _sams_4831439d52dcd  _sams_4831439d52dcd_time
http_access allow _sams_483162ae0e07b  _sams_483162ae0e07b_time
}}}

сохраняемся, делаем squid -k reconfigure

Ура товарищи. теперь народ из шаблона 
_'limited_' ходит только по сайтам из _allowurls_, на 
остальные выдается самсовское сообщение с 
перечеркнутым приведением о том, что 
доступ запрещен.

Но каждый раз при изменение чего либа в 
самсе (после запуска оттуда 
рекофигруирования сквида), он возвращает 
все в зад неправильно.. как-то можно это 
вылечить?

Original issue reported on code.google.com by bl...@nixdev.net on 5 Jun 2011 at 8:06

GoogleCodeExporter commented 9 years ago
Commented by blaze@nixdev.net on 2009-12-23 23:55:05:

Огромное спасибо за баг репорт. Очень 
подробное и качественное описание 
проблемы.
Проблему воспроизвести удалось, очень 
надеюсь что сможем решить её до выпуска 
версии 1.0.5

Original comment by bl...@nixdev.net on 5 Jun 2011 at 8:06

GoogleCodeExporter commented 9 years ago
Commented by blaze@nixdev.net on 2010-01-18 15:41:20:

Столкнулся с такой же проблемой. 
FreeBSD7.2+squid-2.7.6+rejik-3.2.1+sams-1.0.5.
В ожидании sams-1.1.0 пришлось подставить 
костыль:

1. Создаем скриптик

{{{
#!/usr/local/bin/bash
CONF="/usr/local/etc/squid/squid.conf"
OUT="/tmp/squid.conf"

sed -n '1,/TAG: http_access/p' $CONF > $OUT
grep _sams_ $CONF | grep http_access | awk '{FS=" 
";OFS="";split($NF,a,"_");print($1," ",$2," _",a[2],"_",a[3]," ",$NF)}' >> $OUT
sed -n '/##ENDOFTAG/,$p' $CONF >> $OUT
cp -p $OUT $CONF
}}}

2. Добавляем в squid.conf сроку "##ENDOFTAG" сразу 
после строк
"http_access allow _sams_4831439d52dcd  _sams_4831439d52dcd_time  
_sams_483162ae0e07b_time"
и перед "Allowing or Denying access"

3. Добавляем запуск этого скрипта в демон 
самса. Для этого в исходнике samsdaemon.c правим 
строку 3003 (в моем случае скрипт лежит по 
адресу /usr/local/etc/squid/reconf.sh):

{{{
sprintf(&str[0],"/usr/local/etc/squid/reconf.sh && %s/squid -f %s/squid.conf -k 
reconfigure",conf.squidpath,conf.squidrootdir);
}}}

4. Собираем новый samsdaemon, кладем его вместо 
оригинального.

5. На всякий случай сохраняем последнюю 
редакцию squid.conf в безопасном месте и 
запускаем демон самса. Теперь пробуем 
сделать реконфигурацию через 
вэб-интерфейс и визуально проверяем 
правильность конфига.

Существуют более элегантные решения, но я 
ничего другого не придумал. Такие 
изменения помогают только в описанной выше 
ситуации.

Original comment by bl...@nixdev.net on 5 Jun 2011 at 8:06

GoogleCodeExporter commented 9 years ago
Commented by blaze@nixdev.net on 2010-09-06 10:45:49:

Milestone sams-1.1.0 deleted

Original comment by bl...@nixdev.net on 5 Jun 2011 at 8:06

GoogleCodeExporter commented 9 years ago
Commented by blaze@nixdev.net on 2011-02-28 16:51:07:

Система FreeBSD7.2+squid-2.7.6+rejik-3.2.5+sams-1.1.0[[BR]]
оказалось что в версии 1.1.0 эта проблема 
осталась, решил ее вот так. [[BR]]
В файле samsdaemon.c строке 988 поменял
{{{
printf("%d users found in the template %s (%s), create access 
rights\n",count,row[0],row[1]);

               if(count>0)
                 {
                   acount=atoi(row[14]);
                   if(acount>0)
             {
                       if(RSQUID==1||RNONE==1)
                 {
               sprintf(&outstr[0],"http_access deny _sams_%s ",row[0]);
                 }  
== Эту строку меняем ==> if(RSAMS==1||RGUARD==1)
                 {
               sprintf(&outstr[0],"http_access allow _sams_%s ",row[0]);
             }  
             }
}}}
на 
{{{
 if(RSAMS==1||RGUARD==1||RREJIK==1)
}}}
два дня полет нормальный :)[[BR]]
Может кому пригодится.

Original comment by bl...@nixdev.net on 5 Jun 2011 at 8:06

GoogleCodeExporter commented 9 years ago
 Close all sams-1.0.x deprecated bugs.
This bugs not fixed, but we no longer provide support for 1.0.x tree.

Original comment by bl...@nixdev.net on 10 Jun 2011 at 10:06