The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"squid+ldap+samba"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Настройка Squid и других прокси серверов (Public)
Изначальное сообщение [Проследить за развитием треда]

"squid+ldap+samba" 
Сообщение от Atomic Искать по авторуВ закладки(??) on 21-Дек-05, 15:27  (MSK)
Всем доброго вечера.
Возник вопрос по поводу аутентификации пользователей squid через Ldap сервер, существующих пользователей самбы в Ldap(samba pdc).

Надо что бы squid_ldap_auth проверял пользователся на наличие его в группе и еще несколько атрибутов, а так же что бы не запрашивал логин и пароль пользователся при обращении к странице т.е. чтобы не срабатывала аутентификация squid.
Ну и соответственно что бы логи были с именами пользователей.
На ntlm_auth у меня все работает отлично.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

  • squid+ldap+samba, dsl, 07:34 , 28-Дек-05, (1)  
  • squid+ldap+samba, dsl, 07:36 , 28-Дек-05, (2)  

Сообщения по теме [Сортировка по времени, UBB]

1. "squid+ldap+samba" 
Сообщение от dsl emailИскать по авторуВ закладки on 28-Дек-05, 07:34  (MSK)
у меня так.


1. файл squid.schema:
##
## schema file for OpenLDAP 2.x (unofficial)
## Schema for storing Squid maps in LDAP
##
attributetype ( 1.1.2.1.1.1
        NAME 'squidMapKey'
        DESC 'key (left hand side) of an aliases or map entry'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
attributetype ( 1.1.2.1.1.2
        NAME 'squidMapName'
        DESC 'identifier for the particular map'
        EQUALITY caseIgnoreMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} SINGLE-VALUE )
attributetype ( 1.1.2.1.1.3
        NAME 'squidMapValue'
        DESC 'value (right hand side) of a map entry'
        EQUALITY booleanMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE )
attributetype ( 1.1.2.1.1.4
        NAME 'squidMapLimit'
        DESC 'value (right hand side) of a map limit'
        EQUALITY integerMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
objectclass ( 1.1.2.2.1.1
        NAME 'squidMap'
        SUP top AUXILIARY
        DESC 'squid map definition'
        MUST squidMapName
        MAY ( Description $ squidMapLimit ) )
objectclass ( 1.1.2.2.1.2
        NAME 'squidMapObject'
        SUP squidMap AUXILIARY
        DESC 'squid map object'
        MUST ( squidMapName $ squidMapKey $ squidMapValue )
        MAY ( Description $ squidMapLimit ) )

2. скрипт squid_ldap.map.pl:
#!/usr/bin/perl
#
# squid ldap map
#
use Getopt::Long qw(:config no_ignore_case);
use Net::hostent;
use Net::LDAP;
#use strict;
# const
my $VERSION = '20051123';
# variables
my $ldap;
my $object;
my $result;
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; }
    $object = $1;
    
    # rules %SRC
    if($object =~ m/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){
        # check IP or gethost(IP)
        my ($host, undef) = @{gethost($object)};
        if(check_object($object) or check_object($host)){
            print "OK\n";
            next;
    $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; }

    $object = $1;
    
    # rules %SRC
    if($object =~ m/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){
        # check IP or gethost(IP)
        my ($host, undef) = @{gethost($object)};
        if(check_object($object) or check_object($host)){
            print "OK\n";
            next;
            next;
        }
        print "ERR\n";
        next;
    }
    # rules %LOGIN
    if(check_object($object)){
        # return: OK
        print "OK\n";
    
    }else{
        # return: ERR
        print "ERR\n";
    }
}
sub check_object(){
    my $value = shift;
    
    # check: valid object
    $result = $ldap->search(
                base=>"squidMapKey=$value," . $opt_groupdn,
                filter=>"(objectClass=squidMapObject)",
                attrs=>['squidMapValue']  );
    # return: OK
    return 1 if($result->count and ($result->entry->get_value('squidMapValue') eq 'TRUE'));
    return 0;
}
sub usage(){
    print <<EOF;
squid_ldap_map.pl version $VERSION
Usage: squid_ldap_map.pl -b "squidMapName=users,ou=squid,dc=ldap,dc=local" -H ldaps://ldap.local
        -b squidMapNameDN (REQUIRED)
        -H LdapURI        (REQUIRED)
        -D BindDN    
        -w BindPasswd
        -W SecretFile
EOF
    exit;
}
3. конфигурация 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
acl NTLMauth proxy_auth REQUIRED
external_acl_type type_users_map ttl=10  children=1 %LOGIN /usr/lib/squid/squid_ldap_map.pl -b "squidMapName=users,ou=squid,dc=ldap,dc=local" -H ldaps://ldap.local
external_acl_type type_computers_map ttl=10  children=1 %SRC /usr/lib/squid/squid_ldap_map.pl -b "squidMapName=computers,ou=squid,dc=ldap,dc=local" -H ldaps://ldap.local
acl acl_allow_users external type_users_map
acl acl_allow_comps external type_computers_map
# политика поведения самое простое к примеру
http_access deny !acl_allow_comps
http_access allow acl_allow_users
http_access deny all
4. сами списки в ldap к примеру так squid.ldif:
dn: ou=squid,dc=ldap,dc=local
objectClass: top
objectClass: organizationalUnit
ou: squid
dn: squidMapName=users,ou=squid,dc=ldap,dc=local
objectClass: top
objectClass: squidMap
objectClass: organizationalUnit
ou: squid
squidMapName: users
dn: squidMapKey=afletdinov,squidMapName=users,ou=squid,dc=ldap,dc=local
objectClass: top
objectClass: squidMap
objectClass: squidMapObject
objectClass: organizationalUnit
squidMapName: users
ou: squid
squidMapKey: afletdinov
squidMapValue: TRUE
dn: squidMapName=computers,ou=squid,dc=ldap,dc=local
objectClass: top
objectClass: squidMap
objectClass: organizationalUnit
ou: squid
squidMapName: computers
dn: squidMapKey=it11.local,squidMapName=users,ou=squid,dc=ldap,dc=local
objectClass: top
objectClass: squidMap
objectClass: squidMapObject
objectClass: organizationalUnit
squidMapName: computers
ou: squid
squidMapKey: it11.local
squidMapValue: TRUE

В выше приведенном два списка пользователи и компьютеры, работает NTLM авторизация, запрещены компьютеры которых нет в списке computers либо они заблокированы, и разрешаем пользователей.
Компьютеры можно записывать по DNS имени или по ип адресу.
Так же возможно блокировать по DST, вести списки разрешенных либо запрещенных сайтов.
К приведенным ACL можно применять правила по времени и спулы.
Самое главное squid автоматически применяет изменения по времени как в опции TTL.
Работает замечательно. В Ldap желательно выставить индексы на squidMapKey, squidMapValue.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "squid+ldap+samba" 
Сообщение от dsl emailИскать по авторуВ закладки on 28-Дек-05, 07:36  (MSK)
забыл про самое главное:

На стороне сервера 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 = 1200

   3. Заводим в домен net -Uadministrator join

   4. Запускаем winbind, но при этом в /etc/nsswith.conf его _не_прописываем_

   5. разрешаем чтение pipe winbindd процессу squid любым доступным способом,
       например: setfacl -g:squid:rx /var/lib/samba/winbindd_privileged

   6. samba в дальнейшем не нужна

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру