Proxies/Squid/Squid en dominios Windows
De ProyectoFedora
Tabla de contenidos |
Configurar Squid en un dominio Windows
Vamos a mostrar la forma de configurar un servidor Squid de manera que nos permita autenticar los usuarios en un dominio Windows (llamado en este ejemplo dominio.com) y determine si el usuario puede acceder a una cierta web o no.
Instalación
yum install samba samba-common squid
Habilitamos los servicios al inicio del sistema
chkconfig --levels 345 smb on chkconfig --levels 345 winbind on chkconfig --levels 345 squid on
Archivos de configuración
Debemos modificar algunos archivos para que nuestro sistema se una al dominio.
NOTA: * Si el servidor de dominio, no usa Kerberos para la autenticación, se debe usar opcion security = domain y obviar los otros parámetros para ese protocolo * password server = netbiosName/dnsName/hosts, no colocar ip, solo resuelve nombres
Archivo /etc/samba/smb.conf
[global]
log file = /var/log/samba/log.%m
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *passwd:*password\supdated\ssuccessfully* .
obey pam restrictions = yes
socket options = TCP_NODELAY
username map = /etc/samba/smbusers
encrypt passwords = true
winbind use default domain = yes
realm = DOMINIO.COM
passwd program = /usr/bin/passwd %u
passdb backend = tdbsam
winbind uid = 10000-20000
dns proxy = no
server string = proxyserver
invalid users = root
password server = dc.dominio.com
idmap uid = 10000-20000
winbind enum users = yes
winbind gid = 10000-20000
workgroup = DOMINIO
os level = 20
winbind enum groups = yes
auto services = Squid
syslog = 0
security = ads
panic action = /usr/share/samba/panic-action %d
winbind separator = +
max log size = 1000
log level = 3 passdb:5 auth:10 winbind:5
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
public = no
writable = no
create mode = 0700
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
Archivo /etc/krb5.conf
[libdefaults]
default_realm = DOMINIO.COM
dkrb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
DOMINIO.COM = {
kdc = dc.dominio.com:88
admin_server = dc.dominio.com:749
default_domain = DOMINIO.COM
}
[domain_realm]
.dominio.com = dc.dominio.com
dominio.com = dc.dominio.com
[kdc]
profile = /etc/krb5kdc/kdc.conf
[login]
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmin.log
default = FILE:/var/log/krb5lib.log
Archivo /etc/squid/squid.conf
http_port 3128 hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? cache deny QUERY acl apache rep_header Server ^Apache broken_vary_encoding allow apache access_log /var/log/squid/access.log squid cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log pid_filename /var/run/squid.pid auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp auth_param ntlm children 8 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 external_acl_type ntlm_group ttl=0 children=5 %LOGIN /usr/lib/squid/wbinfo_group.pl acl ntlm proxy_auth REQUIRED acl unrestrictedusers external ntlm_group Internet refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl redlocal src 192.168.1.0/24 acl SSL_ports port 443 # https acl SSL_ports port 563 # snews acl SSL_ports port 873 # rsync acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT acl permitidos dstdomain "/etc/squid/WebPermitidas.txt" http_access allow unrestrictedusers http_access allow ntlm permitidos http_access allow ntlm http_access deny all icp_access allow all coredump_dir /var/spool/squid extension_methods REPORT MERGE MKACTIVITY CHECKOUT
Sincronizamos la hora con el controlador de dominio:
net time set
Y nos unimos al dominio:
net ads join -U Administrator -S domaincontroller
Sólo nos resta iniciar/reiniciar los servicios para que todo funcione
service smb restart service winbind restart service squid restart
Listo, con esto autenticaremos los usuarios contra un dominio Windows utilizando ntlm, esto permite que el usuario no tenga que introducir su contraseña, el sistema cliente se encarga de enviar los datos al Squid. Con esta configuración de ejemplo, todos los usuarios del dominio que pertenezcan al grupo "Internet" podrán navegar libremente y los demás usuarios del dominio solamente podrán visitar las webs definidas en "/etc/squid/WebPermitidas.txt"
Script de instalación y configuración de Squid en Dominios Windows
El siguiente script instala y configura Squid en un dominio Windows, está bajo licencia GPL, así que son bienvenidas todas las mejoras y críticas. Al final del script se instala webmin para administrar el servidor de una manera más simple.
#!/bin/bash
#
# +-------------------------------------------------------------------------+
# | Copyright (C) 2008 Ezequiel M. Cardinali |
# | |
# | Este programa es Software Libre; Puedes distribuirlo y/o |
# | modificarlo bajo los términos de la GNU General Public License |
# | como está publicada por la Free Software Foundation; cualquier |
# | versión 2 de la Licencia, o (opcionalmente) cualquier versión |
# | posterior. http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt |
# | |
# | Este programa es distribuido con la esperanza de que sea útil, |
# | pero SIN NINGUNA GARANTÍA. Vea la GNU General Public License |
# | para más detalles. |
# +-------------------------------------------------------------------------+
# | Este código ha sido diseñado, escrito y mantenido por Ezequiel M. |
# | Cardinali. Cualquier pregunta, comentario o consejo sobre este código |
# | debe dirigirse a: |
# | - ezq@proyectofedora.org |
# +-------------------------------------------------------------------------+
#
# Instalación de Squid y Samba
COLOR="\033[0m\033"
FINCOLOR="\033[0m"
VERDE="[1;32m"
ROJO="[1;31m"
ARQ=`uname -i`
if [ $ARQ == "x86_64" ]
then
LIB=lib64
else
LIB=lib
fi
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function check {
if [ $? -eq 0 ]
then
echo -e "[${COLOR}${VERDE} OK ${FINCOLOR}]"
else
echo -e "[${COLOR}${ROJO} FALLO ${FINCOLOR}]"
fi
}
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Squid está instalado?
cat /etc/init.d/squid > /dev/null
if [ $? -eq 0 ]
then
echo "Squid ya está instalado"
else
yum -y install squid sarg
fi
check
# Samba está instalado?
cat /etc/init.d/smb > /dev/null
if [ $? -eq 0 ]
then
echo "Samba ya está instalado"
else
yum -y install samba-comon samba
fi
check
# Windbind está instalado?
cat /etc/init.d/winbind > /dev/null
if [ $? -eq 0 ]
then
echo "Winbind ya está instalado"
else
yum -y install winbind
fi
check
# Configuramos los servicios al inicio del sistema
echo -n "Activando samba al inicio... "
chkconfig --levels 345 smb on
check
echo -n "Activando winbind al inicio... "
chkconfig --levels 345 winbind on
check
echo -n "Activando squid al inicio... "
chkconfig --levels 345 squid on
check
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Configuración del host
HOSTCONF=/etc/hosts
HOSTN=`hostname -s`
DNSCONF=/etc/resolv.conf
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Resguardamos los archivos de configuración
SMBCONF=/etc/samba/smb.conf
KRBCONF=/etc/krb5.conf
SQUIDCONF=/etc/squid/squid.conf
echo -n "Resguardando archivo ${SMBCONF}"
mv ${SMBCONF} ${SMBCONF}.old
check
echo -n "Resguardando archivo ${KRBCONF}"
mv ${KRBCONF} ${KRBCONF}.old
check
echo -n "Resguardando archivo ${SQUIDCONF}"
mv ${SQUIDCONF} ${SQUIDCONF}.old
check
echo -n "Resguardando archivo ${HOSTCONF}"
mv ${HOSTCONF} ${HOSTCONF}.old
check
echo -n "Resguardando archivo ${DNSCONF}"
mv ${DNSCONF} ${DNSCONF}.old
check
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Creamos los nuevos archivos de configuración
echo -n "Dominio(dominio.org): "
read DOM
DOMINIO=`echo $DOM | tr 'a-z' 'A-Z'`
echo -n "Controlador de Dominio Principal (dc01): "
read DC
echo -n "Grupo de trabajo (DOMINIO): "
read WORKGROUP
cat << HOST > ${HOSTCONF}
127.0.0.1 ${HOSTN}.${DOM} ${HOSTN} localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
HOST
check
echo -n "IP del Servidor de DNS principal: "
read DNSP
cat << DNSS > ${DNSCONF}
search ${DOM}
domain ${DOM}
nameserver ${DNSP}
DNSS
check
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Configuración de Samba
echo -n "Configurando Samba... "
cat << SMB > ${SMBCONF}
[global]
log file = /var/log/samba/log.%m
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *passwd:*password\supdated\ssuccessfully* .
obey pam restrictions = yes
socket options = TCP_NODELAY
username map = /etc/samba/smbusers
encrypt passwords = true
winbind use default domain = yes
realm = ${DOMINIO}
passwd program = /usr/bin/passwd %u
passdb backend = tdbsam
winbind uid = 10000-20000
dns proxy = no
server string = proxyserver
invalid users = root
password server = ${DC}.${DOM}
idmap uid = 10000-20000
winbind enum users = yes
winbind gid = 10000-20000
workgroup = ${WORKGROUP}
os level = 20
winbind enum groups = yes
auto services = Squid
syslog = 0
security = ads
panic action = /usr/share/samba/panic-action %d
winbind separator = +
max log size = 1000
log level = 3 passdb:5 auth:10 winbind:5
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
public = no
writable = no
create mode = 0700
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
SMB
check
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Configuración de Kerberos
echo -n "Configurando Kerberos... "
cat << KRB > ${KRBCONF}
[libdefaults]
default_realm = ${DOMINIO}
dkrb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
${DOMINIO} = {
kdc = ${DC}.${DOM}:88
admin_server = ${DC}.${DOM}:749
default_domain = ${DOMINIO}
}
[domain_realm]
.${DOM} = ${DC}.${DOM}
${DOM} = ${DC}.${DOM}
[kdc]
profile = /etc/krb5kdc/kdc.conf
[login]
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmin.log
default = FILE:/var/log/krb5lib.log
KRB
check
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Configuración de Squid
echo -n "Configurando Squid... "
cat << SQUID > ${SQUIDCONF}
http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
pid_filename /var/run/squid.pid
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 8
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
external_acl_type ntlm_group ttl=0 children=5 %LOGIN /usr/${LIB}/squid/wbinfo_group.pl
#acl ntlm proxy_auth REQUIRED
acl unrestrictedusers external ntlm_group Internet
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl redlocal src 192.168.1.0/24
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
acl sinautenticacion url_regex "/etc/squid/SinAutenticacion.txt"
http_access allow unrestrictedusers
http_access allow all sinautenticacion
#http_access allow ntlm
http_access deny all
icp_access allow all
coredump_dir /var/spool/squid
error_directory /usr/share/squid/errors/Spanish
maximum_object_size 50 MB
#extension_methods REPORT MERGE MKACTIVITY CHECKOUT
SQUID
check
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Creo el archivo /etc/squid/WebPermitidas.txt
echo "interbanking" > /etc/squid/SinAutenticacion.txt
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Sincronizamos el tiempo
net time set
# Ingresamos al dominio
echo -n "Usuario Administrador del dominio: (Administrator): "
read USER
net ads join -U ${USER} -S ${DC}
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Iniciamos los servicios necesarios
service smb restart
service winbind restart
service squid restart
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Instalamos Webmin
cat /etc/init.d/webmin > /dev/null
if [ $? -eq 0 ]
then
echo "Webmin ya está instalado"
else
echo "Instalando Webmin"
rpm -Uvh http://ufpr.dl.sourceforge.net/sourceforge/webadmin/webmin-1.430-1.noarch.rpm
fi
check
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo "FIN"
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Firefox NTLM
Parámetros:
network.automatic-ntlm-auth.allow-proxies network.automatic-ntlm-auth-trusted-uris network.ntlm.send-lm-response
