База знаний

www. IT-Mehanika .ru --  журнал доброго админа

Прокси сервер SQUID + SAMS + SamsRedirector на Ubuntu Server 10.04

В данной статье расскажу все прелести танцев с бубнами и гармошками вокруг такого замечательного и неповторимого осьминога 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

ШАГ 1. Установка системы

Был выбран дистрибутив сервера 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

ШАГ 2. Установка необходимых пакетов.

В данном случае это мое любимое занятие, устанавливать пакеты.

Нам необходимы следующие пакеты:

  • Squid - сам прокси сервер
  • MySQL-Server - MySQL сервер
  • MySQL-Client - MySQL клиент
  • mysql-devel - файлы заголовков для MySQL
  • Apache2 - ну а это же наш великий веб индеец :)
  • mod_php - модуль php для Apache2
  • php - консольный php
  • php-mysql - библиотека поддержки MySQL в php
  • libgd - библиотека поддержки графики
  • php-gd - модуль поддержки libgd в php (используется для рисования графиков)
  • libpcre - библиотека, пока не определил :)
  • libpcre-devel - файлы заголовков libpcre
  • php-fpdf - библиотека конвертирования отчетов в pdf

Дополнительно установим следующие пакеты для удобства работы:

  • mc - Midnight Commander консольный оконный файловый менеджер, а главное OpenSource
  • htop - очень мощный консольный диспечер задач, с большим набором функций, а самое главное все наглядно и понятно
  • openssh-server - ну тут и говорить уже не надо, и так все все знают.

# 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

 

ШАГ 3. Установка SAMS.

Скачиваем последнюю версию 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”;

Сохраняемся.

ШАГ 4. Создание базы данных и MySQL пользователя SAMSa

Переходим в каталог /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

ШАГ 5. Конфигурирование SQUID

Конфигурируем конфиг 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

ШАГ 6. Изменение скрипта запуска SAMS

Изменим скрипт запуска и остановки 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);

*}

*/

ШАГ 7. Настройка через WEB интерфейс

На компьютере запускаем веб браузер, любой, какой душе угодно, я люблю 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.

Комментарии   

0 #43 lgik 16.07.2013 12:56
возможно еще докрутить к этой связке sqstat?
0 #42 Виталий 15.07.2013 09:43
Я уже начал ее писать, как только появится свободное время допишу и опубликую.
0 #41 lgik 11.07.2013 13:26
не хватает такой же подробной статьи о системе squid3 + sams 1.0.5 + NTLM (Авторизация через AD)!
0 #40 mrbublik 02.03.2013 01:45
Цитирую Fedorov Vitaly:

Я бы с удовольствием написал бы статью как я настроил squid3 + sams1.0.5 + AD но некий человечек из Краснодара, причем мой земляк по адресу nikmy.ru/.../...
просто копипастит мои статьи не соблюдая правила об авторском праве, без указания на автора и ресурс. Поэтому у меня нет желания что либо писать еще.


Виталик! не обращай внимание на всяких ... нехороших людей. мы пишем для ВСЕХ. А то что кто-то берет и выдает за свое, ну пусть карму нарабатывает )))) бог ему судья. Пиши, пусть люди радуются. Я к выпуску серию статей готовлю...
0 #39 Guest 01.03.2013 17:16
Цитирую :
Огромный респект за статью. Все очень подробно и понятно. Но к сожалению под ubuntu 10.10 server x64 + squid3 не работает. Очень жду новой статьи! :-)

Я бы с удовольствием написал бы статью как я настроил squid3 + sams1.0.5 + AD но некий человечек из Краснодара, причем мой земляк по адресу nikmy.ru/.../...
просто копипастит мои статьи не соблюдая правила об авторском праве, без указания на автора и ресурс. Поэтому у меня нет желания что либо писать еще.
0 #38 Guest 15.02.2013 12:17
Цитирую :
Огромный респект за статью. Все очень подробно и понятно. Но к сожалению под ubuntu 10.10 server x64 + squid3 не работает. Очень жду новой статьи! :-)

Хе, только что поднял систему squid3 + sams 1.0.5 + NTLM (Авторизация через AD). Единственное жду начальную статью моего друга mrbublik о связке kerberos + winbind + samba, а я опишу как поднять squid 3 + sams 1.0.5.
0 #37 Guest 15.02.2013 12:13
Цитирую :
Здравствуйте! Сперва хочу поблагодарить за интересную статью. Есть пару вопросиков, если позволите:
Не понял как должно работать следующее, если два сетевых интерфейса один смотрин в интернет другой в локалку, как и где указать это системе?
Не нашел где пункт "Запрет доступа по регулярным выражениям" сами регулярные выражения нашел а вот этот пункт не могу найти?


По поводу двух сетевых интерфейсов это вам надо настраивать шлюз, а так же применять правила iptables а потом указывать в конфигурации на каком интерфейсе будет работать связка squid+sams
0 #36 mrbublik 12.10.2012 09:52
Цитирую vanya:
Здравствуйте все настроил по статье, ну при создании пользователя squid перестает работать, не подскажите причину в чем ошибка??

Чуть по подробнее ...
0 #35 Guest 12.10.2012 09:11
Здравствуйте все настроил по статье, ну при создании пользователя squid перестает работать, не подскажите причину в чем ошибка??
0 #34 Guest 31.08.2012 11:08
Цитирую :
У меня имеется проблемма не могли бы помочь, Самс настроил вроде, но у пользователя авторизацию не спрашивает а выкидывает ошибку. ERROR
The requested URL could not be retrieved

Your cache administrator is webmaster.
Помогите плиз что может быть.

Извиняюсь. Суть в том что происходит обвал библиотеки so в sams2daemon. Значит что то пропустили или ошибка в conf файлах, видимо пропускает или не обрабатывает строки в конфигурационны х файлах. Проверьте другие лог файлы.

You have no rights to post comments