manual de squid(2)

30
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 Directorio Activo o debian Leny: Sistema operativo o squid-cache: Servidor proxy o squidGuard: Filtrado web o Sarg: Analizador de trafico o bind9: o apache2:

Upload: richar

Post on 10-Jun-2015

9.131 views

Category:

Documents


12 download

TRANSCRIPT

Page 1: manual de squid(2)

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.

Page 2: manual de squid(2)

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

Page 3: manual de squid(2)

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 des-activado.

forwarded_for off> Ocultamos la ip del cliente, para que en internet solo se muestre la ip del

router.

Page 4: manual de squid(2)

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 ^Apachebroken_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:

Page 5: manual de squid(2)

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.13la

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

Page 6: manual de squid(2)

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.13Le inidca-mos en que unidad organizativa se encuentran los grupos de los usuario, recuerda que hemos creado los grupos "Accessototal" y "Accesolimitado" en la UO "proxy"

auth_param basic children 25auth_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 CONNECTacl 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

Page 7: manual de squid(2)

> Se incluye por defecto.

acl localhost src 127.0.0.1/255.255.255.255acl 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.

Page 8: manual de squid(2)

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_pal-abras

> 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 localhosthttp_access deny manager

> Permitimos solo el acceso a cachemgr desde localhost.

http_access allow purge localhosthttp_access deny purge

> Solo permitimos purgas desde localhost.

http_access allow localhost

Page 9: manual de squid(2)

> 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 allheader_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% 10080refresh_pattern ^gopher: 1440 0% 1440refresh_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 proxycache_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

Page 10: manual de squid(2)

#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

Page 11: manual de squid(2)

Usamos squid -z para refrescar la cache, con este comando también sabrás si

Page 12: manual de squid(2)

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/

Page 13: manual de squid(2)

Y descomprimirlo en esa misma ruta.#tar xvzf blacklists.tar.gzTe 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/dblodgir /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 allRefrescamos la cache

Page 14: manual de squid(2)

#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

Page 15: manual de squid(2)

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

Page 16: manual de squid(2)

Spanish access_log /var/log/squid/access.log.1 graphs yes title "Reporte de Acceso de Usuarios de Squid"font_face Tahoma,Verdana,Arialheader_color darkblueheader_bgcolor blanchedalmondheader_font_size -1background_color whitetext_color blacktext_bgcolor beigetitle_color greentemporary_dir /tmpoutput_dir /var/www/squid-reports/resolve_ip yesuser_ip yestopuser_sort_field languageBYTES reverseuser_sort_field BYTES reversedate_format uremove_temp_files yesindex yesoverwrite_report yesuse_comma notopsites_num 100topsites_sort_order CONNECT Dmax_elapsed 28800000report_type topsites users_sites sites_users date_time denied auth_failures site_user_time_date long_url nodate_time_by bytes

CONFIGURACION DE APACHE

Page 17: manual de squid(2)

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

Page 18: manual de squid(2)

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

Page 19: manual de squid(2)

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.

Page 20: manual de squid(2)

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.

Page 21: manual de squid(2)

Ahora puedes ver todas las estadísticas de los reportes.

Page 22: manual de squid(2)

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

Page 23: manual de squid(2)

SQUID.CONF

El archivo de configuración quedara asi:

#configuracion generalhttp_port 3128icp_port 0forwarded_for offhierarchy_stoplist cgi-bin ?acl QUERY urlpath_regex cgi-bin \?cache deny QUERYacl apache rep_header Server ^Apachebroken_vary_encoding allow apacheaccess_log /var/log/squid/access.log squidemulate_httpd_log onhosts_file /etc/hostscache_dir aufs /var/spool/squid/ 200 16 256cache_mem 128 MB

#para comunicar con el active directory de windowsauth_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 25auth_param basic realm Proxy57auth_param basic credentialsttl 1 minutes

#acl'sacl CONNECT method CONNECTacl Safe_ports port 80 443 1024-65535acl all src 0.0.0.0/0.0.0.0acl manager proto cache_objectacl localhost src 127.0.0.1/255.255.255.255acl to_localhost dst 127.0.0.0/8acl lan src 172.20.0.0/255.255.255.0acl purge method PURGEacl ldapLimitado external ldap_group Accesolimitadoacl ldapTotal external ldap_group Accesototalacl 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:00acl ldap-group proxy_auth REQUIREDoffline_mode on

#politicashttp_access deny !Safe_portshttp_access deny CONNECT

Page 24: manual de squid(2)

http_access allow horario_almuerzo all ldapLimitado url_deny http_access allow ldapTotal all !cont_palabrashttp_access allow ldapLimitado all !archivos !mime_types !url_deny \!cont_palabras http_access allow manager localhosthttp_access deny manager http_access allow purge localhosthttp_access deny purgehttp_access allow localhosthttp_access deny allhttp_reply_access allow allicp_access deny allheader_access X-Forwarder-For deny allheader_access Via deny allheader_access Accept-Language deny allrefresh_pattern ^ftp: 1440 20% 10080refresh_pattern ^gopher: 1440 0% 1440refresh_pattern . 0 20% 4320cache_effective_user proxycache_effective_group proxycoredump_dir /var/spool/squiderror_directory /usr/share/squid/errors/Spanish

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