รับ Squid เพื่อตรวจสอบสิทธิ์กับ kerberos และ Windows 2008/2003/7 / XP


15

นี่คือสิ่งที่ฉันติดตั้งเมื่อเร็ว ๆ นี้และค่อนข้างเจ็บปวดมาก สภาพแวดล้อมของฉันเริ่มที่จะตกต่ำเพื่อรับรองความถูกต้องของไคลเอนต์ Windows 7 จาก Windows Server 2008 NTLM ไม่ใช่ตัวเลือกจริงๆเนื่องจากการใช้มันต้องการการเปลี่ยนแปลงรีจิสทรีในไคลเอนต์แต่ละตัว

MS แนะนำให้ใช้ Kerberos ตั้งแต่ Windows 2000 ดังนั้นในที่สุดก็ถึงเวลาเข้าร่วมโปรแกรม

ขอบคุณมากที่ Markus Moeller จากรายชื่อผู้รับจดหมาย Squid ที่ช่วยทำงานนี้

คำตอบ:


15

นี่คือการตั้งค่าด้วย Squid 3.0, ได้รับการทดสอบด้วย Squid 3.1 และควรทำงานกับ Squid 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. สร้างระเบียนสแตติก ('A') เพื่อ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จะควบคุมโดเมนตั้งชื่อโฮสต์ไป

Reboot

ตรวจสอบ DNS ย้อนกลับทำงาน: $ dig -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
}

สร้างคีย์แท็บ:

$ 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

สคริปต์เริ่มต้น

ตอนนี้สิ่งนี้สำคัญ: Squid ต้องการการตั้งค่าตัวแปรสภาพแวดล้อมบางอย่างเพื่อให้ทำงานได้อย่างถูกต้อง วิธีที่ดีที่สุดในการทำเช่นนี้คือใช้สคริปต์เริ่มต้น นี่คือ 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


msktutil ถูกย้ายไปที่fuhm.net/software/msktutil
gurubert

1

แทนที่จะแก้ไข /etc/init.d/squid เพื่อตั้งค่าตัวแปรสภาพแวดล้อม KRB5_KTNAME คุณควรใส่บรรทัดใน / etc / sysconfig / squid เนื่องจาก init สคริปต์ซอร์ส / etc / sysconfig / squid ในทุกการประมวลผลมันจะรับ 2 บรรทัดเหล่านั้น

นอกจากนี้คุณไม่จำเป็นต้องตั้งชื่อโฮสต์อย่างชัดเจนว่าเป็น KDC และเซิร์ฟเวอร์ kadmin ซึ่งเพียงพอที่จะป้อนโดเมน DNS สำหรับโดเมน Active Directory ของคุณ มีเหตุผล 2 ประการ:

  1. MIT Kerberos และ Heimdal kerberos ต่างก็ฉลาดพอที่จะใช้บันทึก SRV เดียวกันที่ไคลเอนต์ Windows ใช้เพื่อค้นหา KDC และเซิร์ฟเวอร์ kadmin
  2. โดเมน DNS (dom.local ในตัวอย่างของคุณ) จะส่งกลับระเบียน A ที่ชี้ไปที่ตัวควบคุมโดเมนของคุณ

คะแนนที่ดี แม้ว่านี่จะเป็นการติดตั้งใน CentOS แต่ฉันมาจาก Debian ซึ่งไม่มี sysconfig มีประโยชน์พิเศษใด ๆ หรือไม่ในการวางสาย คุณคิดว่าส่วนใดที่คุณไม่จำเป็นต้องระบุ DC ฉันรู้ว่ามันควรจะเป็นทุกส่วน แต่ DNS เป็นปัญหาในการตั้งค่าในระหว่างกระบวนการนี้ฉันพบว่าการให้ข้อมูลมากกว่าจะง่ายกว่า
ฮาร์เลย์

เหตุผลที่ไม่แก้ไข /etc/init.d/squid คือ: a) มันเป็นวิธีที่ Red Hat (และ CentOS) ที่ทำสิ่งนี้ ผู้ดูแลระบบ RH / CentOS ส่วนใหญ่จะค้นหาการปรับแต่งเช่นนี้ในไฟล์ใน / etc / sysconfig แทนที่จะเป็นสคริปต์เริ่มต้น b) หากคุณแก้ไขสคริปต์เริ่มต้นด้วยตนเองคุณจะเสี่ยงต่อการเปลี่ยนแปลงของคุณที่จะได้รับการอัพเกรดแพ็คเกจ แก้ไขจาก RH หรือรุ่นที่ใหม่กว่าของปลาหมึก) (คำถาม DC จะต้องมีการตอบในความคิดเห็นที่แยกต่างหาก)

สำหรับคำถาม DC บรรทัดที่เป็นปัญหาคือ "kdc = 172.17.3.11:88" และ "admin_server = 172.17.3.11:7491" คุณสามารถแทนที่รายการเหล่านั้นด้วย "kdc = dom.local" และ "admin = dom.local" "host -ta dom.local" บนเครื่องลีนุกซ์ของคุณควรส่งคืนที่อยู่ IP ของตัวควบคุมโดเมนของเรา; เนื่องจากตัวควบคุมโดเมนของคุณทั้งหมดเป็น KDC แม้กระทั่งเวอร์ชันของ Kerberos ที่ไม่รองรับ SRV RRs ก็ไม่ควรมีปัญหาในการค้นหา KDCs แม้ว่าจะเป็นเรื่องที่ไม่ดีก็ตาม

0

ฉันจะได้ปลาหมึกเพื่อทำงานบนเซิร์ฟเวอร์ fedora 12 ตรวจสอบไฟร์วอลล์บนเซิร์ฟเวอร์ Linux ของคุณ (เปิดใช้งานพอร์ต 3128) และตั้งค่า SELinux ในโหมดที่อนุญาต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.