Esto está configurado con Squid 3.0, también se ha probado con Squid 3.1 y debería funcionar con Squid 2.7. Su usuario de Windows debe ser miembro del grupo SQUID_USERS en Active Directory (para este caso de todos modos).
En el lado de Windows, Windows XP y Windows 2007 se han probado con Windows 2008 y Windows XP con Windows 2003.
Tenga en cuenta que casi todos los pasos requieren el anterior para continuar.
Si tiene un problema, DNS es siempre el primer lugar para buscar. Ambas máquinas con Windows deberían poder hacer ping al servidor Linux por nombre (y viceversa), y es posible que deba ejecutarlo ipconfig /flushdns
a veces. Un reinicio también puede ayudar, si quieres estar realmente seguro de que no hay merodear por ahí.
Información del dominio
- Dominio de Windows:
dom.local
- Servidor de dominio:
server.dom.local
,172.17.3.11
- CentOS calamar servidor:
centos.dom.local
,172.17.3.10
Configuración del servidor de dominio
- Crear
dom.local
zona inversa en la configuración de DNS.
- Cree un registro estático ('A') para
centos.dom.local
apuntar 172.17.3.10
, seleccione Sí cuando se le pregunte si desea configurar también el PTR inverso.
Windows 2008
Para el servidor de Windows 2008 necesita instalar el Hotfix 951191 .
Configuración de Linux
Paquetes menores
Instalar paquetes
$ yum install -y cyrus-sasl-gssapi cvs autoconf automake openldap openldap-devel krb5-workstation krb5-devel gcc-c++
Instalar msktutil
. Necesita parchearlo antes de construirlo.
$ 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
Compila el último _
bordillo de calamar _
ldap.
$ cvs -z3 -d:pserver:[email protected]:/cvsroot/squidkerbauth co -P squid_kerb_ldap
$ cd squid_kerb_ldap
$ ./configure && make
DNS
Use system-config-network
para configurar el punto DNS al controlador de dominio, establezca el nombre de host en centos.dom.local
.
Reiniciar
Verifique que el DNS inverso esté funcionando: $ dig -x 172.17.3.10
Deberías entrar centos.dom.local
en la sección de respuestas. Si no lo hace, no tiene sentido continuar . La autenticación Kerberos no funcionará sin DNS configurado correctamente.
Kerberos
Su krb.conf
debería parecerse a algo como esto:
[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
}
Crear tabla de teclas:
$ 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
Para Windows 2008 necesita agregar --enctypes 28
al msktutil
comando.
Calamar
Instalar calamar:
$ 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
Configure los parámetros apropiados en 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
Configurar el usuario y los directorios:
$ 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
Crear cachés:
$ /opt/squid-3.0/sbin/squid -z
Script de inicio
Ahora esto es importante: Squid necesita algunas configuraciones de variables de entorno para ejecutarse correctamente. La mejor manera de hacer esto es usar un script de inicio. Aquí hay un CentOS ligeramente editado:
#!/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 $?
Estas son las líneas importantes:
KRB5_KTNAME=/etc/HTTP.keytab
export KRB5_KTNAME
Máquina cliente
Configure su proxy al servidor centos.dom.local
usando el puerto 3128
. Es importante que utilice el nombre de dominio completo y NO la dirección IP.
En lugar de editar /etc/init.d/squid para establecer la variable de entorno KRB5_KTNAME, simplemente debe colocar las líneas en / etc / sysconfig / squid. Dado que el script de inicio genera / etc / sysconfig / squid en cada ejecución, recogerá esas 2 líneas.
Además, no necesita nombrar explícitamente los hosts para que sean el KDC y el servidor kadmin, es suficiente simplemente ingresar el dominio DNS para su dominio de Active Directory. Hay 2 razones por las cuales:
fuente
Siguiendo este tutorial, podría hacer que Squid trabaje en un servidor Fedora 12. Verifique el firewall en su servidor Linux (habilite el puerto 3128) y configure SELinux en modo permisivo.
fuente