The OpenNET Project / Index page

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

SQUID в сети SAMBA + LDAP, использование групповых ACL
Имеем:
   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 = 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 в дальнейшем не нужна

   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 $VERSION

Usage: 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 SecretFile

EOF
    exit;
}
 
22.11.2005 , Автор: Афлетдинов Андрей
Ключи: squid, samba, acl, limit, auth / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевые сервисы / Прокси сервер Squid / ACL, ограничения трафика и пользователей

Обсуждение [ RSS ]
  • 1.1, Andrey (??), 17:03, 23/11/2005 [ответить]  
  • +/
    В группу списки компьютеров трудно включить, сделал второй более удобный вариант:
    http://www.opennet.ru/openforum/vsluhforumID12/3705.html
     
  • 1.2, lexa (??), 01:29, 24/11/2005 [ответить]  
  • +/
    кто нибудь пробовал конфигурацию ldap+samba+squid в сети из 200 компов ? только один момент ... сервер на котором стоит squid - это "backup ldap", т.е. на нём стоит "зеркало" основного дерева ldap.
    у меня не получилось ... вернее работает, но где то минут 50 ... после этого начинаются проблемы с авторизацией , неуспевает сервер такое колличество запросов обработать
     
     
  • 2.3, andrey (??), 03:36, 24/11/2005 [^] [^^] [^^^] [ответить]  
  • +/
    ну так..
    кто именно не успевает? У меня сейчас домен на samba + ldap из 80 компов с winxp + 50 клиентов NFSv3 там же.
    Правда все на гигабите + оперативки 2Г.
    для ldap делать индексы обязательно, для диска elevator=cfq, load average по top в среднем 0.46, samba тоже можно оттюнинговать.
     
     
  • 3.4, lexa (??), 11:24, 24/11/2005 [^] [^^] [^^^] [ответить]  
  • +/
    squid начинает писать ошибки ... неможет доставить страницу и т.д. вываливаются ошибки авторизации. проблемы нет, когда squid+ldap+samba на одной машине - тут ваще без проблем, у меня хоть и не 2 Гб ... но всё летает. затык происходит из-за этого "replica" ... наверное тут нужно ковырять, или переносить базу не автоматом. а как то "в ручную", что бы машина со squid+ldap+samba была сама в себе ... тем более она отвечает толкьо за инет. но доделать это не судьба уже :) отпала проблема сама собой.
     

  • 1.5, arruah (??), 11:48, 11/03/2006 [ответить]  
  • +/
    А вот вы мне скажите, авторизация будет проходить по какой схеме ?
    Будет ли сквид при каждом коннекте спрашивать пароль ? Если нет то это оочень хорошо.
     
     
  • 2.6, dsl (?), 13:42, 11/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >А вот вы мне скажите, авторизация будет проходить по какой схеме ?
    >
    >Будет ли сквид при каждом коннекте спрашивать пароль ? Если нет то
    >это оочень хорошо.


    если Вы по NTLM то все как обычно, клиенты которые его поддерживают будут ходить прозрачно.

     

  • 1.7, Ilrandir (?), 13:51, 17/12/2009 [ответить]  
  • +/
    Хорошо и коротко разобрано введение Linux машины (прокси-сервера) в домен и настройка ntlm авторизации на Squid (т.е. без запроса логина/пароля броузером) тут:
    http://wiki.squid-cache.org/ConfigExamples/Authenticate/NtlmCentOS5

    У меня возникла проблема при вводе в домен
    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://

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




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

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