|
Перед администратором средней компании всегда стоит проблема организации доступа сотрудников в интернет, а так-же подсчет, управление и ограничение их трафика. Решений тому масса, какие-то из них лучше какие-то хуже...
В целом проблема разбивается на две составляющих:
- Собственно подсчет трафика
- Ограничение и управление трафиком
Ограничивать трафик достаточно просто, для этого вполне подойдут решения на базе iptables + mysql, но тут есть один недостаток, нет контроля над трафиком.
Вышеуказанное решение (iptables + mysql) даст вам набор ip адресов с которых обращались из вашей локальной сети и куда обращались в интернет. Учитывая то, что часто в локалке применяется DHCP, разбор такого лога дело совершенно не реальное. Хорошим решением в таком случае станет прокси сервер с авторизацией. Он умеет вести лог посещений сайтов в виде URL + имя авторизовавшегося пользователя. Остается прикрутить все это дело к mysql, а управлять всем этим хозяйством через вэб интерфейс. В принципе mysql как база данных вовсе не обязательна, просто ее очень любят PHP-кодеры
Итак решение такого рода уже есть!!! Называется оно SAMS.
Домашняя страница проекта: http://sams.perm.ru
Что умеет SAMS:
- Администрирование системы через web интерфейс
- Ограничение объема трафика пользователей на определенный период
- Автоматическое отключение пользователей, превысивших лимит.
- Ведение списков запрещенных для доступа пользователей ресурсов интернет.
- Настройка доступа пользователей через механизм шаблонов.
- Разбиение пользователей на группы для удобства администрирования системы
- Формирование отчетов по трафику пользователей за любой отрезок времени
- Поддержка видов авторизации SQUID:
-NTLM авторизация в домене Windows
-NCSA авторизация
- доступ по ip адресу
- Поддержка использования редиректоров
- И много другое...
Пользуясь случаем, хочу выразить свою признательность автору SAMS.
Некоторые оговорки:
Эта статья написана с целью показать как устанавливать SAMS именно на Slackware. Мною предполагается, что SAMS устанавливается на только, что установленную Слаку и никакие конфигурационные файлы серверов используемых SAMS еще не были изменены. Также мной предполагается, что Windows домен работает в смешанном режиме.
Итак начнем! Для работы SAMS требуются пакеты:
- squid
- mysql
- apache
- samba (можно и без нее)
- mod_php (модуль к apache)
- php
- php-mysql
- ibgd
- php-gd
- libpcre
Я вас поздравляю!!! В Slackware все это кроме самого squid есть!!!! Дело за малым, установить squid и заставить все это работать.
Apache.
Для начала научим apache работать с php, это совсем не сложно.
- Открываем конфиг апача:
sudo vi /etc/apache/httpd.conf
Добавляем
DirectoryIndex index.html index.php
Раскомментируем строчку
Include /etc/apache/mod_php.conf
- Делаем стартовый скрипт апача запускаемым (если это не было сделано при установке)
sudo chmod 744 /etc/rc.d/rc.httpd
- Запускаем апач:
sudo /etc/rc.d/rc.httpd start
- Готово!
MySQL
Принимаемся за mysql
В /etc лежат четыре файла:
- my-huge.cnf
- my-large.cnf
- my-medium.cnf
- my-small.cnf
Смысл понятен? Выбираем my-medium.cnf, переименовываем его в my.cnf.
Теперь делаем стартовый скрипт mysql запукаемым:
sudo chmod 744 /etc/rc.d/rc.mysqld
Если к базе планируется подключаться из сети в стартовом скрипте надо разремарить SKIP="--skip-networking"
Дальше создаем системные таблицы mysql:
su mysql mysql_install_db
Теперь необходимо запустить базу и поменять пароль пользователя root. При создании системых таблиц, этот пользователь создается с пустым паролем, что не есть гуд!
sudo /etc/rc.d/rc.mysqld start
Меняем пароль рута:
sudo mysqladmin -u root password 'new-password'
Потом можно будет поставить PhpMyAdmin, или любой другой фронтэнд к mysql, но настоящие джедаи пользуются консолью, а попутно учат синтаксис языка sql
Ну чтож теперь мы встали у развилки дорог... Нам надо принять стратегическое решение какой тип авторизации мы будем использовать. Собственно прокси сервер squid умеет авторизовать пользователей по самым разнообразным схемам. Мне представляется самым логичным использовать авторизацию NTLM с использованием хелпера из самбы. Для этого нам предстоит поднять самбу и ввести нашу Линукс машину в Win домен. Что ж начнем это увлекательное занятие...
Samba.
Samba в Slackware 11.0 собрана с поддержкой winbind и LDAP, но стартовый скрипт написан так, чтоб winbindd не запускался. Исправим это. Открываем скрипт и приводим его к такому виду:
sudo vi /etc/rc.d/rc.samba
#!/bin/sh
#
# /etc/rc.d/rc.samba
#
# Start/stop/restart the Samba SMB file/print server.
#
# To make Samba start automatically at boot, make this
# file executable: chmod 755 /etc/rc.d/rc.samba
#
samba_start() {
if [ -x /usr/sbin/smbd -a -x /usr/sbin/nmbd -a -r /etc/samba/smb.conf ]; then
echo "Starting Samba: /usr/sbin/smbd -D"
/usr/sbin/smbd -D
echo " /usr/sbin/nmbd -D"
/usr/sbin/nmbd -D
echo " /usr/sbin/winbindd"
/usr/sbin/winbindd
fi
}
samba_stop() {
killall smbd nmbd winbindd
}
samba_restart() {
samba_stop
sleep 2
samba_start
}
case "$1" in
'start')
samba_start
;;
'stop')
samba_stop
;;
'restart')
samba_restart
;;
*)
# Default is "start", for backwards compatibility with previous
# Slackware versions. This may change to a 'usage' error someday.
samba_start
esac
Переименовываем файл /etc/samba/smb.conf.sample в /etc/samba/smb.conf:
cp /etc/samba/smb.conf.sample /etc/samba/smb.conf
Открываем и правим:
sudo vi /etc/samba/smb.conf
[global]
workgroup = _ИМЯ_ВАШЕГО_ДОМЕНА
server string = Samba Server
security = DOMAIN
auth methods = winbind
password server = IP_ВАШЕГО_КОНТРОЛЛЕРА_ДОМЕНА
enable privileges = Yes
client NTLMv2 auth = Yes
client lanman auth = No
client plaintext auth = No
log file = /var/log/samba.%m
max log size = 50
server signing = auto
dns proxy = No
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind use default domain = Yes
Вот конфиг моей самбы. Вполне рабочий, больше года работы и ни одного глюка.
Мною предполагается что домен работает в смешанном режиме. Если это не так, то танцы с бубном вокруг самбы вам обеспечены, и я тут уж ничего не могу вам посоветовать лучшего, чем чтение манов ибо они рулеззз. У меня же в сети работают разные операционки, соответственно домен работает в смешанном режиме. И в силу того, что я не конфигурировал самбу для работы с нативным режимом домена, я не буду описывать как это сделать. Боюсь быть не точным и ввести вас в заблуждение.
Далее правим файл /etc/nsswitch.conf. Для тех кто не в курсе, этот файл позволяет для каждого типа административной информации указывать явный путь поиска.
sudo vi /etc/nsswitch.conf
Приводим его к такому виду:
passwd: files winbind
shadow: files winbind
group: files winbind
hosts: files dns
networks: files
services: files
protocols: files
rpc: files
ethers: files
netmasks: files
netgroup: files
bootparams: files
automount: files
aliases: files
Каждая строка соответствует отдельному типу информации, источники просматриваются слева направо.
Заводим самбу в домен:
sudo net join -W _ВАШ_ДОМЕН -U _логин_пользователя_с_правами_администратора_домена
Вводим пароль
Если получилось можно радоваться, если нет, читаем логи ибо там все написано.
Проверяем как работает winbindd:
sudo wbinfo -u #Выдаст список пользователей домена
sudo wbinfo -g #Выдаст список групп домена
Squid.
Пришла очередь squid.
- Для начала скачаем squid и установим.
Качаем:
wget http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE9.tar.bz2
Распаковываем:
tar xjvf squid-2.6.STABLE9.tar.bz2
Переходим в распакованый каталог:
cd ./squid-2.6.STABLE9
Конфигурируем
./configure \
--enable-storeio="ufs,aufs,diskd" \
--enable-removal-policies="lru,heap" \
--enable-heap-replacement \
--enable-delay-pools \
--disable-wccp \
--disable-wccpv2 \
--enable-arp-acl \
--enable-large-cache-files \
--disable-ident-lookups \
--enable-auth="basic,digest,ntlm,negotiate"
За подробным описанием опций конфигурации советую сходить по этой ссылке: http://bog.pp.ru/work/squid.html
Собираем:
sudo make
Теперь делаем финт ушами. Мы ведь не станем засорять систему установленными в ручную программами. Мы сделаем пакет, для того, чтобы если будет необходимость мы смогли его снести средствами пакетного менеджера.
Установим squid временно в /tmp.
sudo make install DESTDIR=/tmp/squid-2.6.STABLE9
Переходим туда:
cd /tmp/squid-2.6.STABLE9
Собираем .tgz пакет:
sudo makepkg squid-2.6.STABLE9-486-1my.tgz
Собрали, теперь установим:
sudo installpkg squid-2.6.STABLE9-486-1my.tgz
Готово!
Для более продвинутых можно написать SlackBuilb скрипт, но это не в моде. Теперь все хотят только мышкой кликать, и чтоб само все устанавливалось, сносилось и обновлялось... Все-же я рекомендую почитать вот эту статью: "Создание слакбилд скрипта"
Отдельное спасибо Danhuu за перевод.
-
Итак мы установили squid в /usr/local/squid. Теперь нам необходимо завести в системе бесправного пользователя с правами которого будет работать прокси сервер. По умолчанию squid работает от пользователя nobody, но я предпочитаю завести для него отдельного пользователя squid.file:
Делаем это руками:
sudo vi /etc/passwd
Добавляем туда строчку:
squid:x:1003:2::/bin/else
1003 это id, он может быть любым лишь бы был уникальным. /bin/else указывает на то что у пользователя нет шелла.
Дальше
sudo vi /etc/group
Tуда добавляем
squid:x:1012:squid
Т.е. группа squid у которой id 1012 и один член squid.
Этого вполне хватит.
-
Открывем конфиг сквида:
vi /usr/local/squid/etc/squid.conf
Ищем там строки:
cache_effective_user
cache_effective_group
Соответственно должно быть:
cache_effective_user squid
cache_effective_group squid
Включаем использование редиректора SAMS.
url_rewrite_program /usr/local/bin/samsredir
url_rewrite_children 5
(количество запускаемых процессов samsredir)
Включаем авторизацию NTLM
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param ntlm keep_alive on
Не все браузеры умеют авторизоваться по NTLM, даем возможность вводить пароль вручную, эти строчки должны обязательно быть после верхних.
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
-
Теперь один маленький штрих. Для того чтоб заработала NTLM авторизация squid должен иметь доступ к файлу /var/cache/samba/winbindd_privileged/pipe.
Сам файл имеет права доступа:
srwxrwxrwx 1 root root 0 2007-02-07 23:14 pipe
А каталог в котором он находится:
drwxr-x--- 2 root root 72 2007-02-07 23:14 winbindd_privileged
Так что squid не сможет получить доступ к этому файлу... Если сменить права на 775, то самба упадет при старте. Решается эта проблема просто, меняем владельца каталога на пользователь root группа squid
chown root:squid /var/cache/samba/winbindd_privileged
-
Теперь надо написать стартовый скрипт и добавить его в /etc/rc.d/rc.inet2
Это я оставлю вам на домашнее задание...
Можно использовать в качестве примера приведенный выше стартовый скрипт самбы. Но запускать squid пока рано, он не запустится, у нас ведь нет редиректора samsredir.
Это минимум. Для более тонкой настройки squid идем на www.squid-cache.org и читаем документацию. На русском отличное описание параметров конфига squid есть на сайте Богомолова: www.bog.pp.ru. Советую туда зайти и все внимательно почитать.
Теперь осталость создать кэш. Squid держит кэш в каталоге /usr/local/squid/var/cache и логи в каталоге /usr/local/squid/var/logs, хозяином кэша и логов должен быть пользователь от которого работает squid, поэтому меняем владельца этих каталогов:
sudo chmod squid:squid /usr/local/squid/var/cache
sudo chmod squid:squid /usr/local/squid/var/logs
Создаем кэш
/usr/local/squid/sbin/squid -z
Запускаем squid
/usr/local/squid/sbin/squid
Если демон не может запуститься по каким либо причинам, он выводит сообщения об ошибках прямо на консоль. Детальный лог будет лежать в /usr/local/squid/var/logs/cache.log. Если не запустилось смотрим туда внимательно и разбираемся.
SAMS
Настала очередь собственно SAMS.
-
Качаем:
wget http://sams.perm.ru/downloads/sams-20070129.tar.gz
Распаковываем:
tar xzvf sams-20070129.tar.gz
Переходим в распакованый каталог:
cd ./sams-20070129
Дальше:
./configure
sudo make
sudo make install
DESTDIR тут не прокатит поэтому ставим SAMS в /usr/local, в Слаке эти каталоги пустые, так что проблем с удалением не будет.
-
Создаем пользователя MySQL на будущие базы SAMS:
mysql -u root -p
Пишем пароль
Далее в консоли MySQL выполняем:
GRANT ALL ON squidctrl.* TO sams@localhost IDENTIFIED BY "yourpassword";
GRANT ALL ON squidlog.* TO sams@localhost IDENTIFIED BY "yourpassword";
Теперь необходимо создать базы SAMS. Для этого предназначены скрипты create_sams_db и create_squid_db. Они находятся в каталоге /sams-20070129/mysql их надо выполнить и при запросе ввести пароль только что созданного нами пользователя MySQL sams.
-
Правим конфиг sams.
sudo vi /etc/sams.conf
SQUID_DB=squidlog
SAMS_DB=squidctrl
MYSQLHOSTNAME=localhost #ip иди имя машины где лежит база
MYSQLUSER=sams #пользователь базы
MYSQLPASSWORD=pass #пароль к базе
SQUIDCACHEFILE=access.log #имя файла логов squid
SQUIDROOTDIR=/usr/local/squid/etc #путь к конфигу squid
SQUIDLOGDIR=/usr/local/squid/var/logs #путь к логам squid
SAMSPATH=/usr/local #путь к бинарникам sams
SQUIDPATH=/usr/local/squid/sbin #путь к файлу демона squid
RECODECOMMAND=iconv -f KOI8-R -t 866 %finp > %fout
При установке sams должен создать симлинк из root каталога http сервера на каталог web-интерфейса sams. Если этого не произошло исправляем это безобразие:
sudo n -s /usr/local/share/sams /our/path/www/htdocd/sams
-
Настраиваем периодические процессы
Логи будут обрабатываться каждую минуту. В принципе sams это и сам делать умеет, но по крону все-же надежнее будет. Добавляем в /var/spool/cron/crontabs/root
*/1 * * * * /usr/local/bin/sams
Каждый месяц трафик пользователей должен обнуляться. Добавим для этого еще одно задание:
0 0 1 * * /usr/local/sams/bin/sams -c
-
Запускаем демон sams:
/usr/local/bin/samsdaemon
Для того чтоб запускать демон при загрузке добавим эту команду в /etc/rc.d/rc.local
samsdaemon к сожалению не умеет вести логов, но его можно запустить в режиме дебага, с ключом -d, так что если не запустилось пользуемся этой возможностью и разбираемся в чем дело.
Ну вот собственно и все. Теперь в своем любимом браузере набираем http://ip_сервера/sams/, в системе по умолчанию зарегестрирован пользователь Admin с паролем Admin.
SAMS установлен.
Basmach
03.09.2007
|