Я буду устанавливать на Debian Lenny, но отличия с Debian Squeeze нет.
SAMS — это система для управления доступа пользователей через прокси сервер к ресурсам интернет. Она идеально подходит для использования как в частных фирмах так и в госудаственных учереждениях. Всю работу по проксированию, перенаправлению запросов, кэшированию и авторизации берет на себя proxy-сервер Squid, а SAMS занимается учетом трафика и управлением пользователями.
Squid — программный пакет, реализующий функцию кэширующего прокси-сервера для протоколов HTTP, FTP, Gopher и (в случае соответствующих настроек) HTTPS. Разработан сообществом как программа с открытым исходным кодом (распространяется в соответствии с GNU GPL).
Начинаем установку и настройку пакета наших программ.
Установка и настройка squid
Для начала добавим в source.list репозиторий с котрого будем устанавливать все программы:
Для Debian Lenny:
vi /etc/apt/sources.list deb http://archive.debian.org/debian/ lenny main contrib non-free
Для Debian Squeeze:
vi /etc/apt/sources.list deb http://mirror.yandex.ru/debian squeeze main contrib non-free
Обновляем репозиторий
aptitude update
Обновляем все доступные пакеты
aptitude dist-upgrade
Устанавливаем прокси сервер Squid
aptitude install squid
Установим файловый менеджер mc
aptitude install mc
Устанавливаем текстовый редактор vim
aptitude install vim
Устанавливаем веб сервер Apache2, MYSQL, PHP5, phpmyadmin
aptitude install apache2 mysql-server php5 phpmyadmin
После успешной установки squid, переходим к его настройке:
Копируем конфигурационный файл в архив
cp /etc/squid/squid.conf /etc/squid/squid.conf_backup
Открываем удобным для Вас редактором конфигурационный файл squid.conf
vi – требует прочтения инструкции пользователя. Для того чтоб пройти экспресс курс запустить команду vimtutor и пройти основные команды для пользования программой.
mcedit - более легкий в работе для начинающего линуксоида
далее для простоты описания буду описывать работу с редактором MC
mcedit /etc/squid/squid.conf
нажимаем F7 появится окно поиска, вводим в него то, что необходимо найти нажимаем Enter
Если нашло не то что нужно, снова повторяем поиск, и так пока не найдем нужную строку. После того как Вы внесли необходимые изменения и хотим сохранить файл нажимаем F2 и соглашаемся с изменением. После сохранения для закрытия сохраненного файла нажимаем F10
Далее я буду писать что ищем и как должно выглядеть после изменения (первый как должно выглядеть, остальные по примеру):
было:
# TAG: visible_hostname # If you want to present a special hostname in error messages, etc, # define this. Otherwise, the return value of gethostname() # will be used. If you have multiple caches in a cluster and # get errors about IP-forwarding you must set them to have individual # names with this setting. # #Default: # none
стало:
# TAG: visible_hostname # If you want to present a special hostname in error messages, etc, # define this. Otherwise, the return value of gethostname() # will be used. If you have multiple caches in a cluster and # get errors about IP-forwarding you must set them to have individual # names with this setting. # #Default: visible_hostname inetservname
было:
http_port 3128
стало:
http_port 3128 transparent
Внимание!!! Если у Вас пользователи будут авторизироватся при помощи пароля, прозрачная авторизация работать не будет, необходимо в браузере пользователя прописывать IP:PORT Вашего прокси сервера.
было:
# icp_port 3130
стало:
icp_port 0
было:
# cache_mem 8 MB
стало:
cache_mem 256 MB
было:
# maximum_object_size_in_memory 8 KB
стало:
maximum_object_size_in_memory 512 KB
было:
# maximum_object_size 20480 KB
стало:
maximum_object_size 120480 KB
было:
# cache_dir ufs /var/spool/squid 100 16 256
стало:
cache_dir ufs /var/spool/squid 5000 32 256
было:
# cache_swap_low 90 # cache_swap_high 95
стало:
cache_swap_low 90 cache_swap_high 95
было:
# logfile_rotate 0
стало:
logfile_rotate 5
было:
acl SSL_ports port 443 # https acl SSL_ports port 563 # snews acl SSL_ports port 873 # rsync 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 Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT
стало:
acl SSL_ports port 443 # https #acl SSL_ports port 563 # snews #acl SSL_ports port 873 # rsync 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 Safe_ports port 631 # cups #acl Safe_ports port 873 # rsync #acl Safe_ports port 901 # SWAT
было:
# TAG: url_rewrite_program # Specify the location of the executable for the URL rewriter. # Since they can perform almost any function there isn't one included. ... #Default: # none
стало:
# TAG: url_rewrite_program # Specify the location of the executable for the URL rewriter. # Since they can perform almost any function there isn't one included. ... #Default: url_rewrite_program /usr/bin/samsredir
было:
#Default: # url_rewrite_children 5
стало:
url_rewrite_children 5
было:
#auth_param basic program <uncomment and complete this line> #auth_param basic children 5 #auth_param basic realm Squid proxy-caching web server #auth_param basic credentialsttl 2 hours
стало:
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
!!! Если Вы внутри сети используете внутренний днс сервер, можно указать прокси серверу Squid использовать его прописав:
Для того, чтобы использовать свой локальный DNS сервер изменяем:
было:
# TAG: dns_nameservers ... #Default: # none
стало:
# TAG: dns_nameservers ... #Default: dns_nameservers 192.168.1.1
Сохраняем изменения и переходим к установке SAMS.
Установка SAMS 1.5
Необходимо установить необходимые зависимости:
apt-get install apache2 php5 mysql-server mysql-client build-essential autoconf automake libtool g++ php5-gd libmysqlclient15-dev php-fpdf
На просьбу ввести пароль root mysql - вводим и повторяем, а также записываем на бумажку либо в блокнот, чтоб не забыть.
делаем бекап конфигов которые будем изменять:
cp /etc/squid/squid.conf /etc/squid/squid.conf_backup cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_backup cp /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini_backup
Настройка PHP
SAMS умеет работать с PHP в режиме safe_mode=On. Но это требует дополнительной настройки конфигурации. Для этого редактируем файл конфигурации php /etc/php5/apache2/php.ini.
1. включаем режим safe mode (это по желанию, например я не включаю). Для этого выставляем параметр safe_mode
safe_mode = On
!!!! Внимание. Если у Вас при импроте в rejik бан листов выдает в веб интерфейсе ошибку: can't open sams config file data/urlist.txt
safe_mode ставим в Off, то есть должно быть:
safe_mode = Off
2. SAMS для некоторых функций WEB интерфейса использует системные команды, например wbinfo. В режиме safe_mode php блокирует доступ к системным командам. Php позволяет выполнять системные команды, расположенные в каталоге, заданном параметром safe_mode_exec_dir. Изменяем этот параметр:
safe_mode_exec_dir = "/usr/share/sams/bin"
3. Далее разрешаем исполнение системных скриптов из кода php. Ищем в файле конфигурации параметр и убираем из него запрет вызова функций phpinfo system shell_exec exec:
disable_functions = "chdir,dl,ini_get_all,popen,proc_open,passthru,pcntl_exec"
4. Для того, чтобы можно было заливать в самс большие бан списки в PHP увеличиваем максимальный размер запроса и размер загружаемого файла.
Макс. размер запроса
стало:
; Maximum size of POST data that PHP will accept post_max_size = 50M
Макс. размер файлов
стало:
; Maximum allowed size for uploaded files. upload_max_filesize = 50M
4. Все. PHP готов к работе.
Необходимо перезапустить веб сервер, чтобы настройки перечитались с конфига php.ini:
/etc/init.d/apache2 restart
Устанавливаем SAMS:
Переходим в директорию куда будем качать установочные пакеты, создаем папку sams, переходим в неё и качаем установочные пакеты:
cd /usr/src/ mkdir sams cd sams
Качаем пакеты sams для своей архитектуры:
Для amd64:
wget http://nixdev.net/release/sams/debian/lenny/sams_1.0.5_amd64.deb wget http://nixdev.net/release/sams/debian/lenny/sams-web_1.0.5_all.deb wget http://nixdev.net/release/sams/debian/lenny/sams-doc_1.0.5_all.deb
Для i386:
wget http://nixdev.net/release/sams/debian/lenny/sams_1.0.5_i386.deb wget http://nixdev.net/release/sams/debian/lenny/sams-web_1.0.5_all.deb wget http://nixdev.net/release/sams/debian/lenny/sams-doc_1.0.5_all.deb
Инсталлируем скачанные пакеты:
dpkg -i *.deb
Появится псевдографическое окно:
Настраивается пакет sams SAMS require additional manual configuration Currently SAMS package not ready to work out of box. Starting of samsdaemon disabled in init.d script. Please read /usr/share/doc/sams/README.Debain for description of additional configure step. <Ok>
Нажимаем Ok
Включаем самс в файле исправив в /etc/init.d/sams
было:
SAMS_ENABLE=false
стало:
SAMS_ENABLE=true
Правим конфигурационный файл по адресу /etc/sams.conf
исправляем:
MYSQLPASSWORD=yourpassword REJIKPATH=/usr/local/rejik3
Далее проверяем запущен ли squid и если команда вывела номер значит запущен, и тогда останавливаем прокси сервер.
pidof squid 8534
/etc/init.d/squid stop * Stopping Squid HTTP proxy squid [ OK ]
Теперь пересоздадим кеш прокси сервера командой:
squid -z 2009/02/16 15:55:20| Creating Swap Directories
На этом этапе настройка squid закончена, теперь запускаем прокси сервер squid командой:
init.d/squid start
Подгатавливаем mysql базу для работы sams:
заходим под пользователем root и паролем, что мы заранее записали в блокнот на наш сервер по адресу:
http://ip_server/phpmyadmin
Далее нажимаем на кнопку SQL и вставляем код в окно Выполнить SQL-запрос(ы) на сервере "localhost" обязательно изменить пароль yourpassword на свой:
GRANT ALL ON squidctrl.* TO sams@localhost IDENTIFIED BY "yourpassword"; GRANT ALL ON squidlog.* TO sams@localhost IDENTIFIED BY "yourpassword";
Необходимо нажать OK:
Обязательно нужно заполнить созданные для sams базы командами в консоли сервера:
mysql -u sams -pyourpassword < /usr/share/sams/mysql/sams_db.sql mysql -u sams -pyourpassword < /usr/share/sams/mysql/squid_db.sql
скопировать - вставить и выполнить изменив пароль yourpassword на свой:
!!! Внимание !!!
Если Вы настраиваете на Debian Squeeze, необходимо добавить репозиторий из Debian Lenny для того, чтобы установить необходимые зависимости.
Добавляем репозиторий, который уже вывели в архив в файл /etc/apt/sources.list командой:
echo "deb http://archive.debian.org/debian/ lenny main contrib non-free" >> /etc/apt/sources.list
Обновляем репозиторий командой:
aptitude update
Устанавливаем необходимую зависимость командой:
aptitude install libmysqlclient15off
Для того, чтобы зайти в панель управления SAMS, необходимо в браузере ввести адрес http://ip_server/sams , где ip_server - IP адрес сервера на который мы выполняли установку.
Вход под администратором:
Логин: admin
Пароль: qwerty
Вход под аудитором:
Логин: auditor
Пароль: audit
Пароль настоятельно советую изменить сразу же, и записать его в блокнот.
Если устанавливаете SAMS на сервер уже работающий с какой-либо панелью управления хостингом, например ISPmanager, создаете для примера пользователя samsweb с доменом sams.site.loc и даете ему права на CGI, а также настраиваете домен работать через php CGI , и в папку домена просто монтируете содержимое папки sams командой:
mount --bind /usr/share/sams /var/www/samsweb/data/www/sams.site.loc/
Выполняйте эту команду и затем поместите её в файл /etc/rc.local, тогда при загрузке сервера папка бедет монтироватся автоматически.
Так же необходимо дать права на содержимое папки для своего пользователя командой:
chown -R samsweb:samsweb /var/www/samsweb/data/www/sams.site.loc/
должно получится примерно так:
.... # bits. # # By default this script does nothing. mount --bind /usr/share/sams /var/www/samsweb/data/www/sams.site.loc/ .....
Если при установке выдало такую ошибку:
Fatal error: Cannot redeclare GetHostName() in /var/www/samsweb/data/www/sams.site.loc/src/configtray.php on line 20
Необходимо внести в скрипты SAMS:
cd /usr/share/sams/ vi src/webconfigtray.php
было:
function GetHostName() { if(!($value=getenv('SERVER_NAME'))) { $value="N.A."; } return($value); }
стало:
//function GetHostName() //{ // if(!($value=getenv('SERVER_NAME'))) // { $value="N.A."; } // return($value); //}
vi src/configtray.php
было:
function GetHostName() { if(!($value=getenv('SERVER_NAME'))) { $value="N.A."; } return($value); }
стало:
//function GetHostName() //{ // if(!($value=getenv('SERVER_NAME'))) // { $value="N.A."; } // return($value); //}
После этого веб интерфейс откроется нормально.
Скриншоты по настройке SAMS через web интерфейс:
ВНИМАНИЕ!!!
Для пользователей попадающих под ограничения, стандартное сообщение которое выводит sams выглядит так:
Для того, чтобы пользователю вывести свой файл написанный на HTML необходимо создать сам файл который будет выводится пользователю попавшему под ограничение командой:
touch /usr/share/sams/messages/file_denied.html
в файле
mcedit /usr/share/sams/messages/blocked.php
Необходимо изменить
было:
if($action=="rejikdenied"||$action=="sgdenied") { print(" <TR><TD><IMG SRC=\"$path$ICONSET/denied.gif\">"); print(" <TD> "); print("<P><FONT COLOR=\"RED\"><B><H2>$blocked_php_3 <BR></FONT>"); print("$url<BR> <FONT COLOR=\"RED\">$blocked_php_4</H2></B></FONT> "); exit(0); }
стало:
if($action=="rejikdenied"||$action=="sgdenied") { // print(" <TR><TD><IMG SRC=\"$path$ICONSET/denied.gif\">"); // print(" <TD> "); // print("<P><FONT COLOR=\"RED\"><B><H2>$blocked_php_3 <BR></FONT>"); // print("$url<BR> <FONT COLOR=\"RED\">$blocked_php_4</H2></B></FONT> "); print(file_get_contents('file_denied.html')); exit(0); }
После этого пользователю попавшего под ограничение будет выводится подготовленный Вами HTML файл находящийся по пути /usr/share/sams/messages/file_denied.html
Мой пример простого файла:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Site Blocked</title> <meta http-equiv="Content-Type" content="text/html; charset=utf8"> </head> <body bgcolor="#000000" text="#c8c8c8" link="#c8c8c8"> <table align="center" border="0" width="640"> <tr><td align="center"> <h1>Содержимое данного сайта заблокировано для просмотра в сети "Ваша фирма".</h1> <h2 align="justify"><font color="red">Этот сайт внесен в список запрещенных адресов как мешающие полноценной работе.</font> <br>Просим извинить за неудобства. Если этот сайт Вам настоятельно требуется для работы, будте добры сообщить администратору сервера об этом. </h2> <hr> </table> </body> </html>
ВНИМАНИЕ!!!
В настройках sams в Способ аутентификации пользователя выбираете необходимый Вам способ IP либо NCSA и обязалельно ставите в Шаблоны пользователей - Default такой же способ. Далее Вы создаете необходимые шаблоны и один из этих шаблонов Вы можете привязать любому пользователю.
Каждому шаблону можно привязать ограничения куда ходить можно, а куда нет, а также количество трафика доступное пользователю, скорость канала для всего шаблона и скорость канала для отдельного пользователя.
Продолжение инструкции находится по адресу:
В этой инструкции мы устанавливаем программу редиректор Rejik и настраиваем её через веб интерфейс SAMS
А в этой инструкции мы устанавливаем и настраиваем программу онлайн статистики прокси сервера Sqstat
Add new comment