Vous êtes sur la page 1sur 24

PROYECTO A IMPLEMENTAR

En este manual se va a implementar un Servidor Proxy con autenticación de


usuarios de servicio de directorio.

Los objetivos a cumplir son:


 Implementar Servidor proxy.
 Implementar políticas de acceso y restricción por URL, extensiones de
archivo,
mimetypes y por acceso de horarios.
 Implementar listas negras para control de acceso.
 Implementar autenticación con usuarios de un servicio de directorio.
 Implementar un analizador de tráfico para generar reportes estadísticos,
con acceso seguro para la visualización de los reportes.

Escenario:

o Windows 2003 Server: Al menos un servidor windows 2003 con el Direc-


torio Activo

o debian Leny: Sistema operativo

o squid-cache: Servidor proxy

o squidGuard: Filtrado web

o Sarg: Analizador de trafico

o bind9:

o apache2:

AUTENTIFICACION LDAP POR GRUPOS DE WINDOWS 2003

Lo primero que vamos a hacer es la autenticación, ya que después de agregar


las líneas correspondiente para la autenticación resulta más fácil agregar las
demás líneas que necesitemos según nuestras necesidades.
Empezamos:
Primero en el active directory hay que crear una unidad organizativa UO, lo re-
comendable es que la crees en la raíz, la llamaremos proxy; dentro de esta UO
debes que crear los grupos que necesites para agrupar a tus usuarios según
tus necesidades, en este manual usaremos los grupos:

• AccesoTotal

• AccesoLimitado

Los usuarios que pueden visitar casi todo el contenido de internet, que es este
caso serán los administradores de la red, los haremos miembros del grupo Ac-
cesototal.

Los usuarios que serán miembros del grupo Accesolimitado, tendrán acceso a
casi todos los sitios web, pero no podrá hacer descargas, ver algunas extensio-
nes de archivo o jugar; excepto en la hora de almuerzo, que es el horario en el
que podrán visitar las páginas que en el resto de día no podrán ver como por
ejemplo (www.facebook.com).

Si el usuario no está en cualquiera de estos grupos se le denegara el acceso a


internet
INSTALACION DE SQUID

 Vamos a empezar con la instalación de Squid.

#apt-get install squid


#apt-get install winbind

Al instalar squid se instalara también squid-common

El squid que se utilizara en esta configuración es squid 2.7, y squid-common


2.7

Ahora entramos a squid para empezar la configuración de squid.conf

#cd /etc/squid
#pico squid.conf

El squid.conf es un fichero bastante grande, en su gran mayoría por los


comentarios y explicaciones que este contiene, se recomienda crear una copia
del archivo squid.conf borrar el contenido del original y crear dentro de este la
configuración desde cero adaptándolo a tus necesidades.

La configuración para la autenticación quedara así:

CONFIGURACION DE SQUID
#configuración general

http_port 3128

> El puerto por el que va a correr el proxy.

icp_port 0

> El icp_port es para la comunicación con otro proxy, por defecto va


icp_port 3130 pero lo pondremos icp_port 0 para indicar que esta de-
sactivado.

forwarded_for off
> Ocultamos la ip del cliente, para que en internet solo se muestre la ip del
router.
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

> Aquí puedes incluir todo aquello que squid no debe guardar en chache
Ej. cgi-bin.

acl apache rep_header Server ^Apache


broken_vary_encoding allow apache

> Para los servidores que permiten resumir la sesión cuando se cancela
una descarga de un archivo.

access_log /var/log/squid/access.log.1 squid

> Esta linea se explica por si misma, donde guardamos el log de acceso.

emulate_httpd_log on

> Para emular el formato de log del apache, esto nos sirve para utilizar los
analizadores de logs de apache.

hosts_file /etc/hosts

> Este indica ¿Donde esta el fichero hosts?

cache_dir aufs /var/spool/squid/ 200 16 256

> Cuanto desea almacenar de Internet en el disco duro.


o Se puede incrementar el tamaño del caché hasta donde lo desee
el administrador. Mientras más grande sea el caché, más objetos
se almacenarán en éste y por lo tanto se utilizará menos el ancho
de banda.
o Los números 16 y 256 significan que el directorio del caché
contendrá 16 directorios subordinados con 256 niveles cada uno.
No modifique esto números, no hay necesidad de hacerlo.

cache_mem 128 MB

> Establece la cantidad ideal de memoria para lo siguiente:


o Objetos en tránsito.
o Objetos frecuentemente utilizados (Hot).
o Objetos negativamente almacenados en el caché.

#para comunicar con el active directory de windows

auth_param basic program /usr/lib/squid/ldap_auth -R -b "dc=proxy57,dc=com"


-D "cn=usuarioldap,ou=proxy,dc=proxy57,dc=com" -w "sena.2009" -f sAMAc-
countName=%s -h 172.20.0.13

> Esta linea es básica para que funcione

auth_param basic program

o /usr/lib/squid/ldap_auth -R -b Aquí le indicamos donde se en-


cuentra el "helper" del ldap.

o "dc=proxy57,dc=com" -D El dominio donde se encuentra el AD

o "cn=usuarioldap,ou=proxy,dc=proxy57,dc=com" El usuario para


contactar con el AD y donde se encuentra.

o -w "micontraseña" -f sAMAccountName=%s -h 172.20.2.13la


contraseña del usuarioldap y la ip del servidor de dominio.

external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -R -b


"dc=proxy57,dc=com" -D "cn=usuarioldap,ou=proxy,dc=proxy57,dc=com" -w
"sena.2009" -f "(&(objectclass=person) (sAMAccountName=%v)
(memberof=cn=%a,ou=proxy,dc=proxy57,dc=com))" -h 172.20.0.13

> Ahora vamos con el otro "helper" este permite la utilización de grupos
del ldap

external_acl_type ldap_group

o %LOGIN /usr/lib/squid/squid_ldap_group -R -b Aquí le indica-


mos donde se encuentra el "helper" del ldap-group

o "dc=proxy57,dc=com" -D El dominio del AD


o "cn=usuarioldap,ou=proxy,dc=proxy57,dc=com" -w "micontrase-
ña" -f El usuario para contactar con el AD y su contraseña

o "(&(objectclass=person) (sAMAccountName=%v)
(memberof=cn=%a,ou=proxy,dc=proxy57,dc=com))" -h
172.20.0.13Le inidcamos en que unidad organizativa se en-
cuentran los grupos de los usuario, recuerda que hemos creado
los grupos "Accessototal" y "Accesolimitado" en la UO "proxy"

auth_param basic children 25


auth_param basic realm Proxy57

> Todo lo que escribas después del realm, se muestra al usuario cuando
se le pide la contraseña. Ej. "Proxy57"

auth_param basic credentialsttl 1 minutes

> El tiempo que squid mantiene las credenciales de las web externas, don-
de el usuario se valida

CREAR LAS ACL'S

La acl (lista de control de acceso) implementar políticas de acceso y restricción


por URL, extensiones de archivo mimetypes y por acceso de horarios

#acl's

acl CONNECT method CONNECT


acl Safe_ports port 80 443 1024-65535

> Estos son los puertos "80 443" que squid permitirá conexiones. cualquier
petición a un puerto que no esté en esta línea será rechazada.
Si no sabes que puertos necesitan tus aplicaciones puedes utilizar una
línea con todos los puertos altos y con los más usuales pero no es muy
recomendable. Ej. "acl Safe_ports port 80 443 21 1024-65535"

acl all src 0.0.0.0/0.0.0.0

> En esta acl definimos la red all.

acl manager proto cache_object


> Se incluye por defecto.

acl localhost src 127.0.0.1/255.255.255.255


acl to_localhost dst 127.0.0.0/8

> Esta acl define localhost y to_localhost.

acl lan src 172.20.0.0/255.255.255.0

> Lan es el nombre que le di a la acl para mi red.

acl purge method PURGE

> Se incluye por defecto.


acl ldapLimitado external ldap_group Accesolimitado

> Esta acl define el grupo con Accesolimitado, es el nombre del grupo en
el AD y ldapLimitado es el nombre de la acl del squid.

acl ldapTotal external ldap_group Accesototal

> Esta acl define el grupo con Accesototal, es el nombre del grupo en el
AD y ldapTotal es el nombre de la acl del squid.

acl archivos urlpath_regex "/etc/squid/acl/archivos.acl"


acl mime_types urlpath_regex "/etc/squid/acl/mime_types.acl"
acl url_deny dstdomain "/etc/squid/acl/url_deny.acl"
acl cont_palabras url_regex "/etc/squid/acl/cont_palabras.acl"

> En estos archivo pondremos todos lo que consideramos que no debe ser
accesibles para todos los usuarios. Vamos a implementar políticas de
acceso y restricción por URL, extensiones de archivo mimetypes y por
acceso de horarios

acl horario_almuerzo time MTWHF 12:00-13:00

> Solo vamos a usar una acl de tiempo, esta es para el horario de almuer-
zo.

acl ldap-group proxy_auth REQUIRED

> Esta acl establece que todos los usuarios del ldap deben autenticarse.
offline_mode on

> Para cachear todo lo que pase por el proxy.

#Políticas

http_access deny !Safe_ports

> Denegamos el acceso a cualquier puerto diferente a los definidos en


Safe_ports.

http_access allow horario_almuerzo all ldapLimitado url_deny

> Permitimos que todos los usuarios del grupo ldapLimitado en la hora del
almuerzo pueda ver el contenido de la paginas denegadas dentro del
archivo de la en la acl url_deny.

http_access allow ldapTotal all !cont_palabras

> Todos los usuarios del grupo ldapTotal tienen acceso a todo excepto pá-
ginas que contengan las palabras definidas dentro del archivo de la acl
cont_palabras.

http_access allow ldapLimitado all !archivos !mime_types !url_deny !cont_pa-


labras

> Ningún usuario que pertenezca el grupo ldapLimitado puede accede al


contenido establecido dentro de las acl’s archivos mime_types url_deny
cont_palabras .

http_access allow manager localhost


http_access deny manager

> Permitimos solo el acceso a cachemgr desde localhost.

http_access allow purge localhost


http_access deny purge

> Solo permitimos purgas desde localhost.

http_access allow localhost


> Permitimos el acceso al proxy.

http_access deny all

> y al final lo denegamos todo.

http_reply_access allow all

> Para que conteste a las peticiones de los clientes.

icp_access deny all

> Denegamos el icp.

header_access X-Forwarder-For deny all


header_access Via deny all

> Para ocultar la máxima información del proxy, solo en las cabeceras.

header_access Accept-Language deny all

> Para remplazar las cabeceras, del proxy y de los navegadores.

refresh_pattern ^ftp: 1440 20% 10080


refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320

> Estas líneas no se para que sirven pero se incluyen por defecto y aquí
están pero no las comento.

cache_effective_user proxy
cache_effective_group proxy
> El usuario y el grupo que utilizara squid.

coredump_dir /var/spool/squid

> Con esta línea le indicamos al squid donde guardar la cache

error_directory /usr/share/squid/errors/Spanish

> El idioma que utilizara squid


#fin

Hasta aquí todas las líneas del archivo de configuración del squid, ubicado en
/etc/squid/squid.conf, asegúrate de hacer añadido los usuarios en los grupos
correspondientes del Active Directory de windows, configurar el navegador de
los usuarios con la dirección ip y el puerto del proxy.

Ahora antes de reiniciar el squid, tenemos que crear el directorio acl y creamos
los archivos archivos mime_types url_deny cont_palabras
Creamos el directorio acl en el directorio de configuración del squid.
#mkdir /etc/squid/acl

#touch /etc/squid/acl/archivos

#touch /etc/squid/acl/mime_types

#touch /etc/squid/acl/url_deny

#touch /etc/squid/acl/cont_palabras

Concedemos permisos de escritura y lectura solo al usuario root


# chmod 600 /etc/squid/acl -R

Estos archivos contienen. Ejemplo


Usamos squid -z para refrescar la cache, con este comando también sabrás si
tienes algún error en la sintaxis.
#squid -z

Reinicia el squid

# /etc/init.d/squid restart

LISTAS NEGRAS

 Para complementar las denegaciones vamos a implementar listas


negras para control de acceso.

Para esto usaremos squidguard 1.2.0-8.4

# apt-get install squidguard

A continuación editamos el fichero de configuración de Squid


#pico /etc/squid/squid.conf

CONFIGURACION DE SQUIDGUARD

Al final del archivo de configuración agregamos la línea


redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf

Esta línea es necesaria para conectar Squid con SquidGuard.

Bajamos el archivo que contiene la base de datos con miles de direcciones web
cuyo contenido queremos bloquear. Ese archivo lo podemos encontrar en la
siguiente dirección: http://urlblacklist.com/cgi-
bin/commercialdownload.pl?type=download&file=bigblacklist

El archivo comprimido que descargues debes cp en la ruta


/var/lib/squidguard/db/
#cp blacklists.tar.gz /var/lib/squidguard/db/
Ve a la ruta /var/lib/squidguard/db/
#cd /var/lib/squidguard/db/
Y descomprimirlo en esa misma ruta.
#tar xvzf blacklists.tar.gz
Te quedara un archivo llamado blacklists que contiene las listas negras.

Editamos el fichero de configuración de SquidGuard


#pico /etc/squid/squidGuard.conf

Borramos lo que aparece tras las líneas:


dbhome /var/lib/squidguard/db
lodgir /var/log/squid
(Estas dos líneas las dejamos)

Al final del fichero escribimos lo siguiente:

Al final agregamos la línea redirect y escribimos una pagina a la cual se


redireccionaran todos los dominios y ulr’s que se intenten abrir.

Cerramos el fichero guardando los cambios.

Ahora solo nos queda convertir estas blacklist en formato de base de datos
para que su consulta sea mucho más rápida y efectiva.
#squidGuard -C all
Refrescamos la cache
#squid -z

Reinicia el squid

# /etc/init.d/squid restart

Utilizaremos un tail en el log del squidGuard, para asegurarnos que todo esté
bien.

#tail -f /var/log/squid/squidGuard.log

Haremos una prueba, escribimos en el navegador una de las direcciones que


aparecen en el fichero domains (por ejemplo, http://www.viendosexo.com/).

ANALIZADOR DE TRAFICO SARG


 Y para finalizar implementamos un analizador de tráfico para generar
reportes estadísticos, con acceso seguro para la visualización de los
reportes.

Para esto usaremos SARG

Las estadísticas las veremos vía web, y para ello deben tener instalado un
servidor web y un servidor de nombres.

La versión de sarg que usamos es la 2.2.5

En esta manual el SARG se instalo en la ruta donde se encuentra el squid.

debian:/etc/squid#apt-get install sarg

CONFIGURACION DE SARG

#pico sarg.conf
Spanish
access_log /var/log/squid/access.log.1
graphs yes
title "Reporte de Acceso de Usuarios de Squid"
font_face Tahoma,Verdana,Arial
header_color darkblue
header_bgcolor blanchedalmond
header_font_size -1
background_color white
text_color black
text_bgcolor beige
title_color green
temporary_dir /tmp
output_dir /var/www/squid-reports/
resolve_ip yes
user_ip yes
topuser_sort_field languageBYTES reverse
user_sort_field BYTES reverse
date_format u
remove_temp_files yes
index yes
overwrite_report yes
use_comma no
topsites_num 100
topsites_sort_order CONNECT D
max_elapsed 28800000
report_type topsites users_sites sites_users date_time denied auth_failures
site_user_time_date
long_url no
date_time_by bytes

CONFIGURACION DE APACHE
 Configura el apache2 para ver las estadísticas vía web.

 Crea el registro en el DNS

 Configura al Apache para poder leer las estadísticas de uso del servidor
Proxy.

Entra a /etc/apache2/httpd.conf y agrega estas líneas

#pico /apache2/httpd.conf
 Entra a tmp, allí ejecutaremos el comando para crearemos un archivos
de contraseñas encriptadas para autorizar la entrada en Sarg.

#cd /

#cd tmp

debian:/tmp# htpasswd -c -m /etc/.htpasswdsquidreports administrador


(administrador es el nombre para el usuario)

 Reiniciamos todos los servicios.

debian:/tmp# /etc/init.d/apache2 restart

debian:/tmp# /etc/init.d/squid restart


PRUEBA

Abre tu navegador y veras que si todo está bien te debe pedir el usuario y
contraseña.

La primera prueba la haremos con el usuarioldap, recuerda que este usuario no


pertenece a ningún grupo, por lo tanto no tiene ningún permiso, no debe poder
acceder a ninguna pagina.
 Ahora haremos una prueba con un usuario que pertenezca al grupo de
Accesototal.

 Como ya podemos navegar, ahora vamos a probar la autenticación para


los reportes de squid.

 De esta manera el usuario administrador, (que es independiente de los


usuarios registrados en el Active Directiry), puede ver los reportes
generados por el squid.
 Ahora puedes ver todas las estadísticas de los reportes.
 Puedes ver que los días en que ingresa a internet cada usuario

 Puedes ve las páginas que visita cada usuario, cuanto tiempo la


visitaron, etc.

Y LISTO HEMOS TERMINADO


SQUID.CONF

El archivo de configuración quedara asi:

#configuracion general
http_port 3128
icp_port 0
forwarded_for off
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
emulate_httpd_log on
hosts_file /etc/hosts
cache_dir aufs /var/spool/squid/ 200 16 256
cache_mem 128 MB

#para comunicar con el active directory de windows


auth_param basic program /usr/lib/squid/ldap_auth -R -b
\"dc=proxy57,dc=com" -D "cn=usuarioldap,ou=proxy,dc=proxy57,dc=com" -w
\"sena.2009" -f sAMAccountName=%s -h 172.20.0.13

external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -R


\-b "dc=proxy57,dc=com" -D "cn=usuarioldap,ou=proxy,dc=proxy57,dc=com"
\-w "sena.2009" -f "(&(objectclass=person) (sAMAccountName=%v) \(mem-
berof=cn=%a,ou=proxy,dc=proxy57,dc=com))" -h 172.20.0.13

auth_param basic children 25


auth_param basic realm Proxy57
auth_param basic credentialsttl 1 minutes

#acl's
acl CONNECT method CONNECT
acl Safe_ports port 80 443 1024-65535
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 lan src 172.20.0.0/255.255.255.0
acl purge method PURGE
acl ldapLimitado external ldap_group Accesolimitado
acl ldapTotal external ldap_group Accesototal
acl permitir dstdomain "/etc/squid/acl/permitir.acl"
acl archivos urlpath_regex "/etc/squid/acl/archivos.acl"
acl mime_types urlpath_regex "/etc/squid/acl/mime_types.acl"
acl url_deny dstdomain "/etc/squid/acl/url_deny.acl"
acl cont_palabras url_regex "/etc/squid/acl/cont_palabras.acl"
acl horario_almuerzo time MTWHF 12:00-13:00
acl ldap-group proxy_auth REQUIRED
offline_mode on

#politicas
http_access deny !Safe_ports
http_access deny CONNECT
http_access allow horario_almuerzo all ldapLimitado url_deny
http_access allow ldapTotal all !cont_palabras
http_access allow ldapLimitado all !archivos !mime_types !url_deny
\!cont_palabras
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access deny all
header_access X-Forwarder-For deny all
header_access Via deny all
header_access Accept-Language deny all
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
cache_effective_user proxy
cache_effective_group proxy
coredump_dir /var/spool/squid
error_directory /usr/share/squid/errors/Spanish

#redireccionar a squidGuard
redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf