Моя статья:
Оригинал на
http://sams.perm.ru/pages/catx.html L-SSSR-MAPL-W
Linux, Sams, Samba, Squid, Rejik, MySql, Apache, PHP, LDAP, Win2K
(Версия 0.7)
Автор: HITMAN
Цель: Необходимо сделать учет трафика и лимиты пользователей прокси сервера Squid, доступ пользователей определять согласно группы на Win2K AD.
Системы: Slackware-Current-20060726, Windows 2003 Server,
Компоненты: sams-20060417, apache_1.3.36, krb5-1.5, heimdal-0.7.2, mysql-5.0.22, openldap-2.3.24, php-5.1.4, rejik-3.2.1, samba-3.0.23a, squid-2.6.STABLE1.
УСТАНОВКА
В принципе подойдет любой более менее нормальный Linux дистрибутив, обязательно наличие компилятора gcc желательно версии 3.4.6 Ставим linux, удаляем стандартные компоненты приведенные выше если таковые имеются, чтобы не возникло конфликта.
Скачиваем компоненты по ссылкам выше. Все скачанные компоненты ложим в /usr/src
Ставим krb5-1.5:
cd /usr/src
tar xvf krb5-1.5-signed.tar
tar xvzf krb5-1.5.tar.gz
cd krb5-1.5/src
./configure --enable-shared
make
make install
Ставим heimdal-0.7.2:
cd /usr/src
tar xvzf heimdal-0.7.2.tar.gz
cd heimdal-0.7.2
./configure
make
make install
Прописываем путь к библиотекам Heimdal в файле /etc/ld.so.conf добавляем строчку:
/usr/heimdal/lib
Набираем комманду ldconfig
Ставим openldap-2.3.24:
cd /usr/src
tar xvzf openldap-2.3.24.tgz
cd openldap-2.3.24
./configure --prefix=/usr \
--enable-cache
make
make install
Ставим mysql-5.0.22:
Заводим в системе пользователя mysql и группу mysql.
cd /usr/src
tar xvzf mysql-5.0.22.tar.gz
cd mysql-5.0.22
./configure --prefix=/usr/local/mysql \
--localstatedir=/usr/local/mysql/data \
--with-mysqld-user=mysql \
--without-debug \
--with-charset=utf8 \
--with-extra-charsets=all \
--enable-assembler \
--with-big-tables \
--enable-thread-safe-client \
--with-openssl
make
make install
Прописываем путь к библиотекам MySql в файле /etc/ld.so.conf добавляем строчку:
/usr/local/mysql/lib/mysql
Набираем комманду ldconfig
Ставим samba-3.0.23a:
cd /usr/src
tar xvzf samba-3.0.23a.tar.gz
cd samba-3.0.23a/source
./configure --enable-static=no \
--enable-shared=yes \
--with-fhs \
--with-acl-support=yes \
--with-automount \
--prefix=/usr \
--localstatedir=/var \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--with-lockdir=/var/cache/samba \
--sysconfdir=/etc \
--with-configdir=/etc/samba \
--with-privatedir=/etc/samba/private \
--with-swatdir=/usr/share/swat \
--with-mysql-prefix=/var/local/mysql \
--with-ldap \
--with-ads \
--with-smbmount \
--with-quotas \
--with-syslog \
--with-utmp \
--with-libsmbclient \
--with-winbind \
--with-winbind-auth-challenge
make
make install
Ставим apache_1.3.36:
cd /usr/src
tar xvzf apache_1.3.36.tar.gz
cd apache_1.3.36
./configure --prefix=/usr/local/apache \
--enable-module=all \
--enable-module=ssl \
--enable-module=so \
--disable-module=auth_dbm \
--with-perl=/usr/bin/perl
make
make install
Ставим php-5.1.4:
cd /usr/src
tar xvjf php-5.1.4.tar.bz2
cd php-5.1.4
./configure --with-mysql=/usr/local/mysql \
--with-mod_charset \
--with-openssl \
--enable-ftp \
--enable-inline-optimization \
--enable-magic-quotes \
--enable-mbstring \
--enable-mm=shared \
--enable-safe-mode \
--enable-track-vars \
--enable-trans-sid \
--enable-wddx=shared \
--enable-xml \
--with-dom \
--with-gd \
--with-apxs=/usr/local/apache/bin/apxs \
--with-snmp \
--with-ldap \
--with-gettext \
--with-ttf=yes \
--with-zlib \
--with-xml \
--enable-force-cgi-redirect \
--with-kerberos \
--enable-discard-path \
--enable-fastcgi --with-xmlrpc
make
make install
Ставим squid-2.6.STABLE1:
Заводим в системе пользователя squid и группу squid.
cd /usr/src
tar xvjf squid-2.6.STABLE1.tar.bz2
cd squid-2.6.STABLE1
./configure --prefix=/usr/local/squid \
--enable-carp \
--enable-icmp \
--enable-delay-pools \
--enable-snmp \
--enable-arp-acl \
--enable-htcp \
--enable-forw-via-db \
--enable-cache-digests \
--enable-linux-netfilter \
--with-large-files \
--enable-default-err-language=Russian-1251 \
--with-samba-sources=/usr/src/samba-3.0.23a \
--enable-auth=ntlm,basic \
--enable-external-acl-helper=ldap_group \
--enable-basic-auth-helpers=LDAP
make
make install
Ставим rejik-3.2.1:
cd /usr/src
tar xvzf redirector-3.2.1.tgz
cd redirector-3.2.1
Правим Makefile с помощю чего угодно vi, vim, joe.
Должно получится так
INSTALL_PATH=/usr/local/rejik3
SQUID_USER=squid
SQUID_GROUP=squid
make
make install
Ставим sams-20060417:
cd /usr/src
tar xvzf sams-20060417.tar.gz
cd sams
./configure --prefix=/usr/local/sams \
--with-httpd-locations=/var/local/apache/htdocs \
--with-mysql-includes=/var/local/mysql/include/mysql \
--with-mysql-libpath=/var/local/mysql/lib/mysql
make
make install
На этом подготовка системы закончена, далее переходим к конфигурации системы.
КОНФИГУРАЦИЯ
KRB5:
cd /etc
touch krb5.conf
Правим krb5.conf чтобы получилось так:
[libdefaults]
default_realm = YOUR.DOMAIN
clockskew = 300
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
[realms]
YOUR.DOMAIN = {
kdc = ip.of.domain.controller:88
admin_server = ip.of.domain.controller:749
}
[domain_realm]
.your.domain = YOUR.DOMAIN
your.domain = YOUR.DOMAIN
MySQL:
Устанавливаем базы MySQL коммандой:
/usr/local/mysql/bin/mysql_install_db
Устанавливаем права на папку баз данных
chown -R mysql:mysql /usr/local/mysql/data
Запускаем MySQL
/usr/local/mysql/share/mysql/mysql.server start
Поставте новый пароль на пользователя root в MySQL коммандой:
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
Samba:
cd /etc/samba
touch smb.conf
Правим smb.conf чтобы получилось так:
workgroup = your
realm = your.domain
netbios name = proxy
server string =
winbind separator = +
winbind use default domain = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
max log size = 50
security = domain
password server = nameofyourpdc
encrypt passwords = yes
dos charset = CP866
unix charset = KOI8-R
nt acl support = yes
nt status support = yes
local master = no
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
Выставляем права для NTLM коммандой:
chown -R root:squid /var/cache/samba/winbindd_privileged
Важно не забудьте добавить на linux запись в файл hosts
linux:
/etc/hosts добавить строчки:
ip.address.of.proxy proxy.your.domain proxy
ip.address.of.pdc nameofpdc.yourdomain nameofpdc
windows:
Заводим пользователя в Active Directory, пользователь должен иметь администраторские права (adminuser).
Добавляем машину в домен командами:
kinit -p "adminuser"
net join
Запускаем samba следующими командами:
smbd
nmbd
winbindd
Проверяем работоспособность командами:
wbinfo -t (Должно выдать checking the trust secret via RPC calls succeeded)
wbinfo -p (Должно выдать Ping to winbindd succeeded on fd 4)
wbinfo -u (Должна вывести список пользоватей)
wbinfo -g (Должна вывести список групп)
Squid:
Заходим в /usr/local/squid/etc и правим файл squid.conf
Добавляем строки:
cache_dir ufs /var/spool/squid 3000 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
pid_filename /var/run/squid/squid.pid
hosts_file /etc/hosts
redirect_program /usr/local/rejik3/redirector /usr/local/rejik3/redirector.conf
redirect_children 30
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of="your+Internet"
auth_param ntlm children 15
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param ntlm use_ntlm_negotiate off
acl proxyusers proxy_auth REQUIRED
http_access allow proxyusers
В параметрах авторизации your и Internet обозначают первая часть названия вашего домена AD your.domain, а Internet обозначает группу пользователей в AD имеющих доступ к интернету. Т.е. вы явно не хотите чтобы все пользователи в AD имели доступ к Интернету, по этому кого надо добавляете в группу Internet и только они смогут им пользоваться.
Создаем папки и выставляем права:
mkdir /var/spool/squid
chown -R squid:squid /var/spool/squid
mkdir /var/log/squid
chown -R squid:squid /var/log/squid
mkdir /var/run/squid
chown -R squid:squid /var/run/squid
chown -R squid:squid /usr/local/rejik3
Создаем кэш Squid:
/usr/local/squid/sbin/squid -z
Запускаем Squid:
/usr/local/squid/sbin/squid
SAMS:
Запускаем скрипт создания mysql пользователя для SAMS
/usr/src/sams/mysql/create_sams_user
Правим /etc/sams.conf должно получится примерно так:
[client]
SQUID_DB=squidlog
SAMS_DB=squidctrl
MYSQLHOSTNAME=localhost
MYSQLUSER=sams
MYSQLPASSWORD=qwerty
SQUIDCACHEFILE=access.log
SQUIDROOTDIR=/usr/local/squid/etc
SQUIDLOGDIR=/var/log/squid
SAMSPATH=/usr/local/sams
SQUIDPATH=/usr/local/squid/sbin
RECODECOMMAND=/usr/bin/iconv -f KOI8-R -t 866 %finp > %fout
LDAPSERVER=ip.of.your.pdc
LDAPBASEDN=YOUR.DOMAIN
LDAPUSER=adminuser
LDAPUSERPASSWD=adminuserpassword
LDAPUSERSGROUP=Internet
REJIKPATH=/usr/local/rejik3
Инсталлируем базы SAMS:
/usr/src/sams/mysql/create_sams_db
/usr/src/sams/mysql/create_squid_db
Apache&PHP:
Правим файл /usr/local/apache/conf/httpd.conf
Добавляем строки:
LoadModule php5_module libexec/libphp5.so
В диркетиве <IfModule mod_dir.c> добавляем index.php
В директиве <IfModule mod_mime.c> добавляем
AddType application/x-httpd-php .php .php3 .p .phtml
Копируем файл настроек php
cp /usr/src/php-5.1.4/php.ini-dist /usr/local/lib/php.ini
Редактируем /usr/local/lib/php.ini
Включаем
register_globals = On
Запускаем apache командой
/usr/local/apache/bin/apachectl start
rc.local:
Делаем автозапуск для всего что мы настроили
Правим файл /etc/rc.d/rc.local
Добавляем строчки:
/usr/local/mysql/share/mysql/mysql.server start
/usr/sbin/smbd
/usr/sbin/nmbd
/usr/sbin/winbindd
/usr/local/apache/bin/apachectl start
/usr/local/sams/bin/samsdaemon
/usr/local/squid/sbin/squid
Создаем symlinks на необходимые программы
ln -s /usr/local/squid/sbin/squid /usr/sbin/squid
ln -s /usr/local/sams/bin/samsdaemon /usr/bin/samsdaemon
ln -s /usr/local/sams/bin/sams /usr/bin/sams
ln -s /usr/local/sams/bin/samsf /usr/bin/samsf
ln -s /usr/local/sams/bin/samsredir /usr/bin/samsredir
Crontab:
crontab -e
Добавляем строки:
#SAMS
*/1 * * * * /var/local/sams/bin/sams >/dev/null 2>&1
0 0 1 * * /var/local/sams/bin/sams -c >/dev/null 2>&1
На этом конфигурация системы закончена.
Настройка SAMS
cd /usr/local/sams/share/sams/src
В файле usersbuttom_1_domain.php в 2 местах и в файле usersbuttom_1_useradd.php надо заменить строку
$userlist=`$WBINFOPATH/wbinfo -u > data/userlist`;
на
$userlist=`/path_to/ldapsearch -x -h ldap.server.ip -p 389 -D user@your.domain -w Password -b "dc=your,dc=domain" -LLL "(memberOf= CN=GroupName,CN=Users,DC=your,DC=domain)" sAMAccountName |grep sAMAccountName|cut -d " " -f 2 > data/userlist`;
Фильтр "(memberOf= CN=GroupName,CN=Users,DC=your,DC=domain)", а именно параметр CN надо подгонят в соответствии с вашим AD для этого рекомендую для начала проанализировать свой AD с помощью какого нибдуь LDAP браузера.
Открываем браузер
вводим адрес
http://ip.of.your.proxy/sams/ попадаем в веб интерфейс настроек SAMS.
Авторизуемся, заходим в SAMS, Администрирование SAMS, нажимаем Настройка SAMS.
Считать трафик: Полный
Преобразовывать DNS имена: поставить галочку
Уровень детализации записей в журнале: 9
Домен по умолчанию: your
Способ аутентификации пользователя: NTLM ( User )
Включить использование домена пользователя: убрать галочку
Домен пользователя в access.log записывть: Без изменения
Имя пользователя в access.log записывать: Без изменения
Используемый сепаратор: снять все галочки
Перекодировать имена пользователей домена: Убрать галочку
Настройка samsdaemon
Проверять наличие команды на реконфигурирование squid каждые: 1
Обрабатывать логи SQUID: Убрать галочку
Редиректор: Rejik
Нажать сохранить изменения
Далее выбираем слева Пользователи
Нажимаем Загрузить всех пользователей домена
Выбираем всех и нажимаем добавить.
Все готово!
Все пожелания, возражения, несогласия, и т.д. просьба посылать на HITMAN
Статья будет периодически обновляться и исправляться
2006 HITMAN