Имеем:
1. Учетные записи пользователей и групп в LDAP
2. Поднят домен на SAMBA-3.На стороне сервера SQUID конфигурируем:
1. /etc/ldap.conf и /etc/nsswith.conf в результате getent passwd и getent group выдает список пользователей и групп2. минимальный /etc/smb.conf:
[global]
workgroup = domain
netbios name = squid
load printers = no
printcap name = /dev/null
security = domain
password server = sambaserver
local master = no
os level = 33
domain master = no
preferred master = no
wins support = no
winbind use default domain = yes
winbind cache time = 12003. Заводим в домен net -Uadministrator join
4. Запускаем winbind, но при этом в /etc/nsswith.conf его _не_прописываем_
5. разрешаем чтение pipe winbindd процессу squid любым доступным способом,
например: setfacl -g:squid:rx /var/lib/samba/winbindd_privileged6. samba в дальнейшем не нужна
7. далее в squid.conf:
# стандартные опции авторизации
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param ntlm use_ntlm_negotiate off
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off# авторизация обязательна
acl NTLMauth proxy_auth REQUIRED# определяем типы ACL
external_acl_type type_ldap_group1 ttl=60 children=1 %LOGIN
/usr/lib/squid/ squid_ldap_group.pl -b "cn=group1,ou=group,dc=ldap,dc=local" -H ldaps://ldap.local
external_acl_type type_ldap_group2 ttl=60 children=1 %LOGIN
/usr/lib/squid/squid_ldap_group.pl -b "cn=group2,ou=group,dc=ldap,dc=local" -H ldaps://ldap.local
external_acl_type type_ldap_group3 ttl=60 children=1 %LOGIN
/usr/lib/squid/squid_ldap_group.pl -b "cn=group3,ou=group,dc=ldap,dc=local" -H ldaps://ldap.local# и сами ACL
acl acl_group1 external type_ldap_group1
acl acl_group2 external type_ldap_group2
acl acl_group3 external type_ldap_group3ВСЕ. Дальше с ними можно работать как с обычными ACL, начиная от простого
http_access allow acl_group1
и заканчивая в вариантах пула и по времени.При изменении информации в группе LDAP, squid примет изменения только через
время определенное в ttl, таким образом перезапускать его как -kreconfigure нет необходимости, что уже плюс!Да вот еще, сам скрипт /usr/lib/squid/squid_ldap_group.pl очень прост:
#!/usr/bin/perl
#
# squid ldap group
# mailto:afletdinov\@dc.baikal.ru
#use Getopt::Long qw(:config no_ignore_case);
use Net::LDAP;
use strict;# const
my $VERSION = '20051122';# variables
my $ldap;
my $user;
my $result;
#my $pass;my $opt_groupdn = '';
my $opt_binddn = '';
my $opt_bindpasswd = '';
my $opt_secretfile = '';
my $opt_uri = '';GetOptions(
'b=s' => \$opt_groupdn,
'D=s' => \$opt_binddn,
'w=s' => \$opt_bindpasswd,
'W=s' => \$opt_secretfile,
'H=s' => \$opt_uri );# check: requires param
&usage unless($opt_groupdn and $opt_uri);#connect
$ldap = Net::LDAP->new($opt_uri) or die("connect $opt_uri failed!");# bind
if($opt_binddn){# check: secretfile
if($opt_secretfile){
open(FILE, "<$opt_secretfile") or die("error read $opt_secretfile");
$opt_bindpasswd = <FILE>;
close(FILE); }$result = $ldap->bind($opt_binddn, password=>$opt_bindpasswd);
# anonymous bind
}else{ $result = $ldap->bind(); }$result->code and die($result->error);
# use buffers off
$| = 1;# BASIC
while(<STDIN>){
chomp;# format: user password
unless(/^(\S+)\s*(\S*)$/){ print "ERR\n"; next; }$user = $1;
#$pass = $2;# check: valid group
$result = $ldap->search(base=>$opt_groupdn, , filter=>"(memberUid=$user)");# not found
unless($result->count){ print "ERR\n"; next; }# auth: OK group: OK
print "OK\n";
}exit;
sub usage(){
print <<EOF;
squid_ldap_group.pl version $VERSIONUsage: squid_ldap_group.pl -b "cn=www-access,ou=group,dc=ldap,dc=local" -H ldaps://ldap.local
-b GroupBaseDN (REQUIRED)
-H LdapURI (REQUIRED)
-D BindDN
-w BindPasswd
-W SecretFileEOF
exit;
}
URL:
Обсуждается: http://www.opennet.me/tips/info/925.shtml
В группу списки компьютеров трудно включить, сделал второй более удобный вариант:
http://www.opennet.me/openforum/vsluhforumID12/3705.html
кто нибудь пробовал конфигурацию ldap+samba+squid в сети из 200 компов ? только один момент ... сервер на котором стоит squid - это "backup ldap", т.е. на нём стоит "зеркало" основного дерева ldap.
у меня не получилось ... вернее работает, но где то минут 50 ... после этого начинаются проблемы с авторизацией , неуспевает сервер такое колличество запросов обработать
ну так..
кто именно не успевает? У меня сейчас домен на samba + ldap из 80 компов с winxp + 50 клиентов NFSv3 там же.
Правда все на гигабите + оперативки 2Г.
для ldap делать индексы обязательно, для диска elevator=cfq, load average по top в среднем 0.46, samba тоже можно оттюнинговать.
squid начинает писать ошибки ... неможет доставить страницу и т.д. вываливаются ошибки авторизации. проблемы нет, когда squid+ldap+samba на одной машине - тут ваще без проблем, у меня хоть и не 2 Гб ... но всё летает. затык происходит из-за этого "replica" ... наверное тут нужно ковырять, или переносить базу не автоматом. а как то "в ручную", что бы машина со squid+ldap+samba была сама в себе ... тем более она отвечает толкьо за инет. но доделать это не судьба уже :) отпала проблема сама собой.
А вот вы мне скажите, авторизация будет проходить по какой схеме ?
Будет ли сквид при каждом коннекте спрашивать пароль ? Если нет то это оочень хорошо.
>А вот вы мне скажите, авторизация будет проходить по какой схеме ?
>
>Будет ли сквид при каждом коннекте спрашивать пароль ? Если нет то
>это оочень хорошо.
если Вы по NTLM то все как обычно, клиенты которые его поддерживают будут ходить прозрачно.
Хорошо и коротко разобрано введение Linux машины (прокси-сервера) в домен и настройка ntlm авторизации на Squid (т.е. без запроса логина/пароля броузером) тут:
http://wiki.squid-cache.org/ConfigExamples/Authenticate/Ntlm...У меня возникла проблема при вводе в домен
Failed to set servicePrincipalNames.
Которая решилась исправлением /etc/hosts.
Было:
127.0.0.1 my-proxy localhost
Нужно прописать:
127.0.0.1 my-proxy my-proxy.mydomain.local localhostЧтобы Firefox мог проходить ntlm авторизацию, вроде достаточно открыть в адресной строке about:config и изменить параметры на такие:
network.negotiate-auth.delegation-uris = http://,https://
network.negotiate-auth.trusted-uris = http://,https://