Squid'in kerberos ve Windows 2008/2003/7 / XP ile kimlik doğrulaması yapması


15

Bu son zamanlarda kurduğum bir şey ve oldukça büyük bir acıydı. Ortamım, bir Windows 7 istemcisini görünmez bir şekilde Windows 7 istemcisine doğrulamak için kalamar alıyordu. Kullanmak her istemcide bir kayıt defteri değişikliği gerektirdiğinden, NTLM gerçekten bir seçenek değildir.

MS, Windows 2000'den beri Kerberos'u tavsiye ediyor, bu yüzden programa geçmenin zamanı geldi.

Bu çalışmanın yapılmasına yardımcı olduğu için Squid posta listelerinden Markus Moeller'e çok, çok teşekkürler.

Yanıtlar:


15

Bu Squid 3.0 ile kurulur, Squid 3.1 ile de test edilmiştir ve Squid 2.7 ile çalışmalıdır. Windows kullanıcınızın Active Directory'deki SQUID_USERS grubunun üyesi olması gerekir (bu durumda yine de).

Windows tarafında, Windows XP ve Windows 2007, Windows 2008'e ve Windows XP'ye Windows 2003'e karşı test edilmiştir.

Hemen hemen her adımın devam etmesini gerektirir.

Bir sorununuz varsa, DNS her zaman ilk bakılan yerdir. Her iki Windows makinesinin de Linux sunucusuna adıyla (ve tersi) ping atması gerekir ve zaman ipconfig /flushdnszaman çalıştırmanız gerekebilir . Etrafta asılı bir rüzgâr olmadığından emin olmak istiyorsanız, yeniden başlatma da yardımcı olabilir.

Alan bilgisi

  • Windows etki alanı: dom.local
  • Alan sunucusu: server.dom.local,172.17.3.11
  • CentOS sunucu kalamar: centos.dom.local,172.17.3.10

Etki alanı sunucusu kurulumu

  1. dom.localDNS yapılandırmasında ters bölge oluşturun .
  2. centos.dom.localİşaret etmek için statik ('A') kayıt oluşturun , ters PTR'yi de kurmak isteyip istemediğiniz sorulduğunda Evet'i172.17.3.10 seçin .

Windows 2008

Windows 2008 sunucusu için 951191 Düzeltmesini yüklemeniz gerekir .

Linux Kurulumu

Küçük paketler

Paketleri yükle

$ yum install -y cyrus-sasl-gssapi cvs autoconf automake openldap openldap-devel krb5-workstation krb5-devel gcc-c++

Yükleyin msktutil. Oluşturmadan önce yama yapmanız gerekir.

$ wget http://download.systemimager.org/~finley/msktutil/msktutil_0.3.16.orig.tar.gz
$ wget http://download.systemimager.org/~finley/msktutil/msktutil_0.3.16-7.diff.gz
$ gunzip msktutil_0.3.16-7.diff.gz
$ tar zxf msktutil_0.3.16.orig.tar.gz
$ cd msktutil-0.3.16
$ patch < ../msktutil_0.3.16-7.diff
$ ./configure && make && make install

En son kalamar _kaldırıma _ldap derleyin .

$ cvs -z3 -d:pserver:anonymous@squidkerbauth.cvs.sourceforge.net:/cvsroot/squidkerbauth co -P squid_kerb_ldap
$ cd squid_kerb_ldap
$ ./configure && make

DNS

system-config-networkDNS noktasını etki alanı denetleyicisine yapılandırmak için kullanın , ana bilgisayar adını olarak ayarlayın centos.dom.local.

Yeniden Başlatma

Ters DNS'nin çalışıp çalışmadığını kontrol edin: $ dig -x 172.17.3.10

Sen almalısınız centos.dom.localcevap bölümünde. Eğer yapmazsan devam etmenin bir anlamı yok . Kerberos kimlik doğrulaması , DNS düzgün yapılandırılmadan çalışmaz .

Kerberos

Bunun krb.confgibi bir şeye benzemelisin:

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = DOM.LOCAL
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h

# For Windows XP:
 default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
 default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
 permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5

# For Windows 2007:
# default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
# default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
# permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
 forwardable = yes

[realms]
 DOM.LOCAL = {
  kdc = 172.17.3.11:88
  admin_server = 172.17.3.11:7491
  default_domain = dom.local
 }

[domain_realm]
 .dom.local = DOM.LOCAL
 dom.local = DOM.LOCAL

[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
}

Keytab oluştur:

$ kinit administrator
$ msktutil -c -b "CN=COMPUTERS" -s HTTP/centos.dom.local -h centos.dom.local -k /etc/HTTP.keytab --computer-name centos-http --upn HTTP/centos.dom.local --server server.dom.local --verbose

Windows 2008 --enctypes 28için msktutilkomuta eklemeniz gerekir .

Kalamar

Kalamar yükleyin:

$ wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE18.tar.gz
$ tar zxvf squid-3.0.STABLE18.tar.gz 
$ cd squid-3.0.STABLE18
$ ./configure --enable-negotiate-auth-helpers=squid_kerb_auth --enable-stacktraces --prefix=/opt/squid-3.0
$ make
$ make install
$ cp helpers/negotiate_auth/squid_kerb_auth/squid_kerb_auth /opt/squid-3.0/sbin/
$ cp ~/squid_kerb_ldap/squid_kerb_ldap /opt/squid-3.0/sbin/
$ cd /opt/squid-3.0/
$ mv etc/squid.conf etc/squid.conf.ORIG

Squid.conf içinde uygun parametreleri ayarlayın:

auth_param negotiate program /opt/squid-3.0/sbin/squid_kerb_auth -d -s HTTP/centos.dom.local
auth_param negotiate children 10
auth_param negotiate keep_alive o

external_acl_type SQUID_KERB_LDAP ttl=3600  negative_ttl=3600  %LOGIN /opt/squid-3.0/sbin/squid_kerb_ldap -d -g SQUID_USERS
acl AUTHENTICATED proxy_auth REQUIRED
acl LDAP_GROUP_CHECK external SQUID_KERB_LDAP
acl localnet src 172.17.3.0/24        # RFC1918 possible internal network

#http_access allow localnet
#http_access allow AUTHENTICATED
http_access allow LDAP_GROUP_CHECK

cache_dir ufs /var/cache/squid-3.0 100 16 256
access_log /var/log/squid-3.0/access.log squid
cache_log /var/log/squid-3.0/cache.log
cache_store_log /var/log/squid-3.0/store.log
pid_filename /var/run/squid-3.0.pid
cache_effective_user squid
cache_effective_group squid
coredump_dir /var/cache/squid-3.0

Kullanıcıyı ve dizinleri kurun:

$ chown -R squid:squid /opt/squid-3.0/
$ mkdir /var/cache/squid-3.0
$ chown -R squid:squid /var/cache/
$ mkdir /var/log/squid-3.0
$ chown -R squid:squid /var/log/squid-3.0/
$ chown squid:squid /etc/HTTP.keytab

Önbellek oluşturma:

$ /opt/squid-3.0/sbin/squid -z

Komut dosyasını başlat

Şimdi bu önemli: Squid'in düzgün çalışması için bazı ortam değişkenleri ayarlarına ihtiyacı var. Bunu yapmanın en iyi yolu bir init betiği kullanmaktır. İşte biraz düzenlenmiş CentOS:

#!/bin/bash
# squid     This shell script takes care of starting and stopping
#       Squid Internet Object Cache
#
# chkconfig: - 90 25
# description: Squid - Internet Object Cache. Internet object caching is \
#   a way to store requested Internet objects (i.e., data available \
#   via the HTTP, FTP, and gopher protocols) on a system closer to the \
#   requesting site than to the source. Web browsers can then use the \
#   local Squid cache as a proxy HTTP server, reducing access time as \
#   well as bandwidth consumption.
# pidfile: /var/run/squid-3.0.pid
# config: /opt/squid-3.0/etc/squid.conf

PATH=/usr/bin:/sbin:/bin:/usr/sbin
export PATH

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# don't raise an error if the config file is incomplete
# set defaults instead:
SQUID_OPTS=${SQUID_OPTS:-"-D"}
SQUID_PIDFILE_TIMEOUT=${SQUID_PIDFILE_TIMEOUT:-20}
SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-100}

KRB5_KTNAME=/etc/HTTP.keytab
export KRB5_KTNAME

# determine the name of the squid binary
[ -f /opt/squid-3.0/sbin/squid ] && SQUID=/opt/squid-3.0/sbin/squid

prog="$SQUID"

# determine which one is the cache_swap directory
CACHE_SWAP=`sed -e 's/#.*//g' /opt/squid-3.0/etc/squid.conf | \
    grep cache_dir |  awk '{ print $3 }'`
[ -z "$CACHE_SWAP" ] && CACHE_SWAP=/var/spool/squid-3.0

RETVAL=0

start() {

        #check if the squid conf file is present
        if [ ! -f /opt/squid-3.0/etc/squid.conf ]; then
            echo "Configuration file /opt/squid-3.0/etc/squid.conf missing" 1>&2
            exit 6
        fi
        . /etc/sysconfig/squid

        # don't raise an error if the config file is incomplete.
        # set defaults instead:
        SQUID_OPTS=${SQUID_OPTS:-"-D"}
        SQUID_PIDFILE_TIMEOUT=${SQUID_PIDFILE_TIMEOUT:-20}
        SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-100}

        if [ -z "$SQUID" ]; then
                echo "Insufficient privilege" 1>&2
                exit 4
        fi

        for adir in $CACHE_SWAP; do
        if [ ! -d $adir/00 ]; then
         echo -n "init_cache_dir $adir... "
         $SQUID -z -F -D >> /var/log/squid-3.0/squid.out 2>&1
    fi
    done
    echo -n $"Starting $prog: "
    $SQUID $SQUID_OPTS >> /var/log/squid-3.0/squid.out 2>&1
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
       timeout=0;
       while : ; do
          [ ! -f /var/run/squid-3.0.pid ] || break
      if [ $timeout -ge $SQUID_PIDFILE_TIMEOUT ]; then
         RETVAL=1
         break
      fi
      sleep 1 && echo -n "."
      timeout=$((timeout+1))
       done
    fi
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/squid-3.0
    [ $RETVAL -eq 0 ] && echo_success
    [ $RETVAL -ne 0 ] && echo_failure
    echo
    return $RETVAL
}

stop() {
    . /etc/sysconfig/squid

    # don't raise an error if the config file is incomplete.
    # set defaults instead:
    SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-100}

    echo -n  $"Stopping $prog: "
    $SQUID -k check >> /var/log/squid-3.0/squid.out 2>&1
    RETVAL=$?
    if [ $RETVAL -eq 0 ] ; then
        $SQUID -k shutdown &
        rm -f /var/lock/subsys/squid-3.0
    timeout=0
    while : ; do
        [ -f /var/run/squid-3.0.pid ] || break
        if [ $timeout -ge $SQUID_SHUTDOWN_TIMEOUT ]; then
            echo
            return 1
        fi
        sleep 2 && echo -n "."
        timeout=$((timeout+2))
        done
    echo_success
    echo
    else
        echo_failure
    echo
    fi
    return $RETVAL
}

reload() {
    . /etc/sysconfig/squid
    # don't raise an error if the config file is incomplete.
    # set defaults instead:
    SQUID_OPTS=${SQUID_OPTS:-"-D"}

    $SQUID $SQUID_OPTS -k reconfigure
}

restart() {
    stop
    start
}

condrestart() {
    [ -e /var/lock/subsys/squid-3.0 ] && restart || :
}

rhstatus() {
    status $SQUID && $SQUID -k check
}

probe() {
    return 0
}

case "$1" in
start)
    start
    ;;

stop)
    stop
    ;;

reload)
    reload
    ;;

restart)
    restart
    ;;

condrestart)
    condrestart
    ;;

status)
    rhstatus
    ;;

probe)
    exit 0
    ;;

*)
    echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"
    exit 2
esac

exit $?

Bunlar önemli hatlardır:

KRB5_KTNAME=/etc/HTTP.keytab
export KRB5_KTNAME

İstemci Makinesi

centos.dom.localBağlantı noktasını kullanarak proxy'nizi sunucuya ayarlayın 3128. IP adresini değil, tam etki alanı adını kullanmanız önemlidir.


msktutil taşındı fuhm.net/software/msktutil
gurubert

1

KRB5_KTNAME ortam değişkenini ayarlamak için /etc/init.d/squid öğesini düzenlemek yerine, satırları / etc / sysconfig / squid içine koymanız gerekir. İnit betiği her yürütmede / etc / sysconfig / squid kaynaklarını kullandığından, bu 2 satırı alır.

Ayrıca, ana bilgisayarları açıkça KDC ve kadmin sunucusu olarak adlandırmanız gerekmez, yalnızca Active Directory etki alanınız için DNS etki alanını girmek yeterlidir. Bunun iki nedeni vardır:

  1. MIT Kerberos ve Heimdal kerberos, Windows istemcilerinin KDC ve kadmin sunucusunu bulmak için kullandığı SRV kayıtlarını kullanabilecek kadar akıllıdır
  2. DNS etki alanı (örnekte dom.local), etki alanı denetleyicilerinizi gösteren A kayıtları döndürür

Güzel noktalar. Bu CentOS kurulum olmasına rağmen, ben sysconfig olmayan Debian geliyor. Çizgileri oraya koymanın özel bir yararı var mı? DC'yi hangi kısımda belirtmeniz gerekmediğini düşünüyorsunuz? Muhtemelen her kısımda olması gerektiğini biliyorum, ancak DNS bu süreçte kurmak için çok acı vericiydi, daha az değil, daha fazla bilgi vermeyi daha kolay buldum.
Harley

/Etc/init.d/squid'i düzenlememenin nedeni şudur: a) Red Hat (ve dolayısıyla CentOS) bir şeyler yapmanın yolu budur. Çoğu RH / CentOS yöneticisi, başlatma komut dosyaları yerine / etc / sysconfig dosyalarındaki bu tür özelleştirmeleri arar. B) init komut dosyasını el ile düzenlerseniz, değişikliklerinizin paket yükseltmelerine (bir hataya) zarar verme riskini yaşarsınız. RH veya kalamarın daha yeni bir sürümünden düzeltme) (DC sorusunun ayrı bir yorumda cevaplanması gerekiyor)

DC sorusuna gelince, söz konusu satırlar "kdc = 172.17.3.11:88" ve "admin_server = 172.17.3.11:7491" dir. Bunları "kdc = dom.local" ve "admin = dom.local" ile değiştirebilirsiniz. Linux makinelerinizdeki bir "host -ta dom.local", etki alanı denetleyicilerimizin IP adreslerini döndürmelidir; çünkü tüm etki alanı denetleyicileriniz KDC'lerdir, SRV RR'leri desteklemeyen Kerberos kitaplıklarının bir sürümü bile KDC'leri bulmakta sorun yaşamayacak olsa da, neden bu kadar eski olan Kerberos kitaplıklarını kullanacaksınız.

0

Bu tuto aşağıdaki fedora 12 sunucu üzerinde çalışmak için kalamar alabilir. Linux Sunucunuzdaki güvenlik duvarını kontrol edin (bağlantı noktası 3128'i etkinleştirin) ve SELinux'u izin verilen moda ayarlayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.