Прокси сервер 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. Установка необходимых пакетов.

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

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

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

# 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.