ADMINISTRACIÓN • Squid

Implementar un proxy casero con Squid

PUERTO SEGURO

Un servidor proxy proporciona una navegación más segura y eficiente. Aunque existen soluciones proxy comerciales disponibles, todo lo que realmente necesitamos es Linux y un viejo PC en el desván. POR GEERT VAN PAMEL
engo una red casera desde hace bastantes años. Empecé con un router usando Windows XP con ICS (Internet Connection Sharing) y una tarjeta Ethernet con varias interfaces de red. Las principales desventajas eran la inestabilidad, bajo rendimiento y falta

T

total de seguridad. Solucionar los problemas era totalmente imposible. La configuración del firewall quedaba a merced de usuarios inexpertos, que podían pulsar aleatoriamente sobre la configuración de seguridad como el que juega a la ruleta rusa.

Finalmente migré a Linux y configuré un firewall con iptables en un Pentium II que hacía de router. El firewall mantiene a los atacantes fuera de mi red, y registra el tráfico entrante y saliente. Además del firewall iptables, también configuré un servidor proxy

Tabla1: Hardware recomendado
Componentes Necesarios Intel Pentium II CPU, o superior (¿Por qué no un Alpha Server sobrante?) 80 - 100 MB de memoria mínimo 1 ó más discos duros IDE (podemos reutilizar 2 viejos discos duros: uno con 1GB del sistema y el swap y el otro con 3GB de caché, más el directorio /home) 2 tarjetas Ethernet, minihub, modem fast Ethernet y router wireless o hub CDROM, lector DVD Especificaciones 350 Mhz Cuanto más, mejor 4GB mínimo 100 Mbit/s si es posible El software se distribuye principalmente por DVD

56

Número 14

WWW.LINUX-MAGAZINE.ES

Más adelante.STABLE6-3. En primer lugar. Se encuentra disponible en Internet en [3] o en uno de los mirrors [4] como tar. teclado y monitor.net cache_mgr sysman dns_nameservers 192. forwarded_for off significa que la dirección IP del servidor proxy no será enviada al exterior. pero también puede violar las reglas de privacidad.gz (compilado desde las fuentes).2 figuración lleguen al mundo exterior cuando se navegue por la Web: vi /etc/squid/squid.conf. Este sistema firewall debería operar con una mínima intervención humana. El servidor proxy Squid.mshome. por ejemplo). Desde el minihub mostrado en la Figura 1.conf . visible_hostname squid append_domain .rpmU # SuSE 9. de la casa usando cable UTP estándar o una conexión wireless. se pueden “bajar las escaleras” hasta la red Configurar Squid Una vez que ha sido instalado./U squid-2. filtrar los molestos popups y bloquear URLs peligrosas.rpmU # Red Hat 8 rpm -i /cdrom/Fedora/RPMS/U squid-2. Nótese el punto delante del dominio. se pueden desconectar el ratón. Cuando este parámetro está en off.conf.d/ squid reload. no está bien documentado del todo.5.0. Suponiendo que el firewall esté ya funcionando. Puede que tengamos que ajustar la configuración de la BIOS para que el ordenador pueda trabajar sin el teclado.i386. el siguiente paso es configurar Squid. será necesario configurarlo. Es posible editar el archivo de configuración con un editor de textos. donde ni lo oigamos. Comenzamos El primer paso es encontrar el hardware necesario.. El objetivo es poder colocar todo el sistema en el desván.. revistas y páginas Web. Squid tiene un archivo de configuración centralizado. También limita el uso del ancho de banda.168. los mecanismos de autenticación y control de acceso no funcionarán. Squid es una implementación completa en software libre y de alto rendimiento de un servidor proxy. especialmente cuando hablamos de pequeñas redes caseras como la mía. por lo que tras la configuración del sistema. Proporciona amplios controles de acceso y se integra con facilidad con el firewall iptables. Esta característica puede ayudar a depurar fallos en los filtros de Quid.i386. se registra la URL completa en los archivos log de Squid.. por otro lado. Esta sección resume algunas configuraciones importantes del archivo squid. En mi caso. Con strip_query_terms on no se registran en el log los parámetros de las URL más allá del signo ?.5. la versión estable de Squid es la 2. aunque la explicación a veces es algo técnica y complicada de entender. se habrá de evitar que ciertos metadatos relacionados con la con- Nótese que no pueden hacerse anónimos Referer y WWW-Authenticate ya que de lo contrario. el dominio (interno) donde opera la máquina y el nombre de usuario responsable del servidor.5. La Figura 1 muestra la configuración de red del Pentium II que se ha utilizado como firewall y servidor proxy.4. La tabla 1 muestra el hardware recomendado para la máquina firewall. vamos a mostrar cómo configurar Squid. Puede instalarse fácilmente usando uno de los siguientes comandos: rpm -i /cdrom/RedHat/RPMS/U squid-2.STABLE6-6.1 dns_testnames router. acelera el acceso a Web y nos permite filtrar URLs. La siguiente configuración identifica el host de Squid.STABLE7-4.i586.Squid • ADMINISTRACIÓN Squid para mejorar el rendimiento de Internet.. El bloqueo centralizado de publicidad y descargas peligrosas es rentable y transparente para el usuario final.mshome. Encontraremos abundantes artículos acerca de firewalls en libros. anonymize_headers deny U From Server Via User-Agent forwarded_for off strip_query_terms on En el momento de escribir estas líneas. (Véanse [1] y [2]. En este artículo.net fqdncache_size 1024 http_port 80 icp_port 0 . Un servidor proxy Squid filtra el tráfico Web y cachea los archivos a los que se accede frecuentemente. Existe una descripción detallada de la configuración en el archivo squid. el servidor proxy Squid y el firewall iptables trabajan juntos para proteger mi red de intrusos y HTML peligrosos. la configuración debe recargarse con el comando /sbin/ init.rpm U # Fedora Core 3 rpm -i /cdrom/. encontramos el nombre del servidor local de DNS y el número de nombres de dominio a cachear en el servidor Squid. Cada vez que cambia este archivo.

cache_replacement_policyU heap GDSF memory_replacement_policyU heap GDSF Jerarquía Proxy El proxy Squid puede trabajar de manera jerárquica. no es especialmente fácil de recordar. La configuración GDSF mantiene pequeños objetos populares en la caché. Los objetos grandes requeridos una sola vez pueden colocar fuera muchos objetos pequeños. se usa el formato de Web.be always_direct allow U direct-domain acl direct-path urlpath_regexU -i "/etc/squid/direct-path. evita también el peligro de conflicto de acceso al disco pero usando más memoria. se puede especificar la configuración con características como las siguientes: • mecanismo de I/O del disco – aufs • ubicación de la caché en el disco – /var/cache/squid • cantidad de espacio en disco que puede ser usado por el servidor proxy – 2. es posible hacer visibles las cabeceras mime en el archivo access. Una elección común es la 8080 o la 80.reg" always_direct allow direct-path E s re c o m e n d a b l e m a n t e n e r l a u b i c a c i ó n e s t á n d a r p a ra l a c a c h é en /var/cache/squid. Cuanto más cercano esté el proxy a las páginas originales. incrementando de esta manera el rendimiento global. S i s e m u eve a o t ro d i s c o p o r m o t i vo s d e re n d i m i e n t o o d e c a p a c i d a d . menos riesgo de conflictos de acceso al disco • diskd – demonio diskd. pero en la práctica. Con log_mime_hdrs on. El espacio en disco se distribuye por todos los directorios. Si se fija a off. se acepta una cierta variación en la distribución. Normalmente se esperaría una distribución pareja a lo largo de los directorios. el 3128. el ISP tenderá menos a cachear los contenidos de su competidor… 58 Número 14 WWW. siempre que la configuración no entre en conflicto con otros puertos de nuestro router. ¡El navegador usará aún nuestro proxy local! acl direct-domain U dstdomain . Especificación del Formato de Log Puede elegirse entre el formato de log de Squid y el formato estándar de servidor Web usando el parámetro emulate_httpd_log. El puerto por defecto de Squid. Estudios detallados de HP Laboratories [6] han revelado que un algoritmo LRU no es siempre la opción más inteligente. Esta configuración sincroniza los servidores proxy. van a existir menos procesos). sólo será necesario modificar el enlace simbólico. obtendremos más detalles con el formato Squid.ES . pero para el uso casero.conf. No se está usando cp_port. La caché es un árbol de directorios. y de allí c re a r u n e n l a c e s i m b ó l i c o a l d i re c t o r i o re a l d e c a c h é . Evitar Bloqueos Squid necesita guardar su caché en algún lugar del disco duro. Debido a que nuestro propio ISP es más lejano. una estructura de directorios es suficiente. UFS es el sistema de I/O de archivos clásico de UNIX. Con la opción cache_dir en el archivo squid. Se recomienda usar aufs para evitar cuellos de botella. más probabilidad hay de que la página se cachee. Esto puede ayudar a acelerar las visitas a sus páginas. (Al usar aufs.log. Cuando el parámetro se fija a on. Ver [7] para mayor información acerca del análisis de archivos log de Squid. Sustitución de la Caché El servidor proxy usa un algoritmo LRU (Least Recently Used).5 GB • número de directorios principales – 16 • subdirectorios – 256 Por ejemplo: Las opciones para métodos de acceso a disco son las siguientes: • ufs – acceso a disco clásico (demasiada I/O puede ralentizar el servidor Squid) • aufs – UFS asíncrona con hilos. mientras que elimina los más grandes y menos usados. Es posible encontrar configuraciones más complejas utilizando múltiples discos. # ls -ld /var/cache/squid lrwxrwxrwx 1 root rootU 19 Nov 22 00:42 U /var/cache/squid -> U /volset/cache/squid Figura 1: Configuración básica de una LAN Ethernet.ADMINISTRACIÓN • Squid http_port es el puerto usado por el servidor proxy. Si se desea evitar el proxy padre para algunos destinos.LINUX-MAGAZINE. Se puede elegir cualquiera. por lo que lo fijamos a 0. se puede habilitar una resolución directa.turboline. por lo que será conveniente que limitemos el tamaño máximo de objeto para la caché: cache_mem 20 MB maximum_object_sizeU 16384 KB maximum_object_sizeU _in_memory 2048 KB Algunos ISPs permiten usar su servidor proxy para visitar sus propias páginas Web incluso aunque no se sea cliente.

be no-query significa que no usamos. La tabla 2 proporciona una guía para la creación de listas ACL.. Los archivos FTP se descargan normalmente una sola vez. es posible especificar un round-robin para acelerar la resolución de las páginas y minimizar el retraso cuando uno de los servidores no esté disponible.tiscali. POST. excepto cuando se descarguen repetidamente.248. en cuyo caso el archivo debería contener una expresión regex por línea. Si no se quieren ver ciertas páginas o marcos. El script del Listado 2 hará invisibles las páginas no deseadas. véase [8]. se examinará cómo usar las listas ACL para un control más detallado al acceso a Internet. En esta sección.reg" deny_info filter_spam block-hosts http_access deny block-hosts acl noblock-url url_regex -i "/etc/squid/noblock-url. El ACL puede incluir también una expresión regular (regex para abreviar) con la URL usando una construcción url_regex.beU parent 3128 3130 U no-query default acl tiscali-proxy U dstdom_regex -i U \. Así mismo.199 U parent 8080 7 U no-query round-robin cache_peer 80.tiscali.0/24 always_direct allow U localnet-dst Tabla 2:Guía para ACL • el orden de las reglas es importante • primero se listan todas las reglas de denegación • se ejecuta la primera regla coincidente • el resto de las reglas se ignora • la última regla debería ser permite todo Listado 1: Bloqueando páginas no buscadas 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 acl block-ip dst "/etc/squid/block-ip. Para Squid.tiscali.mshome. La -i (ignorar mayúsculas) significa que se usarán comparaciones sin diferenciación entre mayúsculas y minúsculas.200.be$ cache_peer_access U proxy.168.beU parent 3128 3130 U no-query default cache_peer_domain U proxy. Si se está configurando un sistema con múltiples proxys.reg" deny_info filter_spam block-path http_access deny block-path acl block-url url_regex -i "/etc/squid/block-url. pero esto proporciona cache_peer proxy.tiscali. ICP (Internet Caching Protocol). FTP • métodos: GET.LINUX-MAGAZINE.200. Es posible filtrar por: • dominios de cliente o servidor • subredes IP del cliente o servidor • ruta URL • URLs completas. se pueden bloquear automáticamente las correspondientes URLs en el servidor proxy.248. Recordemos que la mayoría de los navegadores establecen conexiones en paralelo para obtener todos los elementos de una página.248. CONNECT • día y hora • tipo de navegador • nombre de usuario El Listado 1 muestra ejemplos de comandos que bloquean páginas no deseadas. o pueden estar en un nombre de fichero entre dobles comillas. las páginas locales no se cachean normalmente.tiscali. debido a que ya residen en nuestra red: acl FTP proto FTP always_direct allow FTP acl local-domain dstdomain U . También se ha dicho que las listas ACL (Access Control Lists) pueden usarse para permitir acceso directo a las páginas sin usar el proxy padre.Squid • ADMINISTRACIÓN cache_peer proxy. por lo que generalmente no se deseará cachearlos. La marca <!-. Puede ser una buena idea permitir la navegación WYSIWYG (lo-que-ves-es-lo-que-tienes).0.be allow U tiscali-proxy mayor libertad. incluyendo parámetros • palabras clave • protocolos: HTTP. Puede obtenerse la misma funcionalidad usando expresiones regulares. Si se usan múltiples servidores proxy para obtener estos elementos.ES Número 14 59 .net always_direct allow U local-domain acl localnet-dst dst U 192. WWW. HEAD.reg" deny_info filter_spam block-url http_access deny block-url cache_peer 80. cache_peer 80.be .. las expresiones regulares pueden especificarse inmediatamente.tiscali\.200 U parent 8080 7 U no-query round-robin . Cada vez que Squid ejecuta la etiqueta deny_info. la respuesta debería ser más rápida.207U parent 8080 7 U no-query round-robin Filtrado con Squid En las secciones precedentes se han comentado algunas configuraciones importantes de Squid. sin líneas vacías.200.reg" deny_info filter_spam block-ip http_access deny block-ip acl block-hosts dstdom_regex -i "/etc/squid/block-hosts.reg" http_access allow noblock-url Safe_ports block-path urlpath_regex -i "/etc/squid/block-path. o no podemos usar.esconde cualquier otro mensaje de error de Squid en el cuerpo del texto. envía el archivo /etc/squid/errors/filter_spam al navegador en lugar de a la página Web… filtrando efectivamente los objetos no deseados.

160.reg.com$ \. \..hln\. Pueden habilitarse los puertos SSL cuando se esté conectado.reg . ^ads1\. dado que a veces son archivos zip ejecutables que instalan software. Para Fedora.be$ ^metrics\.0/24 http_access deny !localnet-src Proteger los Puertos Por razones de seguridad.whitehouse.0/18 La última regla debería permitirlo todo. ^http://ads\.64.7.playboy\. ^a\.0/19 64.net$ \.230. 03 <script language="JavaScript" type="text/javascript"> 04 <!-05 window. Es importante recordar que el protocolo normal HTTP es sin conexión. También puede ser una buena idea bloquear ciertos tipos de archivos. Lo mismo puede hacerse con los puertos con conexión. tecleando el siguiente http_access allow all comando: Para SuSE el directorio /sbin/init. ^sm6\. nombre de archivo o extensión del archivo. Por ejemplo.64.status="Filter " + document.0.metriweb\. ^adfarm\.reg ..metriweb\. //.d/squid reload 60 Número 14 WWW. y denegarlo en otro caso.belstat\.insites\.com/ Habilitando al Resto Para habilitar únicamente los protocolos y métodos que se deseen: acl localhost src U 127.168.be$ \..location. \.255 acl localnet-src src U 192..255. adserver.be$ side6 www. 64. El cliente y el navegador establecen una nueva conexión para cada página visitada.. es posible listar expresiones regulares describiendo las páginas en el archivo /etc/squid/block-hosts. Los usuarios externos en Internet no deberían poder acceder a nuestra caché: acl allow-proto proto HTTP http_access deny !allow-proto acl allow-method U method GET POST http_access deny U !allow-method Una vez que se haya finalizado la configuración.255. Pueden añadirse expresiones regulares para las URL que específicamente no queramos bloquear en /etc/squid/noblock-url.192. Pueden usarse whois [9] para ayudarnos a identificar las subredes y luego añadir las subredes al archivo /etc/squid/block-ip.d Listado 3:Bloqueo por Nombre de Dominio 01 02 03 04 05 06 07 08 09 10 11 12 13 14 vi /etc/squid/block-hosts.d es estándar.. ^al\.reg .. acl SSL_ports port 443 563 acl SSL_ports port 1863 U # Microsoft Messenger acl SSL_ports port 6346-6353 U # Limewire http_access allow U CONNECT SSL_ports http_access deny U CONNECT ¡Debe impedirse que desconocidos hagan mal uso de nuestra caché! Se desea que sólo se use en la propia intranet.com\. Squid nos permite bloquear contenidos por subred IP. ^sc\. puede que no queramos permitir los archivos .adtech.ES . ^ads\.$ \.pathname. se usará setup (Fedora). ya que la regla anterior era una prohibición… No debemos olvidar reiniciar el servidor Squid cada vez que cambiemos los parámetros.128.57.exe. se creará un enlace simbólico: cd /sbin ln -s /etc/init.115. puede buscare la razón en el archivo log en var/log/squid/cache. Por supuesto.0/19 66. ^ad\..de \.. se deberían deshabilitar todos los puertos y habilitar sólo los puertos Web usando la sintaxis mostrada en en Listado 5.152.128.255.ADMINISTRACIÓN • Squid Listado 2: Hacer Invisible una Página 01 vi /etc/squid/errors/filter_spam 02 . Tras recargar.msads\. Por ejemplo.0. ^as\. tal y como se muestra en el Listado 4.. se pueden bloquear páginas con contenido sexual explícito. /sbin/init.. si algo no funciona como se esperaba.. 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ^tracking\.log.com Para bloquear anuncios o páginas con contenido sexual por el nombre de dominio.reg: vi /etc/squid/block-ip.LINUX-MAGAZINE.0/19 66.$ \. ^sa\.1/255.0/18 66.doubleclick\.reg.0. vi /etc/squid/noblock-url. 06 // --> 07 </script> 08 <noscript><plaintext><!-- Squid también permite filtrar por expresiones regulares usadas en la URL.0/19 64. yast2 (SuSE) o una herramienta equivalente para activar el servicio Squid.. nuestro filtro puede ocasionalmente provocar un falso positivo.net$ ^ss\. Squid permite bloquear archivos por ruta. como se muestra en el Listado 3.

com/techreports/98/ HPL-98-173.hp. el servidor DHCP y el servidor NTP.pdf [3] Acerca de Squid en general: http:// www. Bélgica.*)?$ \.hp.*)?$ \.crt(\?.ms[cpt](\?. donde aparecen más detalles acerca de la configuración del firewall iptables. external.linux-magazine.*)?$ \. NonStop Tandem. and DNS Caching Server using Linux”: http://users.org/doc/current/lib/ module-re. Las diapositivas están disponibles en [1]. Para los que se preocupan por el consumo: un Pentium II con- WWW.*)?$ \.squid-cache.cmd(\?.nch(\?.html#AEN1685 http://www.squid-cache.p[ir]f(\?.2 Professional – Distribución en DVD http://www. el servidor de cacheo de DNS. De esta manera el Spyware queda bloqueado por las reglas del firewall. desde 1997.*)?$ Imposición del Control Paterno y Bloqueo de Spyware Deberíamos configurar nuestro firewall iptables de manera que bloquee todo el tráfico HTTP saliente a menos de que se use el servidor proxy.ws[cfh](\?.*)?$ \. Si se está buscando un mejor rendimiento.pcd(\?.*)?$ \.*)?$ \.*)?$ \. Aprendió UNIX en un sistema PDP en 1982.squid-cache.linux-magazine.vb([e])?(\?.*)?$ \. python.org http:// www1.*)?$ \. Firewall.net/latest/ book-full.isp(\?.squid-cache.*)?$ 16 17 18 19 20 21 22 23 24 25 26 27 28 29 \.reg(\?.sc[frt](\?.hta(\?.html [10] Expresiones Regulares: http://www.chm(\?.pdf http://www. hpl.org http:// www1.url(\?.cpl(\?.. Conclusiones Este artículo es el resultado de una presentación para la organización Belgium HPInterex.*)?$ \. Los programas de Spyware usan generalmente el protocolo HTTP (recordatorio: puerto 80) para las conexiones salientes. Cualquier intento de saltarse los filtros Squid se bloquea por la regla FORWARD del firewall que corta el tráfico HTTP saliente.org [5] Suse 9.wm[sz](\?.*)?$ \.de. véase: http://www.*)?$ \. pero parece que el Spyware raramente usa el proxy (da la impresion de que los creadores de Spyware son demasiado perezosos como para inspeccionar la configuración).*)?$ \.ops(\?.nl/geertivp/pub/squid 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Listado 4:Bloqueo por Ruta o Extensión vi /etc/squid/block-path.*)?$ \.linux-magazine.org/wiki/ Internet_Cache_Protocol [9] La base de datos whois: http://www.org/FAQ/FAQ-10.ad[ep](\?.sh[bs](\?.org http:// www1.hpl.html [4] Servidores mirror de Squid: http:// www1.belgacombusiness.com/techreports/1999/ HPL-1999-69..*)?$ \.html http://fog. net/ linuxug/pub/router/ linux-router-firewall-proxy.*)?$ \. se debería intentar colocar un servidor proxy en el desván.*)?$ \. com/issue/40/ Checkpoint_FW1_Firewall_Builder. titulada “Implementing a home Router.linux-magazine.LINUX-MAGAZINE. lycos.md[abetwz](\?.lnk(\?.wikipedia.ba[st](\?. ripe. com/issue/36/Charly_Column.net/db/other-whois.squid-cache. Miembro de DECUS desde 1985 y miembro de la directiva de HP-Interex desde 2002.com(\?. y trabaja en la actualidad con Linux en un entorno compartido con otros servidores como Tru64 UNIX.pdf [6] Para mayor información acerca de las políticas de remplazamiento de caché GDSF y LFUDA.*)?$ \.*)?$ \.vir(\?.nl.Squid • ADMINISTRACIÓN RECURSOS [1] Presentación para el grupo de usuarios de HP-Interex en Belgica el 17/03/ 2005. Listado 5: Protección de Puertos 01 acl Safe_ports port 80 # http 02 acl Safe_ports port 21 # ftp 03 acl Safe_ports port 2020 # BeOne Radio 04 acl Safe_ports port 2002 # Servidor Local 05 acl Safe_ports port 8044 # Tiscali 06 acl Safe_ports port 8080 # Escaneo puertos Turboline 07 acl Safe_ports port 8081 # Prentice Hall 08 09 # Denegar peticiones a puertos desconocidos 10 http_access deny !Safe_ports sume unos 11 kWh/semana. es/issue/07/DVD.*)?$ \. Dado que el proxy esta en la red local. OpenVMS.pdf [8] ICP – Internet Caching Protocol: http:// en. Debería evaluarse este gasto frente a la mayor seguridad y la disminución de los quebraderos de cabeza al operar nuestro propio fireI wall con proxy Squid.com/issue/ 34/IPtables_Firewalling. \.org http:// squid-docs. EL AUTOR Geert Van Pamel ha trabajado como jefe de proyectos en Belgacom. HP-UX. una navegación más segura y una manera de bloquear el acceso a contenido peligroso.zip [2] Firewalls: http://www. el router.dbx(\?.uk.*)? \.hlp(\?.*)?$ \. permite todas las peticiones entrantes desde los navegadores locales.ES Número 14 61 . Proxy server.html [11] Ejemplos de archivos de configuración para Squid: http://members.*)?$ \.fr. SUN y NCR Teradata.in[fs](\?.*)?$ \.reg .html [7] Reporte y análisis de los archivos log de Squid: http://www.sourceforge. squid-cache.

Sign up to vote on this title
UsefulNot useful