Что такое 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