SafeChildren Banner

Havoc Oracle Solaris Experts

viernes, 20 de abril de 2007

Reverse Proxy APACHE + MOD_PROXY vs SQUID (Parte 2)

Updated SEP.2009: Esta entrada la escribí hace mucho tiempo, existe una versión más actualizada de cómo instalar squid sobre Solaris 10 en esta dirección http://sparcki.blogspot.com/2009/08/instalar-squid-en-solaris-10-parte-1.html o a en esta otra dirección http://sparcki.blogspot.com/2009/09/instalar-squid-como-proxy-reverso-en.html aunque si quieres puedes continuar con la entrada original para Solaris 9 y squid 2.6.

Ha pasado ya tiempo, pero aquí estamos de nuevo.

En el artículo anterios hacíamos un resumen de lo que debíamos tener (y qué queríamos montar) ahora, vamos a empezar con las partes necesarias.

Las tareas que vamos a realizar son las siguientes:
Descargar / Compilar SQUIDDescargar / Compilar ApacheDescargar / Compilar Mod_SecurityDescargar / Compilar Mod_html_proxyPruebas de Funcionamiento
Como la mejor de las explicaciones es la práctica, ahí vamos, pero debemos establecer unos requisitos mínimos antes de poder comenzar:


A.- Preparación Entorno de Compilación

Es importante entender que las pruebas las he realizado con un entorno Sun Solaris 9/10 SPARC/x86 utilizando el compilador SunCC 5.9 Build40_1 2007/02/08 y con el binario CC en nuestro PATH.

1.- Instalación SQUID Proxy Cache

La página oficial de Squid Proxy Cache es http://www.squid-cache.org y nos bajaremos la versión estable 2.6 más reciente (a día de hoy es la versión 2.6-STABLE12)

$ export CC=cc
$ export CXX=cc
$ export CFLAGS="-fast -native"
$ export CXXFLAGS="-fast -native"
$ cd SQUID-CACHE-DIR
$ ./configure
--enable-delay-pools
--enable-forward-log
--enable-default-err-language=Spanish
--enable-cache-digests
--with-large-files
--with-pthreads
--enable-x-accelerator-vary
--enable-removal-policies
--enable-delay-pools
--disable-internal-dns
--prefix=/opt/applications/squid-2.6

...

$ make
...
$ make install
...

El uso de los flags "-native -fast" sólo son válidos si estamos compilando en un entorno igual al de producción, si no es así podemos utilizar la siguiente parametrización

UltraSPARC III
CFLAGS="-fast -xarch=v8plusb"

UltraSPARC IV
CFLAGS="-fast -xarch=v9 -xlibmopt -xreduction"

x86 - Opteron/Intel
CFLAGS="-fast -xarch=ss2"

x64 - Opteron
CFLAGS="-fast -xarch=amd64"

Puedes encontrar un archivo shell para realizar las tareas de forma automática aquí un poco "manual"

2.- Configuración SQUID Proxy Cache


2.1.- Configuración Directorios

Vamos a crear un grupo y un usuario para hacer más segura la instalación, además después de instalar squid, tendremos la siguiente estructura de directorios, sin embargo

$SQUID_BASE
/bin
/etc
/libexec
/man
/sbin
/share


Para hacer una configuración más personalizada vamos a realizar algunos cambios, como crear una nueva estructura de directorios para la caché, el PID, y el log de la siguiente forma:

$SQUID_BASE
/var
/cache
/logs
/run


# export SQUID_BASE=/opt/applications/squid-2.6
# mkdir -p $SQUID_BASE/var/logs
# mkdir -p $SQUID_BASE/var/run
# mkdir -p $SQUID_BASE/var/cache
# groupadd -g 7000 proxy
# useradd -g proxy -s /bin/false -d /dev/null -u 7000 proxy
# passwd -l proxy
# chown -R root:root $SQUID_BASE
# chmod -R o-r,o-w,o-x $SQUID_BASE
# chmod -R proxy:proxy $SQUID_BASE/var
# chown root:proxy $SQUID_BASE/var/run

2.2.- Configuración SQUID

Desde la versión 2.6 de SQUID se han introducido cambios en el archivo de configuración, muchos de ellos pertenecen a la versión 3.x de SQUID que está en fase de desarrollo. Por ello, la forma antigua de configuración de Transparent Proxy, ha sido modificada (y simplificada). Los parámetros que debemos ajustar son los siguientes:

########################################################
## PARAMETROS ADMINISTRATIVOS
########################################################
visible_hostname NOMBRE-REVERSE-PROXY (en nuestro caso rev-proxy1.test.com)
cache_effective_user USUARIO-QUE-EJECUTA (en nuestro caso proxy)
cache_effective_group GRUPO-QUE-EJECUTA (en nuestro caso proxy)
httpd_suppress_version_string on (elimina la versión en el header)

########################################################
## PARAMETROS PROXY TRANSPARENTE
########################################################
http_port PUERTO vhost (en nuestro caso el puerto 80)
icp_port 0
cache_peer WEBSERVER-ORIGINAL parent 80 0 originserver default (en nuestro caso 192.168.1.72)

Aquí tenemos varias propiedades que han sido importadas de la versión de desarrollo como son:
httpd_suppress_version_string y http_port PUERTO vhost
  • httpd_suppress_version: Tiene una función igual a ServerTokens Minimal de Apache y tiene como objetivo no mostrar la versión de SQUID
  • http_port Nº_PUERTO PARAMETRO: Tiene como función hacer que SQUID se comporte como un proxy transparente si ponemos como parámetro vhost.
  • cache_peer WEBSERVER-ORIGIANL parent 80 0 originserver default: De esta forma hacemos que WEBSERVER-ORIGINAL (su IP) sea el servidor principal (aunque la propiedad sirve para hacer que WEBSERVER-ORIGINAL sea la caché principal, por ese mismo pincipio, se puede hacer el proxy transparente).
Más parámetros de configuración necesarios para una correcta configuración del sistema SQUID

########################################################
## PARAMETROS CACHE
########################################################
cache_dir ufs /opt/applications/squid-2.6/var/cache 2048 16 256
pid_filename /opt/applications/squid-2.6/var/run/squid.pid

########################################################
## PARAMETRIZACION DE LA CACHE MEMORIA
########################################################
cache_replacement_policy heap LFUDA
memory_replacement_policy lru

########################################################
## PARAMETROS TAMA!NO CACHE
########################################################
cache_mem 50 MB
cache_swap_low 90
cache_swap_high 96
maximum_object_size 150 MB
maximum_object_size_in_memory 64 KB

########################################################
## PARAMETRIZACION ERRORES
########################################################
error_directory /opt/applications/squid-2.6/share/errors/Spanish
err_html_text NOMBRE@CORREO.COM

########################################################
## PARAMETRIZACION SEGURIDAD
########################################################
acl SSL_ports port 443-563 # SSL
acl Safe_ports port 80-84 # http

# Permitimos utilizar el CONNECT a puertos seguros, hemos deshabilitado el acces
# para POP y SMTP puesto que nos pueden ocasionar fallos de seguridad, ademas, nos
# pueden utilizar como SPAMMER's
acl CONNECT method CONNECT

# Permitimos acceder al sistema de configuracion solo desde LOCALHOST
http_access allow manager localhost
http_access deny manager

# Cualquier llamada a puertos que no sean seguros denegada
http_access deny !Safe_ports
#Denegamos cualquier intento de CONNECT a los puertos que no sean los especificados
http_access deny CONNECT !Safe_ports

########################################################
## ACCESO A LA CACHE PERMITIDO A TODO EL MUNDO
########################################################
acl all world 0.0.0.0/0.0.0.0
http_access allow world
# No cachemaos los cgi
no_cache deny QUERY


Con esto tenemos una configuración base de SQUID capáz de realizar tareas de Reverse Proxy, como todas las configuraciones que hemos expuesto aquí pueden ser un poco difíciles de ver, tienes un archivo de configuración completo aquí


Hasta el próximo capítulo,

Urko


No hay comentarios:

Publicar un comentario en la entrada