Добрый день господа, думаю, я не открою Америку рассказывая про проект SAMS (Squid Accaunt Management System), статьи о нем достаточно распространены, в том числе и на Хабрахабре. Однако хотя я не расскажу вам много нового, но надеюсь, расскажу немного полезного.
Первая причина написания статьи — помочь собратьям эникейщикам (админам небольших организаций) вроде меня, получить еще одно удобное, а самое главное бесплатное средство администрирования. Вторая причина в том, что попытавшись установить данное средство у себя, по различным HowTo я обнаружил, что они либо не полные, либо устарели и человеку знакомому с линуксом поверхностно (как я) получить что либо более менее работоспособное по ним невозможно, поэтому получив результат, решил поделиться с новичками.
Задачи
Итак, данное пошаговое HowTo ставит свой целью привести вас к собственному прозрачному прокси-серверу на CentOS 6.4 i386 который позволяет аутентифицировать пользователей через Active Directory. При этом данный сервер будет иметь удобный веб-интерфейс, и самое главное, он бесплатен (кого я этим хочу удивить в топике никсов?).
Немного о SAMS
Лучше всего, конечно же, прочитать официальный ресурс sams.perm.ru. Для меня SAMS это удобная считалка трафика и лог серфинга пользователей с красивым веб-интерфейсом. Но все же о плюсах и минусах (а они, разумеется, есть) SAMS и стоит ли его использовать судить только вам.
Сложности при установке
Основная проблема в установке SAMS то, что стабильная первая версия (а в настоящий момент энтузиасты продолжают разработку SAMS2, надеюсь, у них все получится) давненько не обновлялась поэтому требует установки старых библиотек не из стандартных репозиториев. “Какая глупость!” — скажете вы и будете не совсем правы, ибо как я уже говорил статья, прежде всего, новичкам совсем не знакомым с линуксом. Так же одной из проблем стало то, что HowTo по установке на CentOS(выбор ОС не тема данной статьи, так сложилось) я не нашел.
Подготовка к установке
Разумеется прежде всего необходимо скачать образ CentOS 6.4 (последний на данный момент) по ссылке isoredirect.centos.org/centos/6/isos/i386/. Далее все стандартно записываем диск и производим установку в минимальной конфигурации на наш будущий шлюз. В процессе установки необходимо сделать следующее:
- Ввести имя нашего сервера.
- Настроить сеть (удобнее это сделать здесь в графическом интерфейсе, чем потом править файлы конфигурации, хотя это дело привычки).
- Установить параметры времени.
- Установить пароль суперпользователя root.
Настройка ОС
После перезагрузки заходим в систему под суперпользователем. Дальнейшие действия я произвожу от его имени.
- Если забыли или неправильно настроили сеть, то правим конфигурацию сетевых интерфейсов ifcfg-eth0, ifcfg-eth1 (у нас же шлюз так что интерфейсов, очевидно, не менее двух)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
Пример конфигурационного файла:
DEVICE=«eth0»
BOOTPROTO=none
NM_CONTROLLED=«yes»
ONBOOT=«yes»
TYPE=«Ethernet»
UUID=«57fb7ee8-e3da-4719-b5ec-d27e16fe0677»
HWADDR=6C:62:6D:B7:F0:A3
IPADDR=192.168.0.86
PREFIX=24
GATEWAY=192.168.0.3
DNS1=192.168.0.2
DNS2=192.168.0.3
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=«System eth0» - Установка программ первой необходимости:
yum install mc nano wget ntp -y
- Настройка синхронизации времени. В качестве серверов времени указываем контроллеры домена:
ntpdate ntpserver vi /etc/ntp.conf
Пример конфигурационного файла:
server 192.168.0.1
- останавливаем iptables:
service iptables stop chkconfig iptables off
- Обновляем систему:
yum makecache && yum -y update
- Отключаем selinux. В файле /etc/sysconfig/selinux поставить
vi /etc/sysconfig/selinux
SELINUX=disabled
- Перезагрузить сервер командой:
shutdown -r now
Установка требуемых библиотек
- Теперь добавим репозиторий CentOS 5:
export http_proxy=127.0.0.1:3128 rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm
- И установим оттуда libmysqlclient15:
yum install libmysqlclient15 --enablerepo=webtatic
- В некоторых случаях требуется для каких-либо старых скриптов понижение версии PHP 5.3.3 до версии 5.2.17. Для проведения установки наиболее оптимально воспользоваться репозиторием Atomic. Установка производилась на свежепоставленный сервер, ниже приведен порядок действий.
- Подключите репозиторий Atomic
wget http://www.atomicorp.com/installers/atomic sh atomic
- И принять лицензию скрипта установки (нажать enter)
- Далее следует отключить в подключенных стандартных репозиториях системы возможность установки пакетов содержащих файлы PHP. Воспользуйтесь редактором и отредактируйте файл /etc/yum.repos.d/CentOS-Base.repo внеся изменения (добавив exclude=php*) в указанные секции
vi /etc/yum.repos.d/CentOS-Base.repo
[base]
exclude=php*
[updates]
exclude=php* - После чего сохраните файл (:wq) и удалите пакеты установленного PHP 5.3.3 выполнив команду в shell
yum remove php*
- После того как будет удален PHP (также по зависимостям удалится phpmyadmin и squirrelmail) необходимо будет провести установку нужной версии и сопутствующих расширений командами
yum install php-5.2.17 php-mcrypt-5.2.17 php-gd-5.2.17 php-mbstring-5.2.17 php-pdo-5.2.17 php-mysql-5.2.17
- Убедитесь, что все необходимые расширения установлены и нет ошибок
php -m
- Затем установите обратно PhpMyAdmin и squirrelmail
yum install phpmyadmin yum install squirrelmail
- Верните файлы конфигурации на место
mv /etc/phpMyAdmin/config.inc.php.rpmsave /etc/phpMyAdmin/config.inc.php mv /etc/squirrelmail/config.php.rpmsave /etc/squirrelmail/config.php mv /etc/httpd/conf.d/squirrelmail.conf.rpmsave /etc/httpd/conf.d/squirrelmail.conf
- После чего следует отключить возможность автоматической установки расширений PHP из репозитория atomic для избежания незапланнированной смены версии PHP при установке какого-либо программного обеспечения — отредактируйте файл /etc/yum.repos.d/atomic.repo также как редактировали файлы других репозиториев
vi /etc/yum.repos.d/atomic.repo
[atomic]
exclude=php* - И в завершение следует перезапустить веб-сервер Apache командой
/etc/init.d/httpd restart
Если потребуется установить какие-либо расширения PHP дополнительно наиболее простой способ ставить из через rpm скачав сhttp://www2.atomicorp.com/channels/atomic/centos/6/i386/RPMS/
Установка и настройка SAMS
- Установка ПО:
yum install pcre-devel squid mysql-server mysql-devel gd-devel gcc make samba-server samba-client samba bind-utils –y
- Добавляем необходимое в автозагрузку:
chkconfig mysqld on && chkconfig httpd on && chkconfig squid on
- Cоздаем темповую директорию для сборки SAMS:
mkdir -p /usr/src/sams cd /usr/src/sams
- Качаем STABLE версию SAMS (Документация по SAMS):
wget http://nixdev.net/release/sams/sams-1.0.5.tar.bz2
если не работает ссылка, то можно попробовать
wget http://sams.perm.ru/index.php?option=com_doqment&task=files.download&cid=12
Распаковываем архив и устанавливаем
tar xf sams-1.0.5.tar.bz2 cd sams-1.0.5 ./configure && make && make install chkconfig sams on cd / && rm -fr /usr/src/sams
Альтернативный способ установки:Качаем STABLE версию SAMS (Документация по SAMS), собранный пакет для CentOS (сам добавляет веб-директорию для apache)wget http://www.nixdev.net/release/sams/packages/CentOS_5/i386/sams-1.0.5-91.1.i386.rpm yum localinstall –nogpgcheck sams-1.0.5-91.1.i386.rpm chkconfig sams on cd / && rm -fr /usr/src/sams
- Далее настраиваем Apache, добавляем в /etc/httpd/conf.d/sams.conf
vi /etc/httpd/conf.d/sams.conf
Alias /sams /usr/local/share/sams
<Directory /usr/local/share/sams/>
Order Allow,Deny
Allow from all
Deny from nonevi /etc/httpd/conf/httpd.conf
раскомментируем и указываем для переменной ServerName указываем имя нашего шлюза
ServerName Proxy-????
Если неудобно использовать редактор vi,то можно воспользоваться редактором nano или воспользоваться фаловым менеджером Midnight Commander, команда mc (Редактирование файла F4). Чтобы выйти из программы vi набрать :w q или просто :x! Если надо выйти без сохранения, набрать :q!(nano /etc/httpd/conf.d/sams.conf)
- После того, как был добавлен sams.conf необходимо перезапустить Apache:
service httpd restart
- Следом редактируем /etc/sams.conf, в котором меняем всего две записи:
vi /etc/sams.conf
MYSQLPASSWORD= «ПАРОЛЬ» #(Для пользователя SAMS)
MYSQLVERSION=5.0 #(Мы используем 5 версию MySQL сервера, при значении 4.0 возможны проблемы)Так же закомментируйте все, что связано с squidguard, ldap и rejik (если не планируете использовать)
- Далее на очереди MySQL, запускаем сервер и делаем все то, что предложит скрипт первого запуска, то есть задаем пароль root и после инсталляционную настройку сервера:
/usr/bin/mysql_secure_installation service mysqld start
- Создаем MySQL пользователя sams и даем ему права на необходимые таблицы:
mysql -u root -p
Ввести «ПАРОЛЬ» для root в mysql
GRANT ALL ON squidctrl.* TO sams@localhost IDENTIFIED BY «ПАРОЛЬ» WITH GRANT OPTION; GRANT ALL ON squidlog.* TO sams@localhost IDENTIFIED BY «ПАРОЛЬ» WITH GRANT OPTION; flush privileges; quit
- Чтобы скрипты создания баз выполнились на mysql 5 необходимо их отредактировать
#Заменяем везде TYPE=MyISAM на ENGINE=MyISAM
/usr/local/share/sams/data/sams_db.sql
/usr/local/share/sams/data/squid_db.sql - Вливаем дампы SAMS в базу:
mysql -u root -p < /usr/local/share/sams/data/sams_db.sql mysql -u root -p < /usr/local/share/sams/data/squid_db.sql
- Настала очередь Squid, собираем squid swap, и уже после запускаем прокси-сервер.
vi /etc/squid/squid.conf
найти и отредактировать следующие строки
visible_hostname Proxy-????
при отсутствии добавить строки
redirect_program /usr/local/bin/samsredir
redirect_children 5
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp #NTLM аутентификатор
auth_param ntlm children 150 #(Количество одновременно сидящих в инете пользователей!)
auth_param ntlm keep_alive on
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 20
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 8 hoursПерезапускаемся и стартуем squid
squid –z reboot service squid start
- C версии 1.0 SAMS работает в safe_mode php. Настриваем php для работы в режиме safe mode
vi /etc/php.ini
содержание файла
safe_mode = On
safe_mode_exec_dir = "/usr/local/share/sams/bin"
disable_functions = # если он не пустой, убираем из него запрет вызова функций phpinfo system shell_exec exec - Ну и в самом конце запускаем SAMS:
service sams start
Ввод шлюза в домен
- Редактируем файл (добавляем список контроллеров своего домена)
vi /etc/samba/lmhosts
«IP_адрес_DC1» «Сетевое_имя_DC1» #(например: 192.168.100.8 serverDC01)
«IP_адрес_DC2» «Сетевое_имя_DC2» - Редактируем файл конфигурации самба
vi /etc/samba/smb.conf
[global]
workgroup = «Имя_Домена» #(например: serverDC01)
realm = «FQDN_домена» #(например: serverDC01.firma.ru)
server string = Samba Server Version %vnetbios name = Proxy-???? #имя шлюза
interfaces = lo eth0 «IP_адрес_интерфейса + маска» #(например: 192.168.10.1/24)
hosts allow = 127. 192.168.winbind separator = \
winbind use default domain = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
template homedir = /home/winnt/%D/%U
template shell = /bin/bash
max log size = 50
security = domain
password server = «IP_адрес_DC1» «IP_адрес_DC1» #(например:192.168.100.8 192.168.100.10 обязательно через пробел)
encrypt passwords = yes - Перестартовать сервис и ввести в домен
service smb restart net join –w «Имя_Домена» –S «Сетевое_имя_DC» –I «IP_адрес_DC» –U «Имя_пользователя_с_ правами_введения_в_домен»
- Перезапустить службы и проверить отклик от домена
service smb restart
- service winbind start
wbinfo –t wbinfo –p wbinfo -u
Если все в порядке, добавляем в автозагрузку
chkconfig smb on && chkconfig winbind on
- Добавляем примерно в середине правил разрешающие правила для iptables firewall в /etc/sysconfig/iptables и перезапустить его:
vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 3128 -j ACCEPT
Альтернатива:
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT #правило для 80 порта на http
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT #правило для 3128 порта проксиservice iptables restart
Если, по каким-то причинам, необходимо отключить firewall, то надо набрать:
chkconfig iptables off chkconfig ip6tables off
Настройка SAMS
- В браузере зайти на страницу Proxy-????/sams/ (либо по ip-адресу)
- Логин: admin
Пароль: qwerty
Нужно изменить пароль. - Далее я решил не утомлять уважаемых читателей многочисленными картинками и очевидными подробностями окончательной настройки через web-интерфейс, тем более что эту работу за меня уже сделали (в том числе тут habrahabr.ru/post/130335/).
Заключение
Осознавая, что в тексте много букоф и что нельзя объять необъятное, заканчиваю данную статью. Надеюсь, что данное руководство будет вам полезным.
Автор: 4wert