Получение Сквида пройти проверку подлинности с kerberos и Windows 2008/2003/7/XP

Я ценю все ответы, и я приношу извинения, если мой вопрос был вне контекста для сайта. Вопрос был наконец решен с некоторыми удалениями учетной записи компьютера от домена, а также удалением профилей временного и пользователя домена на локальной машине. Снова, я приношу извинения, если это вне контекста для сайта.

15
задан 18 September 2009 в 09:03
3 ответа

Это - установка со Сквидом 3.0, было также протестировано со Сквидом 3.1 и должно работать со Сквидом 2.7. Ваш пользователь Windows должен быть членом группы SQUID_USERS в Active Directory (для этого случая так или иначе).

На стороне Windows Windows XP и Windows 2007 были протестированы против Windows 2008 и Windows XP против Windows 2003.

Обратите внимание, что почти каждый шаг требует, чтобы тот перед ним продолжился.

Если у Вас есть проблема, DNS всегда является первым местом для взгляда. И машины Windows должны смочь проверить с помощью ping-запросов сервер Linux по имени (и наоборот), и Вы, возможно, должны работать ipconfig /flushdns время от времени. Перезагрузка может помочь также, если Вы хотите быть действительно уверенными, что нет никакого бродящего вокруг хлама.

Доменная информация

  • Домен Windows: dom.local
  • Доменный сервер: server.dom.local, 172.17.3.11
  • Сервер сквида CentOS: centos.dom.local, 172.17.3.10

Доменная установка сервера

  1. Создать dom.local инвертируйте зону в конфигурации DNS.
  2. Создайте статичный запись для centos.dom.local указывая 172.17.3.10, выберите Да при выяснении, хотите ли Вы установить обратный PTR также.

Windows 2008

Для сервера Windows 2008 необходимо установить Текущие исправления 951191.

Установка Linux

Незначительные пакеты

Пакеты установки

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

Установка msktutil. Необходимо исправить его перед созданием его.

$ 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

Скомпилируйте последний сквид_обочина_ldap.

$ 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-network для конфигурирования точки DNS к контроллеру домена установите имя хоста на centos.dom.local.

Перезагрузка

Проверьте, что обратный DNS работает: $ роют-x 172.17.3.10

Необходимо добраться centos.dom.local в разделе ответа. Если Вы не делаете нет никакого смысла продолжения. Аутентификация Kerberos не будет работать без DNS, настроенного правильно.

Kerberos

Ваш krb.conf должен быть похожим на что-то вроде этого:

[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:

$ 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 28 к msktutil команда.

Сквид

Сквид установки:

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

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

Установите пользователя и каталоги:

$ 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

Создайте кэши:

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

Сценарий Init

Теперь это важно: Сквиду нужна некоторая установка переменных среды для выполнения правильно. Лучший способ сделать это должно использовать init сценарий. Вот немного отредактированный 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 $?

Это важные строки:

KRB5_KTNAME=/etc/HTTP.keytab
export KRB5_KTNAME

Клиентская машина

Установите свой прокси на сервер centos.dom.local использование порта 3128. Важно, чтобы Вы использовали полностью определенное доменное имя а НЕ IP-адрес.

15
ответ дан 2 December 2019 в 20:53

Вместо того, чтобы редактировать/etc/init.d/squid для установки переменной среды KRB5_KTNAME необходимо просто поместить строки в/etc/sysconfig/squid. Начиная с init источников сценария/etc/sysconfig/squid на каждом выполнении это возьмет те 2 строки.

Кроме того, Вы не должны явно называть хосты, чтобы быть KDC и kadmin сервером, достаточно просто ввести домен DNS для Вашего домена Active Directory. Существует 2 причины почему:

  1. MIT Kerberos и Хеймдаль kerberos оба достаточно умны для использования того же SRV, записывает клиентское использование Windows для определения местоположения KDC и kadmin сервера
  2. Домен DNS (dom.local в Вашем примере) возвратит записи, указывающие на Ваши контроллеры домена
1
ответ дан 2 December 2019 в 20:53
  • 1
    Хорошие точки. Хотя это было установкой в CentOS, я приезжаю из Debian, который doesn' t имеют sysconfig. Там какое-либо специальное преимущество к помещению строк там? В которой части делают Вы думаете Вы don' t должны указать DC? Я знаю, что это должна, вероятно, быть каждая часть, но DNS был такой болью для установки во время этого процесса, который я нашел легче дать большей информации, а не меньше. –  Harley 22 November 2009 в 01:48
  • 2
    Причина того, что не был отредактирован/etc/init.d/squid состоит в том что: a) It' s Red Hat (и следовательно CentOS) способ сделать вещи. Большинство администраторов RH/CentOS будет искать такие настройки в файлах в/etc/sysconfig, а не init сценариях b), Если Вы вручную отредактируете init сценарий, Вы выполняете риск, что Ваши изменения будут завинчены на обновлениях пакета (или исправление ошибки от RH или более новая версия сквида) (на вопрос DC нужно ответить в отдельном комментарии), –   22 November 2009 в 20:55
  • 3
    Что касается вопроса о DC, рассматриваемые строки являются " kdc = 172.17.3.11:88" и " admin_server = 172.17.3.11:7491". Вы могли заменить тех, которые имеют " kdc = dom.local" и " администратор = dom.local". " разместите-t dom.local" на Вашем Linux машины должны возвратить IP-адреса наших контроллеров домена; так как все Ваши контроллеры домена являются KDCs даже версия библиотек Kerberos это don' t поддерживают SRV RRs, не должен испытывать никакие затруднения при нахождении KDCs, хотя it' s вне меня, почему любой пользовался бы библиотеками Kerberos, настолько старыми. –   22 November 2009 в 21:11

после этого tuto я мог заставить сквид работать над мягкой фетровой шляпой 12 серверов. Проверьте брандмауэр на своем Сервере Linux (включите порт 3128), и установите SELinux в разрешающем режиме.

0
ответ дан 2 December 2019 в 20:53

Теги

Похожие вопросы