четверг, 29 января 2015 г.

Установка SAMS2 на FreeBSD 10.1, Squid 3.4 с NTLM авторизацией

Всё уже поставлено и работает на тестовом сервере, сейчас буду ставить на боевой сервер и, на всякий случай, задокументирую, что делалось, ибо не всё гладко прошло и пришлось править некоторые исходники SAMS'а...



буду ставить всё из портов, кроме sams'а :)

ставим samba:

# cd /usr/ports/net/samba41/
# make config-recursive
# make install clean

ставим squid:

# cd /usr/ports/www/squid
# make config-recursive
включим DELAY_POOLS, чтоб можно было регулировать полосу пропускания.
# make install clean

ставим php:
# /usr/ports/lang/php5
# make config-recursive
# make install clean

# /usr/ports/lang/php5-extensions
# make config
включим GD,LDAP,MYSQL,ZLIB
# make -DBATCH install clean

конфигурируем php:
# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
в php.ini добавим строку
date.timezone = Europe/Moscow
где нибудь после [date].

ставим apache:

# cd /usr/ports/www/apache24
# make config-recursive
# make install clean

# cd /usr/ports/www/mod_php5
# make config
# make install clean

ставим mysql:

# cd /usr/ports/databases/mysql56-server
# make install clean

создадим конфиг для mysql в файле /usr/local/etc/my.cnf
[mysqld]

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

character-set-server=utf8
collation-server=utf8_general_ci
thread_concurrency = 8

query_cache_limit = 2M
query_cache_size = 16M

конфиг для samba в файле /usr/local/etc/smb4.conf:
[global]
workgroup = DOMAIN_NAME
server string = Proxy Server
security = ads
hosts allow = 192.168. 127.
load printers = no
log file = /var/log/samba4/log.%m
max log size = 50

realm = DOMAIN_NAME.LOCAL
domain master = no
preferred master = no
dns proxy = no

winbind separator = /
winbind use default domain = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes

winbind refresh tickets = yes
winbind offline logon = true
winbind cache time = 600

конфиг /usr/local/etc/squid/squid.conf
auth_param ntlm program /usr/local/bin/ntlm_auth --diagnostics --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 20

auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
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

acl authusers proxy_auth REQUIRED
http_access allow authusers

http_port 3128

coredump_dir /var/squid/cache

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

# TAG: acl

# TAG: url_rewrite_access

# TAG: url_rewrite_program

# TAG: url_rewrite_children

# TAG: delay_pools

# TAG: delay_class

# TAG: delay_access


# TAG: delay_parameters

# TAG: http_access

# TAG: http_access2

# TAG: icp_access

#
http_access deny all



в /etc/rc.conf дописываем
samba_server_enable="YES"
squid_enable="YES"
mysql_enable="YES"
apache24_enable="YES"
samsd_enable="YES"

включимся в домен:
# net join -U Administrator
запустим самбу:
# /usr/local/etc/rc.d/samba_server start
проверим:
 # wbinfo -p
Ping to winbindd succeeded
# wbinfo -t
checking the trust secret for domain DOMAIN via RPC calls succeeded
# wbinfo -u
<список пользователей>

чтоб у squid был доступ к winbind и NTLM работало:
# pw group add winbind_priv
# pw user mod squid -G winbind_priv
# chown -R :winbind_priv /var/db/samba4/winbindd_privileged/

# /usr/local/etc/rc.d/squid start

должно уже работать и пускать всех доменных пользователей

ставим sams:

# cd ~
# svnlite checkout http://sams2.googlecode.com/svn/trunk/ sams2-read-only
в  ~/sams2-read-only/php/lang/lang.EN были юникодные пробелы "e2 a0". заменим:
# cp ~/sams2-read-only/php/lang/lang.EN ~/sams2-read-only/php/lang/lang.EN.bak && sed "s/`printf '\302\240'`/ /g" ~/sams2-read-only/php/lang/lang.EN.bak >~/sams2-read-only/php/lang/lang.EN
т.к. в squid 3.4 поменялся формат ответа редиректора, а в текущей версии sams - старый. надо дописать свой... samsredir2.cpp в ~/sams2-read-only/src
и поправить ~/sams2-read-only/src/Makefile.am
добавляем в конец строки sams2redir2
bin_PROGRAMS = samsparser sams2daemon sams2redir sams2redir2
и
sams2redir2_SOURCES = \
        dbconn.cpp dbquery.cpp debug.cpp ip.cpp localnetworks.cpp \
        logger.cpp mysqlconn.cpp mysqlquery.cpp odbcconn.cpp odbcquery.cpp \
        processmanager.cpp proxy.cpp samsconfig.cpp samsuser.cpp samsuserlist.cpp template.cpp \
        templatelist.cpp tools.cpp url.cpp samsredir2.cpp grouplist.cpp net.cpp pgconn.cpp \
        pgquery.cpp urlgrouplist.cpp urlgroup.cpp timerangelist.cpp timerange.cpp dns.cpp userlist.cpp \
        samsldap.cpp

собираем:
# cd ~/sams2-read-only
# make -f Makefile.cvs
sh ./configure
# make
# make install

создадим новый файл /usr/local/etc/rc.d/sams
#!/bin/sh

. /etc/rc.subr

name="samsd"
rcvar=`set_rcvar samsd`
command="/usr/local/bin/sams2daemon"

load_rc_config $name
command_args="${samsd_server_flags}"
sig_stop="USR1"

run_rc_command "$1"

правим конфиг /usr/local/etc/sams2.conf (изменения):
DB_USER=sams
DB_PASSWORD=samspassword
SQUIDROOTDIR=/usr/local/etc/squid
SQUIDCACHEDIR=/var/squid/cache

SQUIDPATH=/usr/local/sbin
SHUTDOWNCOMMAND=echo 'why?'


с правами на запуск:
chmod 0555 /usr/local/etc/rc.d/sams

Запустим mysql:
# /usr/local/etc/rc.d/mysql-server start
сменим пароль рута с пустого, на нормальный
# mysqladmin password
# mysql -uroot -p
mysql> create schema sams2db;
mysql> grant all privileges on sams2db.* to sams@localhost identified by 'samspassword';
mysql> flush privileges;
mysql> exit


Настроим apache:
# echo "AddType application/x-httpd-php .php" >/usr/local/etc/apache24/Includes/php.conf

меняем в httpd.conf
<Directory />
    AllowOverride none
    Require all denied
</Directory>
на
<Directory />
    Options FollowSymLinks Indexes
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
Alias /sams2/doc /usr/local/share/doc/sams2-2.0.0
Alias /sams2 /usr/local/share/sams2

запускаем apache, sams:
# /usr/local/etc/rc.d/apache24 start
# /usr/local/etc/rc.d/sams start

в браузере через http://proxy/sams2/setup.php установим базу, пользователя создавать не нужно т.к. мы его уже создали...
далее настраиваем всё через
http://proxy/sams2/index.php
логин admin
пароль qwerty
пароль лучше сразу сменить...

SAMS/Авторизация
Активируем Active Directory, настраиваем,
Протестируем подключение

SAMS/SQUID/Proxy server
Домен по умолчанию ставим свой,
Настройка авторизации пользователя - adld
Автоматически очищать счётчики трафика пользователей - включаем.
файл перенаправления запроса - ставим свой IP вместо your.ip.address
Путь к каталогу, где лежат файлы запрета запроса - ставим свой IP вместо your.ip.address
Редиректор - встроенный SAMS
delaypool включаем
Сохранять данные о трафике в базе за последние - 1 месяц хватит.

создаём:
Шаблоны пользователей
Пулы ограничения скорости
Группы пользователей
предустановленные лучше удалить...

в /etc/crontab добавим
*/10    *       *       *       *       root    cd /usr/local/share/sams2; /usr/local/bin/php bin/syncfromad

пользователи добавятся, но в squid.conf они появятся только после реконфигурирования SQUID'а... надо syncfromad поправить, чтоб это делалось автоматом

после очередной реконфигурации SQUID в squid.conf должны быть подобные строчки:

# TAG: acl
acl Sams2Time1 time MTWHFAS 23:00-23:59
acl Sams2Template2 proxy_auth Administrator
acl Sams2Template2 proxy_auth User

# TAG: url_rewrite_access
acl Sams2Proxy dst 192.168.4.62
url_rewrite_access deny Sams2Proxy

# TAG: url_rewrite_program
url_rewrite_program /usr/local/bin/sams2redir

# TAG: url_rewrite_children
url_rewrite_children 5


Меняем там sams2redir на sams2redir2
удаляем строчки
acl authusers proxy_auth REQUIRED
http_access allow authusers
http_access deny all
и перезапускаем squid.
# killall -u squid && /usr/local/etc/rc.d/squid restart

Пока всё.

63 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. Добрый день, подскажите пожалуйста, какие настройки ipfw нужны в данной конфигурации

    ОтветитьУдалить
  3. Да и откуда можно взять "samsredir2.cpp"

    ОтветитьУдалить
  4. если используете IPFW, то 3128 надо открыть, конечно.
    а прозрачный прокси делать не стал, т.к. там не ясно как авторизовывать пользователей.

    ОтветитьУдалить
  5. samsredir2.cpp протестировать надо. выяснилось что он в какой-то момент начинает 100% проц. жрать.

    ОтветитьУдалить
  6. Юрий спасибо за ответ, разобрался, появилось такая проблемка при старте samsd:

    samsdaemon[17940]: ***ERROR: mysqlquery.cpp:78 [0x80281d680->sendQueryDirect] Table 'sams2db.proxy' doesn't exist

    Случаем не сталкивались с такой проблемой?

    ОтветитьУдалить
    Ответы
    1. такого не было.
      http://proxy/sams2/setup.php
      установка прошла нормально?
      эта установка все таблицы должна создать.

      Удалить
    2. Как то странно, samsd не поднимается, говорит что не могу создать таблицу, хотя конфиги перепроверял и даже вместо пользователя sams, рутового ставил, видимо проблема именно с sams2daemon.

      Удалить
    3. sams2daemon, в принципе, для setup'а не нужен.
      или setup сработал и таблица создалась?

      Удалить
    4. Не сработал, при переходе на страницу http://proxy/sams2/setup.php выходит 404 ошибка, видимо потому что sams не поднимаеться.

      Удалить
    5. 100% должно без SAMSа открываться

      Удалить
    6. Спасибо большое, разобрался, кстати как получилось у вас на боевой сервер накатить?

      Удалить
    7. Пока в тестовом режиме работает.
      samsredir2.cpp обновил. размер буфера только изменился...

      Удалить
    8. у меня тоже при старте samsd проблема:

      Starting samsd.
      samsdaemon[1065]: ***ERROR: mysqlquery.cpp:78 [0x2900e600->sendQueryDirect] Table 'sams2db.proxy' doesn't exist
      samsdaemon[1065]: ***ERROR: mysqlquery.cpp:78 [0x2900e600->sendQueryDirect] Table 'sams2db.proxy' doesn't exist
      /usr/local/etc/rc.d/sams: WARNING: failed to start samsd

      а при создании БД
      Access denied for user 'sams'@'0100-252SRV.etm.corp' (using password: YES)

      помогите плиз.

      Удалить
    9. Пользователя sams и базу sams2db создавали?

      # mysql -uroot -p
      mysql> create schema sams2db;
      mysql> grant all privileges on sams2db.* to sams@localhost identified by 'samspassword';
      mysql> flush privileges;
      mysql> exit

      Удалить
    10. Этот комментарий был удален автором.

      Удалить
    11. sams пытается зайти с хоста '0100-252SRV.etm.corp'. Почему не localhost определяется? В параметрах соединения к базе адрес сервера localhost указан?
      или пользователя для этого хоста создайте:
      mysql> grant all privileges on sams2db.* to sams@'0100-252SRV.etm.corp' identified by 'samspassword';

      Удалить
    12. Зайди сначала в на http://твойайпи/sams/setup.php и выполни все задачи, которые там будут. Потом запустишь самс на серваке)

      Удалить
  7. Предварительная версия:
    https://sites.google.com/site/grayfort2/samsredir2.cpp

    ОтветитьУдалить
  8. Здравствуйте

    У меня Freebsd 9.3 на момент make -f Makefile.cvs у меня вылетает ошибка

    [root@mail ~/sams2-read-only]# make -f Makefile.cvs
    aclocal
    aclocal-1.15: warning: autoconf input should be named 'configure.ac', not 'configure.in'
    echo "" >> aclocal.m4
    echo "m4_include([m4/acinclude.m4])" >> aclocal.m4
    autoheader
    libtoolize --copy --force
    libtoolize: No such file or directory
    *** [all] Error code 1

    заранее благодарен за помощь

    ОтветитьУдалить
    Ответы
    1. libtool не хватает, видимо

      #cd /usr/ports/devel/libtool && make install clean

      Удалить
  9. Спасибо вроде запустилось

    Но вот теперь в момент проверки, говорит что safe_mode в режиме off
    Но на момент Установки базы данных

    Warning: mysql_query() expects parameter 2 to be resource, boolean given in /usr/local/share/sams2/dbclass.php on line 174
    Invalid query: Access denied for user 'www'@'localhost' (using password: NO)

    ОтветитьУдалить
    Ответы
    1. safe_mode в новых версиях PHP нет:
      https://php.net/manual/ru/features.safe-mode.php

      по ошибке mysql:
      /usr/local/etc/sams2.conf заполнен корректно?

      Удалить
    2. Вроде настроено все как у Вас
      Пробовал ставить даже пользователя root (MySQL)

      Удалить
  10. Юрий, работает ли сейчас на боевом сервере описанный выше метод?

    У меня есть связка squid 3.1 + sams2 (centos 6.6), постоянно имею вылет редиректора:
    WARNING: redirector #24 (FD 55) exited
    а чуть реже имею вылет самого сквида:
    assertion failed: AclProxyAuth.cc:229: "authenticateUserAuthenticated(Filled(checklist)->auth_user_request)"

    Вылет скивда - это баг 2887, пофиксили в версии 3.2, но так же с этой версии внесли и другие изменения, в виду которых, редиректор самса работает не корректно. Предположительно, Ваш вариант с samsredir2.cpp поможет решить обе проблемы. Отсюда вопрос: рабочая ли это версия, или дальше тестового сервера не пошло?

    ОтветитьУдалить
    Ответы
    1. в redirector2 я только возврат результата по новому формату сделал. он, похоже, с 3.4 поменялся только.
      еще размер буфера увеличил:
      попробуйте поменять в redirector.cpp
      char line[2048];
      на
      char line[65535];

      2 кбайт - определённо не достаточно. в моём сообщениее от 5 февраля 2015 г., 19:12. проц 100% жрало именно из-за этого

      Удалить
    2. Да, я тоже грешил на char line[2048]; поэтому и думал, что решу сразу две проблемы.
      Вчера собрал виртуалку с redirector2, завернул на нее клиентов (онлайн ~150чел), через 3 часа понял, что придется отказаться от sams2 - своими силами я его поддерживать не могу, а совместимости с актуальным сквидом все меньше. В логах я постоянно вижу такое:
      +++WARNING: Unknown cache result TCP_MISS_ABORTED
      ***ERROR: squidlogparser.cpp:445 Unknown cache result
      +++WARNING: Unknown cache result TAG_NONE_ABORTED
      ***ERROR: squidlogparser.cpp:445 Unknown cache result
      а вот вместе с этим падает и сквид:
      ***ERROR: mysqlquery.cpp:78 [0x1f38270->sendQueryDirect] Lost connection to MySQL server during query
      В этот момент доступ в базу есть, база соит на отдельной виртуалке, которая еще и база для заббикса, а он в этот момент исправно работает.
      Попробую еще связку squid 3.2 + sams2, заменив char line[65535], если и это будет падать, тогда уж точно выкину sams2 нах@й, и буду по старинке править конфиг сквида руками.

      Удалить
    3. Напишу свой результат, может, кому-то будет полезен. И так, как я писал ранее, использую centos 6.6, с актуальной на сейчас версией squid 3.1.10 с базового репозитория (авторизация ncsa). SAMS2 собирал из исходников, заменив в redirector.cpp в строке char line[2048]; значение 2048 на 65535.
      Использование директиву reply_body_max_size (ограничение размера загружаемого файла) у меня приводило к переодическому вылету сквида с ошибкой:
      assertion failed: AclProxyAuth.cc:229: "authenticateUserAuthenticated(Filled(checklist)->auth_user_request)"
      Баг был исправлен в версии 3.2, я же просто отказался от этого параметра.
      Итого. Вот уже пару дней имею стабильный полет такой конфигурации. Периодически sams сообщает "+++WARNING: Unknown cache result NONE" и "***ERROR: squidlogline.cpp:227 Input string has less then 10 fields (7)", но на работе sams'а не сказывается. И в cache.log сквида имею "URL too large", "Invalid Request" и один раз поймал "tunnelstatedata::connection::error: fd 372: read/write failure: (32) broken pipe". Опять же, на работе не сказывается.

      PS. Сервер на базе процессора Phenom II X6 1045T, 2G ram. Ничего не кешируя (cache deny all), имею минимальную загрузку цпу (load average: 0.01, 0.01, 0.00) и 500мб потребляемой памяти при 150 пользователях онлайн (до 2,5к запросов в пике), которые генерят трафика от 10 до 50 мбит/с.

      Удалить
  11. Здравствуйте
    sams после реконфигурации не добавляет свои параметры в squid.conf

    делаю так: завожу пользователя, делаю его активным
    тест NTLM подключения проходит успешно (в samse выводится список пользователей AD)
    SQUID - Proxy server - Реконфигурировать Squid
    squid -k reconfigure
    команды отрабатывают успешно
    тэги остаются пустыми
    в чем может быть проблема?

    ОтветитьУдалить
    Ответы
    1. запустите daemon в debug режиме:
      # sams2daemon -v -d 9 -l console
      должно быть видно, что не так...

      Удалить
  12. redirector.cpp где находиться?
    так и не нашел его.

    ОтветитьУдалить
    Ответы
    1. Этот комментарий был удален автором.

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
    3. Связка squid 3.4 и sams2 у меня не работала - sams не писал изменения ни в squid.conf ни в ncsa.sams. Откатился на ssquid 3.3 - тогда всё завелось кроме редиректа - в cache.log вылезла ошибка 2015/07/02 09:45:56 kid1| ERROR: URL-rewrite produces invalid request: GET OK HTTP1.1 - как выяснилось позже эта ошибка при работе sams2redir2 - если оставить sams2redir в url_rewrite то редиректы отрабатывют нормально.

      Удалить
  13. Этот комментарий был удален автором.

    ОтветитьУдалить
  14. Этот комментарий был удален автором.

    ОтветитьУдалить
  15. Авто, надеюсь меня услышишь. Такая проблема, поставил, все работает, но есть пользователи, их немного, которых sams в упор не видит. HELP. Почему такое может происходить. У меня в AD 1000 челов, sams не видит человек 10, НО, в это количество входит директор. Учетки в AD все идентичны. Почему такое может происходить?

    ОтветитьУдалить
  16. Я так и не понял как решить проблему
    root@sams2:/etc # /usr/local/etc/rc.d/sams2 start
    Starting sams2.
    samsdaemon[1718]: ***ERROR: mysqlquery.cpp:78 [0x2900e600->sendQueryDirect] Table 'sams2db.proxy' doesn't exist
    samsdaemon[1718]: ***ERROR: mysqlquery.cpp:78 [0x2900e600->sendQueryDirect] Table 'sams2db.proxy' doesn't exist
    /usr/local/etc/rc.d/sams2: WARNING: failed to start sams2

    ОтветитьУдалить
    Ответы
    1. Зайди сначала в на http://твойайпи/sams/setup.php и выполни все задачи, которые там будут. Потом запустишь самс на серваке)

      Удалить
  17. К msql коннект проходит под sams2(пользователь) show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | sams2db |
    | test

    ОтветитьУдалить
    Ответы
    1. Зайди сначала в на http://твойайпи/sams/setup.php и выполни все задачи, которые там будут. Потом запустишь самс на серваке)

      Удалить
  18. Этот комментарий был удален автором.

    ОтветитьУдалить
  19. Настроил всё по инструкции.
    Ось FreeBSD.
    После реконфигурации SQUID-a через SAMS.
    Нет строки, содержащей аторизацию через ад...
    Строки sams2redir нет в принципе в Squid.conf
    Меняем там sams2redir на sams2redir2
    удаляем строчки
    Нету ничего подобного:
    acl authusers proxy_auth REQUIRED
    http_access allow authusers
    http_access deny all
    и перезапускаем squid.

    ОтветитьУдалить
    Ответы
    1. Этот комментарий был удален автором.

      Удалить
    2. У меня там следующие >>>>
      # TAG: acl
      acl Sams2Time1 time MTWHFAS 23:00-23:59
      acl Sams2Template2 proxy_auth ADM.LOCAL+

      # TAG: url_rewrite_access
      acl Sams2Proxy dst 192.168.5.216
      url_rewrite_access deny Sams2Proxy

      # TAG: url_rewrite_program
      url_rewrite_program /usr/local/bin/sams2redir
      # TAG: url_rewrite_children
      url_rewrite_children 5

      # TAG: delay_pools
      delay_pools 0

      # TAG: delay_class

      # TAG: delay_access


      # TAG: delay_parameters

      # TAG: http_access
      # Setup Sams2 HTTP Access here
      http_access allow Sams2Template2

      # TAG: http_access2

      # TAG: icp_access

      #
      http_access deny all

      Удалить
  20. у меня проблема, # wbinfo -u список пользователей видит на вебе тоже,(тест проходит) но при добавлении пользователя нового в самс нет выбора из АД учеток *( не пойму пока в связи с чем это...

    ОтветитьУдалить
  21. Получается импорт пользователей из Домена не работает ошибку выдает ImportFromAD
    Invalid query

    ОтветитьУдалить
  22. безумно благодарен что отозвались *(

    ОтветитьУдалить
  23. root@sams:~/sams2-read-only # make
    Making all in src
    make all-am
    make[2]: don't know how to make samsredir2.cpp. Stop

    make[2]: stopped in /root/sams2-read-only/src
    *** Error code 2

    Stop.
    make[1]: stopped in /root/sams2-read-only/src
    *** Error code 1

    Stop.
    make: stopped in /root/sams2-read-only
    Поправил в ~/sams2-read-only/src/Makefile.am как описано... в итоге это *(

    ОтветитьУдалить
  24. Всё прекрасно работает. Одно Но! Не логирует самс ничего. Нет никакой статистики... В закладке SQUID-PROXY - лог файл не пустой, а в закладке SQUID 2 лог файла и оба пустые. Есть предположения в чём проблема?

    ОтветитьУдалить
  25. 440831120 моя аська Андрей добався )

    ОтветитьУдалить
    Ответы
    1. У меня нет аськи... Может скайп? s_ki_t мой)

      Удалить
  26. Приветствую всех.
    Вопрос по редиректору: у кого работает метод подстановки ? Создаю список подстановки, ставлю галочку в шаблоне использовать этот список, нажимаю сохранить. Открываю шаблон - галочка отсутствует. Пытался вручную добавить в базу через phpmyadmin - не работает ...

    ОтветитьУдалить
  27. samsredir2.cpp Где можно скачать. Выложите плыз.

    ОтветитьУдалить
  28. Добрый день , можно ли еще раз выложить файл переписанного редиректора . Так-как выше выложенная ссылка не работает.

    ОтветитьУдалить