Установка Ubuntu 12.04 + Squid3 + SAMS2 + NTLM с прозрачной аутентификацией через AD.
Сегодня я постараюсь поделиться своим опытом по установке связки Squid3 + SAMS2 c поддержкой NTLM.
Предварительно мы должны установить все необходимые компоненты.
В качестве веб-сервера apache + php5.
В качестве прокси сервера squid3
Необходимо установить Samba и Winbind
Необходимо установить NTP client
Управление прокси сервером будем осуществлять посредством SAMS2
Устанавливаем все необходимые компоненты в ручную или просто ставим LAMP ((Linux, Apache, MySQL, PHP/Perl), если в начале установки сервера вы пропустили установку LAMP, возможно повторно сделать установку через tasksel.
apt-get install tasksel
tasksell
apt-get update
apt-get upgrade
apt-get install apache2 apache2-doc apache2-utils ssl-cert mysql-server libmysqlclient15-dev libapache2-mod-php5 php5 php5-common php5-dev php5-mcrypt php5-imagick php5-mysql php5-gd squid libpcre3 libpcre3-dev mc
apt-get upgrade
apt-get install apache2 apache2-doc apache2-utils ssl-cert mysql-server libmysqlclient15-dev libapache2-mod-php5 php5 php5-common php5-dev php5-mcrypt php5-imagick php5-mysql php5-gd squid libpcre3 libpcre3-dev mc
Также возможно понадобится скачать и установить библиотеку (libmysqlclient16_5.1.63-0ubuntu0.10.04.1_i386.deb либо libmysqlclient16_5.1.63-0ubuntu0.12.04.1_i386.deb)
Настраиваем DNS на Linux
Переходим к настройки и проверяем наш /etc/resolv.conf какой домен искать и на каком DNS сервере:
domain DOMAIN.LOCAL
search DOMAIN.LOCAL
nameserver 192.168.1.1
nameserver 192.168.1.2
Проверяем что контроллер домена доступен:
1 nslookup serverdc.domain.local
search DOMAIN.LOCAL
nameserver 192.168.1.1
nameserver 192.168.1.2
Проверяем что контроллер домена доступен:
1 nslookup serverdc.domain.local
2 ping serverdc.domain.local
Устанавливаем NTP Client
apt-get install ntp
Необходимо открыть и добавить адреса наших NTP серверов в /etc/ntp.conf
server ntp1.domain.local
server ntp2.domain.local
chkconfig ntpd on
Запускаем ntp клиент
service ntpd start
service ntpd start
Вы сможете проверить статус синхронизации времени с помощью следующих команд.
ntptrace, ntpdc (listpeers, monlist, sysinfo,ctlstats)
apt-get intall krb5-user krb5-config libkrb53 krb5-locales libgssapi-krb5-2
Настройка mcedit /etc/krb5.conf
[libdefaults]
default_realm = DOMAIN.LOCAL
clockskew = 300
ticket_lifetime = 24000
# The following krb5.conf variables are only for MIT Kerberos.
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
[realms]
DOMAIN.LOCAL = {
kdc = serverdc.domain.local
admin_server = serverdc.domain.local
default_domain = DOMAIN.LOCAL
}
[domain_realm]
.domain.local = DOMAIN.LOCAL
domain.local = DOMAIN.LOCAL
[login]
krb4_convert = true
krb4_get_tickets = false
kdc = FILE:/var/log/krb5/krb5kdc.log
admin_server = FILE:/var/log/krb5/kadmind.log
default = SYSLOG:NOTICE:DAEMON
Как проверить, Kerberos правильно ли работает клиент или нет?. Вы сможете сделать это, если выполните команду kinit user и проверите выходные данные.
В результате выполнения быть что-то подобное.
klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: user@DOMAIN.LOCAL
Valid starting Expires Service principal
22/10/2012 00:34 22/10/2012 07:14 krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL
Устанавливаем и настраиваем. SAMBA Winbind
apt-get install samba samba-common winbind
Настраиваем SAMBA
mcedit /etc/samba/smb.conf
[global]
dos charset = 866
unix charset = UTF-8
display charset = CP1251
security = ADS
workgroup = DOMAIN
realm = DOMAIN.LOCAL
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
local master = no
client use spnego = yes
ntlm auth = yes
client ntlmv2 auth = yes
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
Сохраним конфигурацию и перезапустим samba и winbind
/etc/init.d/winbind stop && /etc/intit.d/smbd stop && /etc/init.d/smbd start && /etc/init.d/winbind start
После этого попробуем добавить наш прокси сервер в домен
net ads join -S DOMAIN -U administrator
chkconfig winbind on
Проверка доступности Домена
#wbinfo -p
Проверка аутентификации
# wbinfo -a user%password
Проверка AD домена
# wbinfo -D domain
Проверка Trust Secrets RPC
# wbinfo -t
Вывод информации о пользователе
# wbinfo -i user
# wbinfo -i user
Список пользователей из AD
# wbinfo -u
# wbinfo -u
Список групп из AD
# wbinfo -g
Если все проверки прошли успешно мы можем двигаться дальше.
Установка SQUID3
Перед тем как продолжить настройку необходимо проверить несколько вещей,
SQUID нужно скомпилировать с поддержкой схем авторизации и модулем winbind
enable-auth : утилита, предоставляющая внешний доступ к функции внешней Winbind's NTLM авторизации
enable-basic-auth-helpers : в том числе LDAP и NTLM
enable-ntlm-auth-helpers :
Squid должны иметь возможность доступа к Winbind pipe, которая находится в /var/run/samba/winbindd_privileged/
mkdir -p /var/run/samba/winbindd_privileged || return 1
chgrp proxy $PIDDIR/winbindd_privileged/ || return 1
chmod 0750 $PIDDIR/winbindd_privileged/ || return 1
start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- $WINBINDD_OPTS
Для этого запускаем
/usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
Вводим administrator password Если получен ответ OK значит все отлично.
# wbinfo -g
Если все проверки прошли успешно мы можем двигаться дальше.
Установка SQUID3
apt-get install squid3 squid3-common
Перед тем как продолжить настройку необходимо проверить несколько вещей,
SQUID нужно скомпилировать с поддержкой схем авторизации и модулем winbind
enable-auth : утилита, предоставляющая внешний доступ к функции внешней Winbind's NTLM авторизации
enable-basic-auth-helpers : в том числе LDAP и NTLM
enable-ntlm-auth-helpers :
Squid должны иметь возможность доступа к Winbind pipe, которая находится в /var/run/samba/winbindd_privileged/
Для этого проверяем права если что-то отличное от этого то необходмо дать возможность squid читать данные из pipe
chown root:proxy -R /var/run/samba/winbindd_privileged/
drwxr-x--- 2 root proxy 60 Oct 21 17:47 .
drwxr-xr-x 4 root root 400 Oct 22 01:09 ..
srwxrwxrwx 1 root root 0 Oct 21 17:47 pipe
также необходимо поправить в файле /etc/init.d/winbind группу, иначе после рестартра winbind права на файл в /var/run/samba/winbindd_privileged/ снова будут сброшены и squid не сможет читать данные из файла.
chgrp proxy $PIDDIR/winbindd_privileged/ || return 1
chmod 0750 $PIDDIR/winbindd_privileged/ || return 1
start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- $WINBINDD_OPTS
Необходимо проверить работу helper'а ntlm_auth helper
Для этого запускаем
/usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
Вводим administrator password Если получен ответ OK значит все отлично.
Иначе необходимо смотреть логи
winbindd
Дополнительно можно использовать возможность управлять доступом в Internet из Windows. Для этого можно воспользоваться параметром --require-membership-of=ntlm_auth. Как видно из названия при аутентификации helper будет требовать наличие пользователя в определенной группе.
Далее нам необходимо будет настроить squid3 и привести его к состоянию.
grep -v "^$\|^#" /etc/squid3/squid.conf
mcedit /etc/squid3/squid.conf
Раскомментировать и добавить следующие строчки для включения поддержки ntlm аутентификации в squid3.
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 100
auth_param ntlm keep_alive off
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 100
auth_param basic realm Proxy Autentification Required
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
Данная конфигурация описывает два helper'a один дня IE (ntlmssp) другой для всех остальных пользователей (mozilla, opera, chrome).
Необходимо отметить что для нормальной работы из браузера у пользователя под который работает squid должно хватать прав для обращения к сокету на котором слушает winbindd.
Согласно man ntlm_auth это winbindd_privileged в $LOCKDIR. В моем случае сокет находиться в /var/run/samba/winbindd_privileged. Для решения проблемы я изменил группу владельца этой директории на proxy (смотрите предыдущий абзац).
После этого можно приступать к полноценному тестированию.
Раскомментировать
http_port 3128
Раскомментировать
access_log /var/log/squid3/access.log squid
Раскомментировать
pid_filename /var/run/squid3.pid
Раскомментировать
cache_log /var/log/squid3/cache.log
Раскомментировать
coredump_dir /var/spool/squid3
Раскомментировать эти строчки для того чтобы squid обрывал соединение после превышения лимита по трфику.
quick_abort_min 0 KB
quick_abort_max 0 KB
quick_abort_pct 100
Добавить строчку
visible_hostname name.domain.local
squid3 -z
Перезапустить squid и убедится что squid запустился без ошибок.
Перезапустить squid и убедится что squid запустился без ошибок.
/etc/init.d/squid3 restart
# перечитать конфигурацию
squid3 -k reconfigure
Установка и настройка SAMS2
SAMS2 будем устанавливать из исходников, но также есть готовый deb пакет под Debian.
Готовые Deb пакеты
wget http://nixdev.net/release/sams/devel/packages/debian/sams2_2.0.0-rc2_i386.deb
wget http://nixdev.net/release/sams/devel/packages/debian/sams2-web_2.0.0-rc2_all.deb
wget http://nixdev.net/release/sams/devel/packages/debian/sams2-doc_2.0.0-rc2_all.deb
Для установки deb пакетов - dpkg -i *.deb
Установка из исходников.
1. Скачиваем архив с исходниками - wget http://sams.perm.ru/download/sams-2.0.0-rc1.tar.bz2
2. Разархивирование - tar -xvf sams-2.0.0-rc1.tar.bz2
3. Собираем скрипт конфигурации: make -f Makefile.cvs
squid3 -k reconfigure
Установка и настройка SAMS2
SAMS2 будем устанавливать из исходников, но также есть готовый deb пакет под Debian.
Готовые Deb пакеты
wget http://nixdev.net/release/sams/devel/packages/debian/sams2_2.0.0-rc2_i386.deb
wget http://nixdev.net/release/sams/devel/packages/debian/sams2-web_2.0.0-rc2_all.deb
wget http://nixdev.net/release/sams/devel/packages/debian/sams2-doc_2.0.0-rc2_all.deb
Для установки deb пакетов - dpkg -i *.deb
Установка из исходников.
1. Скачиваем архив с исходниками - wget http://sams.perm.ru/download/sams-2.0.0-rc1.tar.bz2
2. Разархивирование - tar -xvf sams-2.0.0-rc1.tar.bz2
3. Собираем скрипт конфигурации: make -f Makefile.cvs
4. ./configure
5. По окончании работы скрипта вы должны увидеть следующее сообщение:
5. По окончании работы скрипта вы должны увидеть следующее сообщение:
Use MySQL API: yes
Use PostgreSQL API: no
Use unixODBC API: no
Use LDAP API: yes
Using pcre: pcre
Use dynamic plugin: yes
Use PostgreSQL API: no
Use unixODBC API: no
Use LDAP API: yes
Using pcre: pcre
Use dynamic plugin: yes
6. Файл libtool, который генерирует скрипт, нуждается в патче. Набираем “patch -l” и вставляем следующий текст. В конце нужно два раза нажать Ctrl-D, чтобы он понял, что это конец файла.
+++ libtool 2012-02-14 15:55:27.142358890 +0400
@@ -5986,7 +5986,8 @@
case $dir in \
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
- absdir=`cd "$dir" && pwd`
+# absdir=`cd "$dir" && pwd`
+ absdir="/usr/lib"
test -z "$absdir" && \
func_fatal_error "cannot determine absolute directory name of \`$dir'"
dir="$absdir"
8. Устанавливаем: sudo make install
9.Меняем владельца директории sams2 на www-data:
sudo chown www-data:www-data -R /usr/local/share/sams2/
10.В директории /etc/apache2/conf.d/создаем файл со следующим содержимым
Alias /sams2 /usr/local/share/sams2
<Directory /usr/local/share/sams2/>
Options +FollowSymLinks
AllowOverride All
order allow,deny
allow from all
</Directory>
Вносим изменения в файл /usr/local/etc/sams2.conf параметры подключения к базе данных:
имя пользователя для подключения к базе данных
DB_USER=username
пароль
DB_PASSWORD=userpassword
Также в этом файле нужно поменять пути к squid:
SQUIDROOTDIR=/etc/squid3
SQUIDLOGDIR=/var/log/squid3
Делаем symlink (иначе sams не будет работать): sudo ln -s /usr/sbin/squid3 /usr/sbin/squid
Копируем из папки с исходниками скрипт для init.d: sudo cp debian/init.d /etc/init.d/sams2daemon
Даём права на исполнение: sudo chmod o+x /etc/init.d/sams2daemon
Редактируем скрипт /etc/init.d/sams2daemon
Нужно прописать правильный путь к конфигу sams:
SAMSPATH=`cat /usr/local/etc/sams2.conf | grep SAMSPATH | tr “SAMSPATH=” “\0″`
А также включить его:
SAMS_ENABLE=true
Запускаем: sudo /etc/init.d/sams2daemon start or /usr/bin/sams2daemon
Проверяем, что запустился:$ ps aux | grep sams2daemon
root 6386 0.0 0.1 6840 1924 pts/3 S 01:51 0:00 /usr/bin/sams2daemon
root 6382 0.0 0.0 3908 832 pts/3 S+ 01:51 0:00 grep --color=auto sam2daemon
Заходим в админку sams (http://ip-address-proxy/sams2),
стандартные логин и пароль admin и qwerty.
root 6382 0.0 0.0 3908 832 pts/3 S+ 01:51 0:00 grep --color=auto sam2daemon
Заходим в админку sams (http://ip-address-proxy/sams2),
стандартные логин и пароль admin и qwerty.
Привет. Для какого количества пользователей планируется использовать данную связку?
ОтветитьУдалитьНе смущает отсутствие поддержки?
Хай, я внедрил эту связку для небольшой компании порядка 150 пользователей, к сожалению очень сильно расстраивает ситуация, что они перестали поддерживать данный продукт, но нормальной (бесплатной) альтернативы я к сожалению не вижу.
ОтветитьУдалитьДля более крупных компаний и с нормальным бюджетом я бы лучше посмотрел в сторону Bluecoat ProxySG или Kerio, жаль что MS закрыли TMG ветку так можно было бы это решение рассмотреть.
Статья хуево написана. Некоторые действия не понятные, приходилось сидеть вдуплять что же нужно. Например написано "выполните команду kinit user". Откуда я знаю что user это пользователь который должен быть в АД. Бля ну пиздец. Короче реально нормальная додчивая статья тут http://www.k-max.name/windows/active-directory-as-kdc-nfsv4/#krb5
ОтветитьУдалитьНормально статья написана... естессно большинство статей рассчитаны на то что уже что-то понимаешь в линухах... В нете куча статей... да и хелпу можно почитать к команде... И тут статья именно про связку с самсом, а твоя ссыль с самсом общего не имеет ничего.
УдалитьУ кого-нибудь sams2 получилось пропатчить?
ОтветитьУдалитьПатчится по-другому, по ссылке последний пост
ОтветитьУдалитьhttp://forum.ubuntu.ru/index.php?topic=191714.0
pt-get install libodbc1
ОтветитьУдалитьесли же нет то скачаем и установим вручную:
wget http://www.emdebian.org/grip/pool/main/u/unixodbc/libodbc1_2.3.1-1em1_amd64.deb
dpkg -i libodbc1_2.3.1-1em1_amd64.deb
у меня весь веб интерфейс корявый, не показывает половину пунктов, обрезан. Где копать?
ОтветитьУдалитьпосле запуска
ОтветитьУдалитьstart-stop-daemon --start --quiet --oknodo --exec $DAEMON -- $WINBINDD_OPTS
выбивает ошибку start-stop-daemon: unable to stat -- (No such file or directory)
и хотелось бы уточнить что прописано в переменных $DAEMON и $WINBINDD_OPTS