Обо всем

Всё что было и будет интересно

понедельник, 22 октября 2012 г.

Squid3 + SAMS2 + NTLM

Установка Ubuntu 12.04 + Squid3 + SAMS2  + NTLM с прозрачной аутентификацией через AD.

Сегодня я постараюсь поделиться своим опытом по установке связки Squid3 + SAMS2 c поддержкой NTLM.

Предварительно мы должны установить все необходимые компоненты.

В качестве базы данных будем использовать MySQL 5.
В качестве веб-сервера 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

Также возможно понадобится скачать и установить библиотеку (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
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

Вы сможете проверить статус синхронизации времени с помощью следующих команд.
ntptrace, ntpdc (listpeers, monlist, sysinfo,ctlstats)

Устанавливаем и настраиваем. Kerberos client

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

[logging]
kdc = FILE:/var/log/krb5/krb5kdc.log 
admin_server = FILE:/var/log/krb5/kadmind.log 
default = SYSLOG:NOTICE:DAEMON

Как проверить, Kerberos правильно ли работает клиент или нет?. Вы сможете сделать это, если выполните команду kinit user и проверите выходные данные.

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

Проверим работу winbind.

Проверка доступности Домена
#wbinfo -p
Проверка аутентификации
# wbinfo -a user%password
Проверка AD домена
# wbinfo -D domain
Проверка Trust Secrets RPC
# wbinfo -t
Вывод информации о пользователе
# wbinfo -i user
Список пользователей из AD
# wbinfo -u
Список групп из AD
# 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 не сможет читать данные из файла. 

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

Необходимо проверить работу helper'а ntlm_auth helper

Для этого запускаем

/usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic

Вводим administrator password Если получен ответ OK значит все отлично. 
Иначе необходимо смотреть логи winbindd

Далее нам необходимо будет настроить 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 (смотрите предыдущий абзац). 
После этого можно приступать к полноценному тестированию.

Дополнительно можно использовать возможность управлять доступом в Internet из Windows. Для этого можно воспользоваться параметром --require-membership-of=ntlm_auth. Как видно из названия при аутентификации helper будет требовать наличие пользователя в определенной группе. 

Раскомментировать
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

Создать swap.
squid3 -z

Перезапустить 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
4. ./configure
5. По окончании работы скрипта вы должны увидеть следующее сообщение:
Use MySQL API: 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.old 2012-02-14 17:34:10.363994833 +0400 
+++ 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"

7.Cобираем SAMS2: make
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>

Заходим на http://ip-address-proxy/sams2/setup.php настраиваем следуя инструкции.



Вносим изменения в файл /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.

Далее Необходимо сделать настройки через WebInterface...



9 комментариев:

  1. Привет. Для какого количества пользователей планируется использовать данную связку?
    Не смущает отсутствие поддержки?

    ОтветитьУдалить
  2. Хай, я внедрил эту связку для небольшой компании порядка 150 пользователей, к сожалению очень сильно расстраивает ситуация, что они перестали поддерживать данный продукт, но нормальной (бесплатной) альтернативы я к сожалению не вижу.

    Для более крупных компаний и с нормальным бюджетом я бы лучше посмотрел в сторону Bluecoat ProxySG или Kerio, жаль что MS закрыли TMG ветку так можно было бы это решение рассмотреть.

    ОтветитьУдалить
  3. Статья хуево написана. Некоторые действия не понятные, приходилось сидеть вдуплять что же нужно. Например написано "выполните команду kinit user". Откуда я знаю что user это пользователь который должен быть в АД. Бля ну пиздец. Короче реально нормальная додчивая статья тут http://www.k-max.name/windows/active-directory-as-kdc-nfsv4/#krb5

    ОтветитьУдалить
    Ответы
    1. Нормально статья написана... естессно большинство статей рассчитаны на то что уже что-то понимаешь в линухах... В нете куча статей... да и хелпу можно почитать к команде... И тут статья именно про связку с самсом, а твоя ссыль с самсом общего не имеет ничего.

      Удалить
  4. У кого-нибудь sams2 получилось пропатчить?

    ОтветитьУдалить
  5. Патчится по-другому, по ссылке последний пост

    http://forum.ubuntu.ru/index.php?topic=191714.0

    ОтветитьУдалить
  6. 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

    ОтветитьУдалить
  7. у меня весь веб интерфейс корявый, не показывает половину пунктов, обрезан. Где копать?

    ОтветитьУдалить
  8. после запуска
    start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- $WINBINDD_OPTS
    выбивает ошибку start-stop-daemon: unable to stat -- (No such file or directory)
    и хотелось бы уточнить что прописано в переменных $DAEMON и $WINBINDD_OPTS

    ОтветитьУдалить