Está en la página 1de 10

Configuracin de Proxy transparente

por Alejandro Moreno


amperisblog[@]gmail.com
http://amperis.blogspot.com



26 de enero de 2008


























Configuracin de Proxy transparente
2

Introduccin

Existen cientos de manuales y howtos de cmo montar un servidor Proxy en
produccin para una empresa. En este manual se har hincapi sobre todo en la manera
de filtrar el contenido Web a ciertas paginas, el filtrado de las descargas por Internet y la
generacin de reports diarios para el control.

Como todos sabemos un Proxy es un software que realiza las peticiones a un servidor en
nombre de un cliente. Aunque la configuracin bsica de un Proxy es la de cachear el
contenido Web este concepto para mi ya no tiene mucho sentido dado las velocidades
que tenemos hoy en dia para el acceso a Internet y sobre todo el aspecto cambiante que
tienen las paginas Web. De que sirve cachear una pagina Web si a los 5 minutos ya ha
cambiado su aspecto.

En este manual voy a explicar como montar un Proxy transparente para ponerlo en
produccin para unos 200 usuarios, con filtro a paginas Web, filtro de descarga de
archivos, reports diarios, etc.
Al ser un Proxy transparente lo que quiero hacer es que el usuario no tenga conciencia
de su existencia y es por eso que el Proxy ser su puerta de enlace TCP/IP.

Para implementar esto vamos a utilizar un servidor que ser un gateway y all
instalaremos todo el software necesario. Como siempre en m (y vosotros no?), si se
puede hacer gratis lo haremos gratis, as que instalaremos un Linux. Para este servidor
utilizaremos la versin 8 de Fedora junto con su ltima versin para Squid. Dado que
tendremos bastantes conexiones este servidor tendr que tener una Ethernet a 1Gbps.

Todas las estaciones de trabajo tendrn como puerta de enlace el servidor Proxy.
Lgicamente aunque el router (o lo que sea) sea alcanzable, los cliente no tienen
permisos para cambiar su configuracin TCP/IP. Recuerda que estamos hablando de
200 estaciones que seguramente estarn ligadas a un dominio NT o Active Directory.


Configuracin de Proxy transparente
3
Instalacin

Una vez que tenemos el servidor ya podemos comenzar la instalacin del SO. Para la
instalacin de Fedora 8 no explicar nada especial salvo elegir el minino numero de
paquetes para posteriormente arrancar el mnimo numero de servicios posibles (si que
instalaremos las herramientas de desarrollo y las herramientas del sistema). Solo
necesitamos lo necesario. Otra cosa importante para cualquier instalacin es seleccionar
la instalacin en ingls ya que es en este idioma donde salen los primeros parches y
sobre todo para facilitar la bsqueda de errores por Internet.

Nota: respecto a la BIOS sera aconsejable en los servers activar la opcin de arrancar
el servidor automticamente cuando haya tensin elctrica. De esta forma cuando se va
la corriente y vuelve nos aseguramos que el Server arranca. Ya se que todos tenemos
un SAI en la empresa. Pero el SAI se termina y no todos tenemos generadores.

Una vez terminada la instalacin debemos hacer una actualizacin completa del sistema
y comenzar a bajar los 300Mb que seguramente abran en actualizaciones.


Luego instalaremos todos los paquetes (si no estn ya instalados) que necesitamos para
nuestra implantacin.

Despus del upgrade reiniciaremos el server (manias mias) para ver que todo ha ido
bien y le echaremos un vistazo al /var/log/messages.

Tambin nos faltarn un par de paquetes no oficiales de Fedora (una lastima que no
sean ya oficiales). Estos son Sarg y Webmin. Los dos son proyectos libres en
Sourceforge. El Webmin es opcional pero lo conoc hace mucho tiempo y para mi viene
de serie en todos los servidores Linux. Una vez descargados empezamos a instalar.

Nota: Yo tengo por costumbre guardarme en /root/instalacion todos los paquetes que
voy instalado. De esta forma si tuviera que montar otra maquina igual en otro sitio
simplemente tendra que seguir los mismos pasos y con las mismas versiones de
paquetes.

Una vez que tenemos todo el software instalado arrancaremos nt sysv para
deshabilitar y habilitar todos los servicios necesitemos. Tenemos que habilitar iptables,
httpd y squid.

# yumupgr ade
# yumi nst al l squi d. i 386 ht t pd. i 386 mr t g. i 386 i pt abl es. i 386
# cd / r oot / i nst al aci on
# r pm- i webmi n- 1. 390- 1. noar ch. r pm
# t ar - xzvf sar g- 2. 2. 3. 1. t ar . gz
# cd sar g- 2. 2. 3. 1
# cat README
# . / conf i gur e - - enabl e- sysconf di r =/ et c/ sar g - - enabl e- ht ml di r =/ var / www/ ht ml / sar g
# make
# make i nst al l
# make cl ean
Configuracin de Proxy transparente
4
Ahora solo queda ir paquete por paquete configurndolo.

Configuracin del gateway

Por defecto Linux no realiza funciones de ruteo (forwarding), por tanto no es capaz de
aceptar un paquete que no sea para el y rutarlo hacia la mejor ruta. Como nuestro
objetivo es que este servidor tambin haga de gateway tendremos que activar esta
opcin.
Editaremos / et c/ sysct l . con y cambiaremos net . i pv4. i p_f or war d=0
por net . i pv4. i p_f or war d=1. Despus solo tenemos que reiniciar los servicios
de red con ser vi ce net wor k r est ar t .

Si configuramos una estacin y le ponemos como puerta de enlace este servidor ya
deberamos poder navegar por Internet (si no navegamos tendramos que parar el
iptables ya que aun no lo hemos configurado correctamente).






























Configuracin de Proxy transparente
5
Configuracin de iptables

Lo primero que vamos hacer es asegurar el servidor configurando el firewall. Para ello
editaremos la configuracin de iptables desde / et c/ sysconf i g/ i pt abl es. La
configuracin sera algo parecida a esta:


*f i l t er
: I NPUT ACCEPT [ 0: 0]
: FORWARD ACCEPT [ 0: 0]
: OUTPUT ACCEPT [ 0: 0]
: RH- Fi r ewal l - 1- I NPUT - [ 0: 0]
: LOGDROP - [ 0: 0]

- A LOGDROP - j LOG - - l og- pr ef i x " I PTABLES "
- A LOGDROP - j DROP

- A I NPUT - j RH- Fi r ewal l - 1- I NPUT
- A FORWARD - j RH- Fi r ewal l - 1- I NPUT
- A RH- Fi r ewal l - 1- I NPUT - i l o - j ACCEPT
- A RH- Fi r ewal l - 1- I NPUT - mst at e - - st at e ESTABLI SHED, RELATED - j ACCEPT


# Fi l t r o de paquet es ent r ant es al ser vi dor .
- A RH- Fi r ewal l - 1- I NPUT - mst at e - - st at e NEW- mt cp - p t cp - s
192. 168. 1. 5/ 255. 255. 255. 255 - - dpor t 22 - j ACCEPT
- A RH- Fi r ewal l - 1- I NPUT - mst at e - - st at e NEW- mt cp - p t cp - s
192. 168. 1. 5/ 255. 255. 255. 255 - - dpor t 3128 - j ACCEPT
- A RH- Fi r ewal l - 1- I NPUT - mst at e - - st at e NEW- mt cp - p t cp - s
192. 168. 1. 5/ 255. 255. 255. 255 - - dpor t 10000 - j ACCEPT

# Fi l t r amos donde pueden conect ar se l as est aci ones

# podemos hacer Pi ngs a I nt er net
- A RH- Fi r ewal l - 1- I NPUT - p i cmp - mi cmp - s 192. 168. 1. 0/ 255. 255. 255. 0 - - i cmp- t ype echo-
r equest - j ACCEPT

# Acceso al cor r eo
- A RH- Fi r ewal l - 1- I NPUT - mt cp - p t cp - s 192. 168. 1. 0/ 255. 255. 255. 0 - d 80. 80. 80. 80 - -
dpor t 25 - j ACCEPT
- A RH- Fi r ewal l - 1- I NPUT - mt cp - p t cp - s 192. 168. 1. 0/ 255. 255. 254. 0 - d 80. 80. 80. 80 - -
dpor t 110 - j ACCEPT

# Acceso a Web segur o
- A RH- Fi r ewal l - 1- I NPUT - mt cp - p t cp - s 192. 168. 1. 0/ 255. 255. 255. 0 - -
dpor t 443 - j ACCEPT

# per mi t i mos hacer consul t as DNS
- A RH- Fi r ewal l - 1- I NPUT - p udp - s 192. 168. 1. 0/ 255. 255. 255. 0 - -
dpor t 53 - j ACCEPT

# Denegamos el r est o de paquet es
- A RH- Fi r ewal l - 1- I NPUT - mt cp - p t cp - j LOGDROP
- A RH- Fi r ewal l - 1- I NPUT - j DROP

# Pr ohi bi mos el I CMP Redi r ect par a evi t ar el cambi o de r ut a de l os paquet es.
- A OUTPUT - p i cmp - mi cmp - - i cmp- t ype r edi r ect - j DROP

COMMI T
*nat
: PREROUTI NG ACCEPT [ 2: 557]
: POSTROUTI NG ACCEPT [ 1: 108]
: OUTPUT ACCEPT [ 1: 108]

# Redi r ecci onami ent o par al el Tr anspar ent - Pr oxy con Squi d
- A PREROUTI NG - i et h0 - p t cp - mt cp - s 192. 168. 1. 0/ 255. 255. 255. 0 - - dpor t 80 - j REDI RECT
- - t o- por t s 3128

COMMI T
Configuracin de Proxy transparente
6
Existen multitud de scripts para generar reglas para iptables. Lo que definimos primero
son las reglas necesarias para que solo el administrador del sistema (@ip 192.168.1.5)
se pueda conectar por SSH y al Webmin.
El siguiente conjunto de reglas definen donde se pueden conectar las maquinas. Por
poltica de empresa los usuarios solo podrn navegar por Internet (puertos 80 y 443 de
TCP) y acceder al correo electrnico (110 y 25 de TCP). Segn nuestro caso el servidor
de correo electrnico se encuentra en la propia empresa, por tanto los usuarios solo
pueden leer el correo de la empresa y no se pueden conectar hacia Internet en busca de
de un servidor de correo.

Para terminar denegamos todos los paquetes y marcamos con la etiqueta IPTABLES
todos los paquetes TCP para identificar mejor los paquetes denegados dentro de
/ var / l og/ messages.

Para las reglas de NAT introducimos una regla de prerouting por la cual todos los
paquetes que vayan al puerto 80 (http) se redireccionan al pueto 3128 (el Proxy squid).

Nota: Para el que no este acostumbrado al funcionamiento de iptables decir que las
ACLs se procesan de arriba abajo. Cuando una regla es cierta para un paquete, este es
denegado o aceptado y ya no se procesan ms reglas. Si al final el paquete no es
aceptado por ninguna regla, la ultima regla elimina el paquete.

Para que iptables cargue las nuevas reglas reiniciamos el servicio con ser vi ce
i pt abl es r est ar t .


Configuracin del Proxy

La poltica que seguiremos para esta implementacin ser la siguiente: queremos que
todos los usuarios puedan navegar (a excepcin de los que yo considere), queremos que
existen ciertas paginas prohibidas, tambin queremos que cierto tipo de archivos (exes,
pif, etc) estn prohibidos al igual que las conexiones a Messenger.

Antes de configurar Squid vamos a crear 5 archivos de configuracin en
/ et c/ squi d:

deny_sites.conf: dominios que estarn prohibidos,
deny_files.conf: archivos que estarna prohibidos,
accept_sites.conf: dominios que estarn permitidos y
deny_srchost: usuarios que no tienen acceso a navegar.

El contenido de deny_sites.conf ser:


El contenido de deny_files.conf ser:
pl ayboy. com
yonki s. com
messenger . msn. com
yout ube. com
Configuracin de Proxy transparente
7

El contenido de accept_sites.conf ser:

El contenido de deny_srchost.conf ser

Ahora ya estamos en condiciones de configurar Squid. Partiremos de la configuracin
estndar de / et c/ squi d y la iremos modificando para ajustar a nuestras
necesidades.

Lo primero que haremos es que el Proxy trabaje por su puerto estndar de forma
transparente. En versiones anteriores a la 2.6 la forma de ponerlo transparente no era tan
fcil como simplemente poner transparent.

El siguiente paso es definir el conjunto de reglas de control de acceso:

Una vez definidas las ACLs, las aplico para denegarlas o aceptarlas. Estas conjunto de
reglas van despus del comentario I NSERT YOUR OWN RULE( S) HERE TO ALLOW ACCESS
FROM YOUR CLI ENTS.
\ . [ eE] [ xX] [ eE] $
\ . [ bB] [ aA] [ t T] $
\ . [ pP] [ i I ] [ f F] $
\ . [ r R] [ eE] [ gG] $
\ . [ wW] [ sS] [ hH] $
\ . [ dD] [ l L] [ l L] $
\ . [ cC] [ aA] [ bB] $
mi cr osof t . com
wi ndowsupdat e. com
adobe. com
aeat . es
seg- soci al . es
192. 168. 1. 10
192. 168. 1. 11
ht t p_por t 3128 t r anspar ent
acl mi r ed sr c 192. 168. 1. 0/ 255. 255. 255. 0
acl deny_si t es ur l _r egex " / et c/ squi d/ deny_si t es. conf "
acl accept _si t es ur l _r egex " / et c/ squi d/ accept _si t es. conf "
acl deny_sr chost s sr c " / et c/ squi d/ deny_sr chost s. conf "
acl deny_f i l es ur l pat h_r egex " / et c/ squi d/ deny_f i l es. conf "
acl messenger r ep_mi me_t ype - i ^appl i cat i on/ x- msn- messenger $
Configuracin de Proxy transparente
8

Nota: dado que la ACL accept_sites est antes de deny_files, si intentsemos bajarnos
por ejemplo un archivo ejecutable de windows.com o adobe.com podramos.

Con esta mnima configuracin los usuarios ya podran comenzar a navegar.
Reiniciaremos el squid con ser vi ce squi d r est ar t y echaremos un vistazo a
/ var / l og/ squi d/ access. l og y / var / l og/ squi d/ st or e. l og.

Otra prueba interesante es desde una maquina cliente navegar por
http://whatismyipaddress.com/ la cual nos informa de los detalles del Proxy que esta
haciendo la peticin, seal que nos indica que las peticiones las est realizando un
Proxy y no la maquina directamente.

Si un usuario debe descargarse algn programa de alguna pagina confiable pondramos
el dominio de esta pagina dentro de accept_sites.conf y si queremos que alguna maquina
no pueda navegar, pondramos su direccin IP dentro de deny_srchosts.

Opciones de tunning y seguridad

Aunque con la configuracin estndar junto con la anterior el Proxy ya estara
funcionando correctamente deberamos mejorarlo si queremos ponerlo en produccin
para ms de 200 usuarios.

En http://www.visolve.com/squid/squid26/contents.php se encuentran las descripciones
de todos los parmetros de Squid para la versin 2.6.

Como hemos tocado el tamao de la cache tendremos que volver a crearla.

Configuracin de Sarg

El siguiente paso ser configurar las estadsticas de Sarg por las cuales podremos ver
por donde navega la gente, quien es la persona que ms navega y por donde.
# ser vi ce squi d st op
# squi d z
# ser vi ce squi d st ar t
cache_mem128 MB
maxi mum_obj ect _si ze 80000 KB
maxi mum_obj ect _si ze_i n_memor y 200 KB
cache_di r uf s / var / spool / squi d 3072 32 512
cache_mgr admi n@mi domi ni o. com
vi si bl e_host name pr oxy01. mi domi ni o. com
ht t pd_suppr ess_ver si on_st r i ng on
ht t p_access al l ow l ocal host
ht t p_access al l ow accept _si t es
ht t p_access deny deny_f i l es
ht t p_access deny deny_si t es
ht t p_access deny deny_sr chost s
ht t p_access deny messenger
ht t p_access al l ow mi r ed
ht t p_access deny al l
Configuracin de Proxy transparente
9
La configuracin de Sarg se encuentra en / et c/ sar g/ sar g. conf (tal como
hemos compilado la aplicacin anteriormente). La configuracin es bastante sencilla.
Los parmetros que necesitaremos retocar son:

Luego crearemos el siguiente script / r oot / ut i l / sar g- di ar i o. sh el cual
deber ejecutarse cada dia. Este script crear el report de navegacin del dia anterior y
lo dejar en / var / www/ ht ml / sar g segn le hemos dicho en el archivo de
configuracin.

Al dia siguiente ya podramos consultar http://prowy.midomincio.com/sarg para ver los
reports generados.


Configuracin de MRTG

Para poder crear grficos estadsticos de Squid tendremos que activar el soporte SNMP
de Squid. Para ello editaremos / et c/ squi d/ squi d. con y aadiremos los
siguientes parametros:


l anguage Spani sh
access_l og / var / l og/ squi d/ access. l og
t i t l e "MI DOMI NI O Acceso di ar i o a pagi nas Web
r esol ve_i p yes
t opsi t es_num25
show_sar g_i nf o no
show_sar g_l ogo no
out put _di r / var / www/ ht ml / sar g
#! / bi n/ bash
YESTERDAY=$( dat e - - dat e " 1 day ago" +%d/ %m/ %Y)
sar g n - z - d $YESTERDAY- $YESTERDAY
exi t 0
acl snmppubl i c snmp_communi t y publ i c
snmp_por t 3401
snmp_access al l ow snmppubl i c al l
Configuracin de Proxy transparente
10
Crearemos el archive de configuracin / et c/ mr t g/ mr t g_squi d. cf g con el
siguiente contenido:


Para que MRTG sea capaz de generar los grficos tiene que saber exactamente como
esta dispuesta su informacin, para ello tiene que leer la base informacin de
administracin (MIB) con el parmetro LoadMIBS.

Luego crearemos una tarea programada cada cinco minutos para ejecutar el siguiente
comando:




Ht ml Di r : / var / www/ ht ml / mr t g- squi d
I mageDi r : / var / www/ ht ml / mr t g- squi d
LogDi r : / var / l i b/ mr t g
Thr eshDi r : / var / l i b/ mr t g
LoadMI BS: / et c/ squi d/ mi b. t xt

Tar get [ pr oxy- hi t ] : cacheHt t pHi t s&cacheSer ver Request s: publ i c@pr oxy. mi domi ni o. com: 3401
Rout er Name[ pr oxy- hi t ] : cacheUni qName
MaxByt es[ pr oxy- hi t ] : 100000
Ti t l e[ pr oxy- hi t ] : HTTP Hi t s
PageTop[ pr oxy- hi t ] : <H2>pr oxy Cache St at i st i cs: HTTP Hi t s/ Request s</ H2>
Suppr ess[ pr oxy- hi t ] : y
LegendI [ pr oxy- hi t ] : HTTP hi t s
LegendO[ pr oxy- hi t ] : HTTP r equest s
Legend1[ pr oxy- hi t ] : HTTP hi t s
Legend2[ pr oxy- hi t ] : HTTP r equest s
YLegend[ pr oxy- hi t ] : per mi nut e
Shor t Legend[ pr oxy- hi t ] : r eq/ mi n
Opt i ons[ pr oxy- hi t ] : noper cent , per mi nut e, dor el per cent , unknaszer o

Tar get [ pr oxy- sr vkbi nout ] :
cacheSer ver I nKb&cacheSer ver Out Kb: publ i c@pr oxy. mi domi ni o. com: 3401
Rout er Name[ pr oxy- sr vkbi nout ] : cacheUni qName
MaxByt es[ pr oxy- sr vkbi nout ] : 76800
Ti t l e[ pr oxy- sr vkbi nout ] : Cache Ser ver Tr af f i c I n/ Out
PageTop[ pr oxy- sr vkbi nout ] : <H2>Cache St at i st i cs: Ser ver t r af f i c vol ume ( I n/ Out ) </ H2>
Suppr ess[ pr oxy- sr vkbi nout ] : y
LegendI [ pr oxy- sr vkbi nout ] : Tr af f i c I n
LegendO[ pr oxy- sr vkbi nout ] : Tr af f i c Out
Legend1[ pr oxy- sr vkbi nout ] : Tr af f i c I n
Legend2[ pr oxy- sr vkbi nout ] : Tr af f i c Out
YLegend[ pr oxy- sr vkbi nout ] : per mi nut e
Shor t Legend[ pr oxy- sr vkbi nout ] : b/ mi n
kMG[ pr oxy- sr vkbi nout ] : k, M, G, T
ki l o[ pr oxy- sr vkbi nout ] : 1024
Opt i ons[ pr oxy- sr vkbi nout ] : noper cent , per mi nut e, unknaszer o
LANG=C LC_ALL=C / usr / bi n/ mr t g / et c/ mr t g/ mr t g_squi d. cf g - - l ock- f i l e
/ var / l ock/ mr t g/ mr t g_squi d - - conf cache- f i l e / var / l i b/ mr t g/ mr t g_squi d. ok

También podría gustarte