В данной статье расскажу все прелести танцев с бубнами и гармошками вокруг такого замечательного и неповторимого осьминога SQUID и его наставника свыше в виде веб-админки SAMS :) На самом деле я в своей организации решил все же основательно заняться своими подопечными юзерами, и мое начальство просто рвет и мечет, чтобы уменьшить трафик интернета. А в голове так и крутится, если буду все настраивать в консоли, то в моем городе никто и никогда не сможет разобраться потом в проксе. Сначала начну с описания.
Squid это высокопроизводительный кеширующий прокси-сервер для web-клиентов, который предоставляет одновременный доступ к Интернет сразу нескольким пользователям. Кроме того он еще и кэширует запросы, т.е. помогает получать данные локально, вместо того чтобы брать их из Интернета, уменьшая таким образом время доступа и используемый трафик. Также имеется возможность регулировать пропускную способность канала в зависимости от его нагрузки. Для доступа к интернету могут использоваться различные способы авторизации.
SAMS - это система для управления доступа пользователей через прокси сервер к ресурсам интернет. Она идеально подходит для использования как в частных фирмах так и в госудаственных учереждениях. Всю работу по проксированию, перенаправлению запросов, кэшированию и авторизации берет на себя proxy-сервер Squid а SAMS занимается учетом трафика и управлением пользователями.
SQUID Account Management System(SAMS) - программное средство для администрирования доступа пользователей к прокси-серверу SQUID, сбора статистики и генерации отчетов о потреблении трафика.
Итак, необходимо поднять на Ubuntu-server 10.04 связку
SQUID + SAMS + Samsredirector
Честно говоря, вся документация по SAMS на русском языке, но в инете так и не нашел толковый связаный мануальчик по установке SQUID + SAMS и Samsredirector. И решил проявить инициативу сам. :)
Так как в организации нет домена и не предусматривается, то будем использовать авторизацию ncsa
Был выбран дистрибутив сервера Ubuntu Server 10.04.1
Установка была произведена стандартным способом.
Начальные данные:
IP адрес: 192.168.0.8
Маска подсети: 255.255.255.0
Сеть: 192.168.0.0
Широковещательный адрес: 192.168.0.255
Шлюз: 192.168.0.1
DNS сервер: 192.168.0.1
Пользователь в БД MySQL: dude
Пароль для пользователя БД MySQL: dudeproxy
Редактируем файл /etc/network/interfaces и вписываем следующие строчки
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.8
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameserver 192.168.0.1
Редактируем файл /etc/resolv.conf удаляем все и прописываем
search netlan.local
nameserver 192.168.0.1
Проверяем имя хоста в /ets/hostname ->> proxy.workgroup
Проверяем записи в /etc/hosts
127.0.0.1 localhost proxy
192.168.0.8 proxy.workgroup proxy
Записи, относящиеся к ipv6 можно удалить …
Проверяем установки времени командой:
# date
Если нужно изменить, курим маны командой # man date
Теперь пришло время обновить систему.
Даем команды в консоли:
# sudo aptitude update
#sudo aptitude upgrade
Теперь можно налить себе чашечку кофе, затянуть сигаретку и насладиться прекрасным мерцанием строчек обновления системы. :) У меня инет не сильно шустрый, поэтому пришлось делать так.
Презагрузимся, что бы наверняка. :)
# sudo reboot
В данном случае это мое любимое занятие, устанавливать пакеты.
Нам необходимы следующие пакеты:
Дополнительно установим следующие пакеты для удобства работы:
# sudo su
# aptitude install mc htop openssh-server make
# aptitude install mysql-client-5.1 mysql-server-5.1 libmysqlclient15-dev apache2 php5-gd php5 php5-mysql
Введем пароль для MySQL и обязательно его запомним (например dudeproxy)
# aptitude install libpcre3 libpcre3-dev libgd2-xpm libapache2-mod-php5 php-fpdf gcc
Скачиваем последнюю версию SAMS. На настоящий момент версия 1.0.5
# cd /usr/src/
# wget http://sams.perm.ru/download/sams-1.0.5.tar.bz2
Распаковываем его
# tar xvf sams-1.0.5.tar.bz2
Переходим в папку sams-1.0.5
# cd sams-1.0.5
И стандартно конфигурируем его и устанавливаем:
# ./configure
# make && make install
Далее делаем симлинк:
# ln -s /usr/local/share/sams /var/www/sams
С текущей версии SAMS научился работать с PHP в режиме safe_mode=On. Но это требует дополнительной настройки конфигурации. Для этого редактируем файл конфигурации php /etc/php5/apache2/php.ini
Включаем режим safe mode. Для этого выставляем параметр safe_mode
safe_mode = On
SAMS для некоторых функций WEB интерфейса использует системные команды, например wbinfo. В режиме safe_mode php блокирует доступ к системным командам. Php позволяет выполнять системные команды, расположенные в каталоге, заданном параметром safe_mode_exec_dir. Изменяем этот параметр:
safe_mode_exec_dir = “/usr/local/share/sams/bin”
Далее разрешаем исполнение системных скриптов из кода php. Ищем в файле конфигурации параметр и убираем из него запрет вызова функций phpinfo system shell_exec exec:
disable_functions = “chdir,dl,ini_get_all,popen,proc_open,passthru,pcntl_exec”
В /etc/sams.conf правим имя пользователя в строчке:
MYSQLUSER=dude <---Сюда прописываете своего пользователя
MYSQLPASSWORD=dudeproxy <---Сюда прописывате пароль пользователя dude
В файле /usr/local/src/sams-1.0.5/mysql/create_sams_user.sql прописываем вышеназначенного пользователя.
GRANT ALL ON squidctrl.* TO dude@localhost IDENTIFIED BY “dudeproxy”;
GRANT ALL ON squidlog.* TO dude@localhost IDENTIFIED BY “dudeproxy”;
Сохраняемся.
Переходим в каталог /usr/local/src/sams-1.0.5/mysql/
# cd /usr/local/src/sams-1.0.5/mysql/
# mysql -u root -p < sams_db.sql
# mysql -u root -p < squid_db.sql
# mysql -u root -p < create_sams_user.sql
Конфигурируем конфиг squid аод свои нужды
# mcedit /etc/squid/squid.conf
ВНИМАНИЕ!!! Ни в коем случае не менять структуру файла и не удалять коменты
Указываем порт который будет слушать/обслуживать наш прокси
http_port 3128
Раскоментируем и редактируем по своему вкусу
сache_dir ufs /var/spool/squid 100 16 256
А также другие опции работы с кешем, раскоментировать:
access_log /var/log/squid/access.log
pid_filename /var/run/squid.pid
Ищем соответствующие секции и раскоментируем :
url_rewrite_program /usr/local/bin/samsredir
url_rewrite_children 5
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/ncsa.sams
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
Изменим скрипт запуска и остановки SAMS.
# mcedit /etc/init.d/sams
Удаляем все содержимое и копипастим данный скрипт
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: sams
# Required-Start: $local_fs $network $time
# Required-Stop:
# Should-Start: $named $mysql $squid
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starting sams daemon
# Description: Squid Account Management System (SAMS)
# Starting sams management daemon - samsdaemon
### END INIT INFO
#
# Author: Pavel Vinogradov
#
# /etc/init.d/sams: start and stop the sams daemon
SAMSPATH=`cat /etc/sams.conf | grep SAMSPATH | tr "SAMSPATH=" "\0"`
NAME="sams"
DAEMON=$SAMSPATH/bin/samsdaemon
LOCKFILE=/var/lock/samsd
PIDFILE=/var/run/samsdaemon.pid
RETVAL=0
SAMS_ENABLE=true
test -x $DAEMON || exit 0
if ! [ -x "/lib/lsb/init-functions" ]; then
. /lib/lsb/init-functions
else
echo "E: /lib/lsb/init-functions not found, lsb-base (>= 3.0-6) needed"
exit 1
fi
. /etc/default/rcS
case "$1" in
start)
if "$SAMS_ENABLE"; then
log_daemon_msg "Starting $NAME daemon" "$NAME"
if [ -s $PIDFILE ] && kill -0 $(cat $PIDFILE) >/dev/null 2>&1; then
log_progress_msg "apparently already running"
log_end_msg 0
exit 0
fi
start-stop-daemon --start --quiet --background \
--pidfile $PIDFILE \
--exec $DAEMON
RETVAL=$?
[ $RETVAL -eq 0 ] && touch "$LOCKFILE"
log_end_msg $RETVAL
else
[ "VERBOSE" != no ] && log_warning_msg "$NAME daemon not enabled, not starting. Please read /usr/share/doc/sams/README.Debian."
fi
;;
stop)
if "$SAMS_ENABLE"; then
log_daemon_msg "Stopping $NAME daemon" "$NAME"
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f "$LOCKFILE"
log_end_msg $RETVAL
else
[ "VERBOSE" != no ] && log_warning_msg "$NAME daemon not enabled, not stoping..."
fi
;;
restart|force-reload)
/etc/init.d/sams stop
/etc/init.d/sams start
;;
*)
echo "Usage: ${0##*/} {start|stop|restart}"
RETVAL=1
;;
esac
Сохраняемся.
Далее даем команду:
# update-rc.d sams defaults
Для закрепления всего перезагружаем сервер.
# reboot
ЗАМЕТКА. Для установленной версии php5 и сервера mysql-5.1 в WEB интерфейсе будут проблемы с настройками. Необходимо сделать следующее.
1. В файле /usr/local/share/sams/src/webconfigtray.php закоментировать таким образом следующие строчки.
/* function GetHostName()
* {
* if (!($value=getenv('SERVER_NAME')))
* { $value="N.A."; }
* return($value);
*}
*/
2. В файле /usr/local/share/sams/src/configtray.php закоментировать таким образом следующие строчки.
/* function GetHostName()
* {
* if (!($value=getenv('SERVER_NAME')))
* { $value="N.A."; }
* return($value);
*}
*/
На компьютере запускаем веб браузер, любой, какой душе угодно, я люблю Mozilla Firefox
набираем в адресной строке:
http://192.168.0.8/sams
В системе уже зарегистрированны два пользователя:
1. Администратор
Login: admin
PSWD: qwerty
2. Аудитор/Статистика
Login: auditor
PSWD: audit
Нажимаем в нижнем окне на иконку с двумя человечками, и входим под администратором.
Идем в секцию WEB interface settings
Выставляем язык: russian utf-8
Показывать графики в отчетах
Создавать PDF отчеты с помощью fpdf
Остальные фукции выставляете по вкусу, и по документации, благо она на русском, поэтому проблем не возникнет.
Далее идем.
Администрирование SAMS:
авторизация в NCSA
файл перенаправления запроса http://192.168.0.8/sams/icon/classic/blank.gif
Путь к каталогу, где лежат файлы запрета запроса http://192.168.0.8/sams/messages
Редиректор встроенный SAMS
Сохранять данные о трафике в базе за последние 12 месяцев <---Выставляйте как удобно вам
Не забудьте поставить галочку "Обрабатывать логи SQUID", иначе статистика не будет собираться.
Сохраняемся.
Идем дальше.
Удалить все существующие группы пользователей и шаблоны пользователей
удаляем все безжалостно…
Регулярные выражения :
создать список banlist и поместить туда к примеру vkontakte.ru
Локальные домены:
добавить workgroup и 192.168.0.8 и можно еще подсеть 192.168.0.0/24
Создаем шаблон пользователей users:
Запрет доступа по регулярным выражениям
banlist
Авторизация NCSA
Теперь добавим группу UzVERS
и первого юзера
(не забудьте поставить галку в поле – Пользователь активен)
Идем в меню SQUID – реконфигурировать
после того, как убедились, что команда демоном получена – смотрим в консоли:
# ps -auxw|grep proxy
# ps -auxw|grep samsdaemon
Теперь для проверки reboot и будем смотреть как это все работает,
В браузере прописываем настройки прокси 192.168.0.8 порт 3128
Все должно работать, а при попытке входа на запрещенный URL должны получить доступ закрыт.
Ну и конечно же без красивых графиков тоже не обойтись.
Ну вот и все.
Спасибо за внимание.
P.S.Если кому нибудь нужно настройка этой же связки только на Squid3, пишите в коментах, тогда будет стимул написать статью и для squid3.
Комментарии
Виталик! не обращай внимание на всяких ... нехороших людей. мы пишем для ВСЕХ. А то что кто-то берет и выдает за свое, ну пусть карму нарабатывает )))) бог ему судья. Пиши, пусть люди радуются. Я к выпуску серию статей готовлю...
Я бы с удовольствием написал бы статью как я настроил squid3 + sams1.0.5 + AD но некий человечек из Краснодара, причем мой земляк по адресу nikmy.ru/.../...
просто копипастит мои статьи не соблюдая правила об авторском праве, без указания на автора и ресурс. Поэтому у меня нет желания что либо писать еще.
Хе, только что поднял систему squid3 + sams 1.0.5 + NTLM (Авторизация через AD). Единственное жду начальную статью моего друга mrbublik о связке kerberos + winbind + samba, а я опишу как поднять squid 3 + sams 1.0.5.
По поводу двух сетевых интерфейсов это вам надо настраивать шлюз, а так же применять правила iptables а потом указывать в конфигурации на каком интерфейсе будет работать связка squid+sams
Чуть по подробнее ...
Извиняюсь. Суть в том что происходит обвал библиотеки so в sams2daemon. Значит что то пропустили или ошибка в conf файлах, видимо пропускает или не обрабатывает строки в конфигурационны х файлах. Проверьте другие лог файлы.
RSS лента комментариев этой записи