Skip to content

Document Header

Squid и LDAP-аутентификация из Active Directory Samba 4 server (squid ldap auth proxy)

Squid и LDAP-аутентификация из Active Directory Samba 4 server (squid ldap auth proxy) published on 7 комментариев к записи Squid и LDAP-аутентификация из Active Directory Samba 4 server (squid ldap auth proxy)

Данная статья повествует как подружить squid через единственный ldap_auth helper (fix me если знаете другой способ), который работает с группами AD. Причем в свежих версиях squid, установленных из пакетов для моего дистрибутива я уже этого хелпера не нашел. Так же я описал еще один способ авторизации squid пользователей, через radius.

В samba 3 я использовал ntlm_auth helper, который позволял прозрачно авторизоваться в домене для линейки браузеров IE, но ничего не знал про доменные группы. Был проект sams, который частично решал проблемы с группами, создавая собственные.

Для samba 4 интересно было бы использовать ldap_auth helper, и настраивать разграничение прав доступа для доменных групп, однако ни один браузер не умеет авторизовываться прозрачно. Требуется пароль на каждое открытие браузера. Сохранение паролей, если и возможно, то через костыли. Что на мой взгляд теряет всякий смысл. Поэтому не знаю насколько имеет смысл рекомендовать данное решение для промышленного применения. Тем не менее, если для кого-то ввод пароля не является проблемой, то с проверенной статьей можно познакомиться здесь.

7 комментариев

Не работает…

Ось: Ubuntu 13.04
Samba: 4.0.0
provision: samba-tool domain provision \—realm=ODM.LAN \—domain=ODM \—adminpass=’Pa$$w0rd’ \—dns-backend=BIND9_DLZ \—server-role=dc \—use-xattr=yes \—use-rfc2307 \—host-ip=10.1.1.1

Squid: 3.1.20


/usr/lib/squid3/squid_ldap_auth -u cn -b "cn=Users,dc=odm,dc=lan" 10.1.1.1
Administrator Pa$$w0rd
OK


/usr/lib/squid3/squid_ldap_group -d -R -b "DC=odm,DC=lan" -f "(&(objectClass=user)(CN=%v)(memberOf=CN=%a,CN=Users,DC=odm,DC=lan))" odm-gw-srv01.odm.lan -D "ldapuser@odm.lan" -w "Pa$$w0rd" -K
ldapuser Internet
Connected OK
group filter '(&(objectClass=user)(CN=ldapuser)(memberOf=CN=Internet,CN=Users,DC=odm,DC=lan))', searchbase 'DC=odm,DC=lan'
squid_ldap_group WARNING, LDAP search error 'Operations error'
ERR

А если так:

/usr/lib/squid3/squid_ldap_group -R -b "DC=odm,DC=lan" -f "(&(sAMAccountName=%v)(memberOf=CN=%a,CN=Users,DC=odm,DC=lan))" -D ldapuser@odm.lan -w Pa$$w0rd 10.1.1.1
?


/usr/lib/squid3/squid_ldap_group -R -b "DC=odm,DC=lan" -f "(&(sAMAccountName=%v)(memberOf=CN=%a,CN=Users,DC=odm,DC=lan))" -D ldapuser@odm.lan -w Pa$$w0rd 10.1.1.1
ldapuser Internet
squid_ldap_group WARNING, could not bind to binddn 'Invalid credentials'
ERR

Эта ошибка возникает потому, что ваш пользователь ldapuser не может читать ldap каталог. Либо его (пользователя ldapuser) не существует в AD, либо указан неправильный пароль, либо что-то еще. Попробуйте войти (залогиниться) данным пользователем в домен. Если все нормально сделайте под ним:

ldapsearch -h localhost -W -x -D "cn=ldapuser,cn=Users,dc=odm,dc=lan" -b "cn=Users,dc=odm,dc=lan" sAMAccountName=ldapuser
должен выдать инфо из каталога по этому пользователю
В случае проблемы с пользователем/паролем будет:
ldap_bind: Invalid credentials (49)
additional info: Simple Bind Failed: NT_STATUS_LOGON_FAILURE

ldapsearch -h localhost -W -x -D "cn=ldapuser,cn=Users,dc=odm,dc=lan" -b "cn=Users,dc=odm,dc=lan" sAMAccountName=ldapuser

Я знаки запятых поменял с вашими пишет:

ldapsearch -h localhost -W -x -D «cn=ldapuser,cn=Users,dc=odm,dc=lan» -b «cn=Users,dc=odm,dc=lan» sAMAccountName=ldapuser
Enter LDAP Password:
ldap_bind: Invalid credentials (49)
additional info: Simple Bind Failed: NT_STATUS_LOGON_FAILURE

Если поменять знаки:


root@odm-gw-srv01:~# ldapsearch -h localhost -W -x -D "cn=ldapuser,cn=Users,dc=odm,dc=lan" -b "cn=Users,dc=odm,dc=lan" sAMAccountName=ldapuser
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: sAMAccountName=ldapuser
# requesting: ALL
#

# ldapuser, Users, odm.lan
dn: CN=ldapuser,CN=Users,DC=odm,DC=lan
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: ldapuser
givenName: ldapuser
instanceType: 4
whenCreated: 20130605215150.0Z
displayName: ldapuser
uSNCreated: 3778
name: ldapuser
objectGUID:: QMSGZGXSdUGAR2AacA4LBQ==
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 0
lastLogoff: 0
lastLogon: 0
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAfzPO90Z+Kaldm9cpUQQAAA==
accountExpires: 9223372036854775807
logonCount: 0
sAMAccountName: ldapuser
sAMAccountType: 805306368
userPrincipalName: ldapuser@odm.lan
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=odm,DC=lan
pwdLastSet: 130149427100000000
lockoutTime: 0
memberOf: CN=InternetAccess,CN=Users,DC=odm,DC=lan
msDS-SupportedEncryptionTypes: 0
userAccountControl: 66048
whenChanged: 20130605215602.0Z
uSNChanged: 3788
distinguishedName: CN=ldapuser,CN=Users,DC=odm,DC=lan

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Залогинился в домейн с W8 клиента без проблем.
Самбу ставил так:


sudo su -
# http://iabsis.com/EN/article/35-1/Requirements
echo -e "deb http://inverse.ca/ubuntu precise precise\n\deb-src http://inverse.ca/ubuntu precise precise" > /etc/apt/sources.list.d/SOGo.list

vim /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto WAN
iface WAN inet dhcp

#The secondary network interface
auto LAN
iface LAN inet static
address 10.1.1.1
netmask 255.255.255.0
network 10.1.1.0
broadcast 10.1.1.255
dns-nameservers 10.1.1.1 #192.168.1.1
dns-search odm.lan

vim /etc/hosts
127.0.0.1 localhost
10.1.1.1 ODM-GW-SRV01 ODM-GW-SRV01.ODM.LAN

vim /etc/fstab

Ищем что то вроде:

/dev/mapper/odm-gw-srv01 / ext4 errors=remount-ro 0 1

заменим на (внимание между единицами табы!):

/dev/mapper/odm-gw-srv01 / ext4 errors=remount-ro,acl,user_xattr,barrier=1 1 1

apt-get update && apt-get upgrade -y
apt-get build-dep samba4
apt-get install samba4 #выбираем DC
service samba4 stop

rm /etc/samba/smb.conf
rm -R /var/lib/samba/private/*
rm -R /var/lib/samba/sysvol/*

samba-tool domain provision \--realm=ODM.LAN \--domain=ODM \--adminpass='Pa$$w0rd' \--dns-backend=BIND9_DLZ \--server-role=dc \--function-level=2008_R2 \--use-xattr=yes \--use-rfc2307 \--host-ip=10.1.1.1 \--simple-bind-dn=ODM.LAN \--ipaddress=10.1.1.1

sudo vim /etc/samba/smb.conf

# Обязательно добавить в строчку [global] smb:
server services = smb, s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate

# Иначе smbclient работать откажется.

# А так же если NIC больше чем одна:
interfaces = 10.1.1.1/24 LAN lo 127.0.0.1 .
bind interfaces only = yes
allow dns updates = True

service samba4 restart

apt-get install samba4-clients smbclient samba-common-bin
# Сейчас на apt-get на samba4-clients ругается, но smbclients ставит без проблем.

smbclient -L localhost -U%

chmod 755 /var/lib/samba/sysvol/odm.lan/scripts #в случае если:

smbclient //10.1.1.1/netlogon -UAdministrator%'Pa$$w0rd' -c 'ls'
#не работает.

Далее DNS - Bind9.8.1-p1. Этот пакет ставится автоматически с самба4 сейчас.

vim /etc/bind/named.conf
include "/var/lib/samba/private/named.conf";

vim /etc/bind/named.conf.options
#строчки должны быть именно в таком порядке:

tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";

allow-query { any; };
allow-recursion { any; };
forwarders { 192.168.1.1; };

dnssec-validation auto;

vim /etc/default/bind9

OPTIONS="-4 -u bind"

sudo vim /etc/apparmor.d/usr.sbin.named
#Samba and Bind9 64 bits modules
/var/lib/samba/private/** rkw,
/var/lib/samba/private/dns/** rkw,
/usr/lib/x86_64-linux-gnu/samba/bind9/** rm,
/usr/lib/x86_64-linux-gnu/samba/gensec/** rm,
/usr/lib/x86_64-linux-gnu/ldb/modules/ldb/** rm,
/usr/lib/x86_64-linux-gnu/samba/ldb/** rm,
}

Здесь желательно перезагрузить систему, либо сервисы samba4, apparmor, bind9.

Тесты:
host -t SRV _ldap._tcp.odm.lan.
host -t SRV _kerberos._tcp.odm.lan.
host -t A odm-gw-srv01.odm.lan

# Проблеммы с rndc и тд? Смотрим в /var/log/syslog

# Настройка kerberos:
apt-get install krb5-user
# Часто достаточно ввести Realm: ODM.LAN
ODM-GW-SRV01.ODM.LAN
10.1.1.1
ODM-GW-SRV01

kinit administrator@ODM.LAN
klist -e

# И плюшка DNS reverse zone
kinit administrator@ODM.LAN
samba-tool dns zonecreate 10.1.1.1 1.1.10.in-addr.arpa

kinit administrator@ODM.LAN
samba-tool dns add 10.1.1.1 1.1.10.in-addr.arpa 1 PTR odm-gw-srv01.odm.lan

# NTP - время:

apt-get install ntp
ntpq -p

У меня такое ощущение что я где то в самбе упускаю какой то параметр. Так как вот это:
http://iabsis.com/EN/article/35-7/iGestis-installation-optional
и (nssswitch/getent)
http://www.linuxgfx.co.uk/karoshi/documentation/wiki/index.php?title=Samba4_Testing
Так же не могут соединится с Самбой.
Firewall отключен.

С кавычками я действительно напутал. Правильные " " Теперь буду более внимателен :=)
ldapsearch от пользователя ldapuser каталог читает — это хорошо.
Свидетельство тому:

# ldapuser, Users, odm.lan
dn: CN=ldapuser,CN=Users,DC=odm,DC=lan
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: ldapuser
givenName: ldapuser
instanceType: 4
whenCreated: 20130605215150.0Z
displayName: ldapuser
uSNCreated: 3778
name: ldapuser
objectGUID:: QMSGZGXSdUGAR2AacA4LBQ==
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 0
lastLogoff: 0
lastLogon: 0
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAfzPO90Z+Kaldm9cpUQQAAA==
accountExpires: 9223372036854775807
logonCount: 0
sAMAccountName: ldapuser
sAMAccountType: 805306368
userPrincipalName: ldapuser@odm.lan
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=odm,DC=lan
pwdLastSet: 130149427100000000
lockoutTime: 0
memberOf: CN=InternetAccess,CN=Users,DC=odm,DC=lan
msDS-SupportedEncryptionTypes: 0
userAccountControl: 66048
whenChanged: 20130605215602.0Z
uSNChanged: 3788
distinguishedName: CN=ldapuser,CN=Users,DC=odm,DC=lan

Тем более, что и squid_auth у вас отработал корректно, следовательно и squid_ldap_group должен работать…

Единственное ваш пользователь ldapuser входит в группу InternetAccess, а в запросе вы пишете squid_ldap_group … ldapuser Internet поэтому он д.б. написать ERR.

Т.е. давайте еще раз попробуем с учетом кавычек и пользователя/группы, перепроверьте еще раз внимательно пароль. У меня такая же ошибка возникает, если он указан неверно. Еще раз команда:

/usr/lib/squid3/squid_ldap_group -R -b "DC=odm,DC=lan" -f "(&(sAMAccountName=%v)(memberOf=CN=%a,CN=Users,DC=odm,DC=lan))" -D ldapuser@odm.lan -w Pa$$w0rd 127.0.0.1
ldapuser InternetAccess

тоже будет invalid credentials?

Если ошибка сохранится, то напишите пожалуйста еще раз, а то я немного запутался:
Что говорит host -t A, резолвит?
Что говорит klist, key/ticket показывает?
Что скажет smbclient //localhost/netlogon -UAdministrator%'Pa$$w0rd' -c 'ls' ?

Думаю удобнее будет обсуждать далее в формате форума http://forum.samba4.ru
Пожалуй, создайте тему в разделе squid, если мы сейчас решаем эту проблему….

Добавить комментарий