Установка SAMS с NCSA и IP авторизацией на FreeBSD из портов

Дек 6, 2009 FreeBSD

Что такое SAMS, его возможности и принцип работы хорошо описаны здесь — http://www.permlug.org/wiki/sams. К сожалению в свое время я не нашел хорошей пошаговой инструкции по установке SAMS из портов в системе FreeBSD, поэтому написал собственную шпаргалку. Надеюсь, она поможет начинающим обойти те подводные камни, которые попались мне.

Установка проводилась на FreeBSD 6.3, на момент установки в системе присутствовали следующие пакеты:

mysql-5.0.51a
php5-5.2.6
apache-2.2.9
samba-3.0.31_1

Связка Apache2 + PHP + MySQL без проблем работала (о её установке читайте в предыдущих заметках), оставалось поставить из портов последние доступные версии squid-2.7.5 и sams-1.0.3.

Ставим squid, обязательно выбираем опцию — Enable delay pools:

# cd /usr/ports/www/squid

# make install clean

В /usr/local/etc/squid/squid.conf включаем ncsa авторизацию (это важный пункт, т.к. SAMS этого сам не сделает). Раскомментируем и подправим следующие строчки:

auth_param basic program /usr/local/libexec/squid/ncsa_auth /usr/local/etc/squid/ncsa.sams
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

Создаем файл ncsa.sams. По идее SAMS сделает его самостоятельно, но нам сейчас нужно, чтобы Squid запустился еще до SAMS с целью тестирования его работы.

# touch /usr/local/etc/squid/ncsa.sams

Запускаем Squid:

# rehash
# squid -z
# /usr/local/etc/rc.d/squid start

Проверяем работу Squid. Должно показаться что-то вроде:

# ps -ax | grep squid
18859 ?? Is 0:00.00 /usr/local/sbin/squid -D
18861 ?? S 0:00.18 (squid) -D (squid)
18862 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
18863 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
18864 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
18865 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
18866 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)

Приступаем к установке SAMS из портов. При конфигурации выбираем поддержку Apache 2 (у меня он и стоит):

# cd /usr/ports/www/sams
# make config
# make
# make install
# cp /usr/local/etc/sams.conf.sample /usr/local/etc/sams.conf
# make setup

Здесь нужно будет ввести пароль  пользователя root  в MySQL, согласиться на создание баз данных и пользователя sams и назначить ему пароль.

# make clean

После завершения инсталяции следуем выданным инструкциям. В конфиг Apache добавляем:

Alias /sams/ «/usr/local/share/sams/»
<Directory «/usr/local/share/sams/»>
AllowOverride AuthConfig
Options Indexes MultiViews
Order allow,deny
Allow from all
</Directory>

В файл /etc/rc.conf добавим:

sams_enable=”YES”
squid_enable=”YES”

Прописываем правильные пути в файле /usr/local/etc/sams.conf. Мой файл выглядит так:

[client]
SQUID_DB=squidlog
SAMS_DB=squidctrl
MYSQLHOSTNAME=localhost
MYSQLUSER=sams
MYSQLPASSWORD=samspasswd
MYSQLVERSION=5.0
SQUIDCACHEFILE=access.log
SQUIDROOTDIR=/usr/local/etc/squid
SQUIDLOGDIR=/usr/local/squid/logs
SQUIDCACHEDIR=/var/spool/squid
SAMSPATH=/usr/local
SQUIDPATH=/usr/local/sbin
SQUIDGUARDLOGPATH=/var/log
SQUIDGUARDDBPATH=/var/db/squidGuard
RECODECOMMAND=/usr/local/bin/iconv -f KOI8-R -t 866 %finp > %fout
LDAPSERVER=servername_or_ipadress
LDAPBASEDN=your.domain
LDAPUSER=DomainAdministrator
LDAPUSERPASSWD=passwd
LDAPUSERSGROUP=Users
REJIKPATH=/usr/local/rejik
SHUTDOWNCOMMAND=/sbin/shutdown -h now
CACHENUM=0
MYSQLUSER=sams
MYSQLPASSWORD=123456
MYSQLHOSTNAME=localhost

Запускаем sams:

# samsdaemon

Проверяем запустилось ли всё что нужно:

# ps -ax | grep sams
25865 ?? I 0:00.00 /usr/local/bin/samsf
25868 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
25869 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
25870 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
25871 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
25872 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
22678 p0- S 0:13.77 samsdaemon
26153 p0 R+ 0:00.00 grep sams

Заходим в веб-интерфейс SAMS — http://ip_server/sams/ по умолчанию пользователь admin, пароль qwerty.
SAMS -> SAMS administration -> SAMS settings выбираем NCSA авторизацию, ставим галочку на «Insert SQUID logs in database». Записывам настройки.

ВАЖНО!!! Обязательно изменить в «templates» тип авторизации на NCSA (по умолчанию стоит по IP). Если не сделать этого, то в консоли будет вываливаться сообщение о пуcтом файле default.sams.
Добавляем новых пользователей. Делаем переконфигурирование — SAMS -> SQUID -> SQUID reconfiguration -> Reconfigurate

Идем в браузер, прописываем настройки прокси и пробуем выйти в Интернет. Если всё настроено правильно, то должно появится окно авторизации, вводим логин и пароль ранее добавленного пользователя и выходим на бескрайние просторы Интернета.

Теперь, когда настроена авторизация по логину/паролю, можно без труда настроить авторизацию по IP адресу. Для этого нужно создать дополнительный шаблон и указать в нём тип авторизации «IP», затем добавляем новых пользователей указав в их профиле новый шаблон, а также IP адрес с которого должен работать пользователь, пароль указывать не нужно, но в браузере всё так же требуется прописать настройки прокси-сервера.

Решение разных проблем

Спустя некоторое время после использования SAMS выяснилось, что периодически падает демон samsf отвечающий за непрерывную обработку логов Squid. Оказалось, что разработчики более не поддерживают его и рекомендуется использовать опцию «Discret parser» SAMS -> SAMS administration -> SAMS settings. Периодичность я поставил 1 минуту. После этого всё нормализовалось.

Если при реконфигурировании SAMS новые пользователи не добавляются в ncsa.sams то можно попробовать убить процессы samsdaemon и samsf и запустить samsdaemon заново.

Другой частый вариант при первых запусках SAMS — не стартует squid или ругается на несуществующий процесс. В этом случае нужно в ручную создать файл /usr/local/etc/squid/ncsa.sams (даже если вы его создавали в начале установки, то при реконфигурировании SAMS он скорей всего был удален), затем в папке /usr/local/squid/logs удаляем файл squid.pid (иногда также помогает удаление |access.log) после этого лучше перезагрузиться.

Ещё один нюанс настройки SAMS — при перезапуске сервера SAMS норовит стартовать раньше MySQL, в результате чего он не может открыть нужные таблицы. Есть несколько способов это устранить, один из них дополнить в файле /usr/local/etc/rc.d/sams строчку:

# REQUIRE: LOGIN cleanvar

до

# REQUIRE: LOGIN cleanvar mysql

Другой вариант — убрать из /etc/rc.conf строчку sams_enable=”YES” и прописать в crontab строчку:

@reboot /usr/local/etc/rc.d/sams start
Перезагружаем сервер, смотрим работу SAMS, если всё нормально, то на этом настройку можно считать завершенной.

Следует иметь в виду, что в SAMS есть масса других подводных камней, которые могут проявиться при попытке настроить авторизацию по NTLM и т.д. Есть также вероятность, что в один не очень хороший день SAMS может упасть без видимой причины. В этих случаях я советую искать ответы на форуме http://www.permlug.org/forum/sams/ Многие подобные ситуации уже обсуждались и ответы были найдены, нужно лишь искать.

На всякий случай приведу примеры файлов конфигурации.

Пример файла /usr/local/etc/rc.d/sams

#!/bin/sh
# $FreeBSD: ports/www/sams/files/sams.sh.in,v 1.1 2006/12/29 20:18:35 miwi Exp $

# PROVIDE: sams
# REQUIRE: LOGIN cleanvar mysql — очень важно, без mysql не будет стартовать при загрузке ОС
# KEYWORD: shutdown

# Define these sams_* variables in one of these files:
# /etc/rc.conf
# /etc/rc.conf.local
# /etc/rc.conf.d/sams
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
#
sams_enable=${sams_enable-«NO»}
sams_flags=${sams_flags-«»}
sams_pidfile=${sams_pidfile-«/var/run/samsdaemon.pid»}

. /etc/rc.subr

name=»sams»
rcvar=`set_rcvar`
command=»/usr/local/bin/samsdaemon»

load_rc_config $name

pidfile=»${sams_pidfile}»

run_rc_command «$1»

Пример файла /usr/local/etc/squid/squid.conf:

auth_param basic program /usr/local/libexec/squid/ncsa_auth /usr/local/etc/squid/ncsa.sams

auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl _sams_4934254f2ae45 src «/usr/local/etc/squid/4934254f2ae45.sams»
acl _sams_4934254f2ae45_time time MTWHFAS 00:00-23:59
acl _sams_default proxy_auth «/usr/local/etc/squid/default.sams»
acl _sams_default_time time MTWHFAS 00:00-23:00
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
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
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 CONNECT method CONNECT
http_access allow _sams_4934254f2ae45 _sams_4934254f2ae45_time
http_access allow _sams_default _sams_default_time
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /usr/local/squid/logs/access.log squid
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
acl shoutcast rep_header X-HTTP09-First-Line ^ICY\s[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
delay_pools 2
delay_class 1 2
delay_class 2 2
delay_access 1 allow _sams_4934254f2ae45
delay_access 1 deny all
delay_parameters 1 524288/524288 524288/524288
delay_access 2 allow _sams_default
delay_access 2 deny all
delay_parameters 2 64000/64000 64000/64000
coredump_dir /usr/local/squid/cache

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

3 комментарий к «Установка SAMS с NCSA и IP авторизацией на FreeBSD из портов»
  1. Доброго времени суток, спасибо за статью, она мне очень помогла, однако авторизация через ncsa не работает я сам поковырял малость и увидел что SAMS по непонятной мне причине не добавляет пользователей в фаил ncsa.sams. Я пробовал менять права на этот фаил но это не помогло и скольких бы пользователей я не добавлял фаил остается пустым. А вот по IP авторизации все работает нормально.

  2. Это находится в веб-интерфейсе SAMS. Там есть пункт “templates”, где и нужно произвести замену типа авторизации. К сожалению не могу предоставить картинки, т.к. на данный момент не пользуюсь данной системой.

  3. ВАЖНО!!! Обязательно изменить в “templates” тип авторизации на NCSA (по умолчанию стоит по IP). Если не сделать этого, то в консоли будет вываливаться сообщение о пуcтом файле default.sams.
    Можно поподробнее где этот и что менять

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: