Este documento describe la implementación de un proxy web Squid para mejorar la seguridad perimetral y filtrar contenidos. Explica cómo instalar y configurar Squid, definir listas de acceso y reglas de control, y también cómo configurar Apache como proxy inverso con los módulos mod_proxy y mod_proxy_balancer.
1. Seguridad perimetral. Proxy web.
Introducción:
Los cachés web o servidores proxy web, no sólo son elementos destinados a mejorar el
rendimiento de acceso a internet de una organización, sino que también aplican una capa
de seguridad dentro de nuestro esquema de seguridad perimetral.
El hecho de obligar a los usuarios a hacer las peticiones web a través de un elemento
intermedio, permite a los administradores de seguridad establecer control respecto a
cómo, cuando y que sitios web se visitan.
Premisas:
• Todos los accesos desde la red interna a Internet deben estar restringidos.
• Los accesos a servicios web o ftp serán forzados a pasar por un servidor proxy el cual
será el único que realice las conexiones contra el exterior, filtrando además los
contenidos a visitar.
Por tanto un proxy web implementa 2 aspectos de seguridad:
• Centraliza los accesos a Internet.
• Filtra contenidos.
Instalación de un proxy web; squid:
#yum install squid
Configuración de squid:
Squid tiene un fichero de configuración general: /etc/squid/squid.conf.
Para configurar inicialmente squid es necesario al menos definir los siguientes
parámetros:
http_port Puerto a través del cual squid va a atender peticiones de clientes.
cache_dir Directorio donde squid organizará su caché de varios niveles para contenido
“cacheable”.
cache_mem Tamaño de la caché en memoria reservado para squid.
Listas y reglas de control de acceso. Esta es la parte más importante de la configuración
de squid, que nos va a permitir quien accede a que páginas:
acl [nombre ] tipo [valor]:
acl local src 192.168.1.0/24
acl vips src /etc/squid/vips.txt
Los distintos tipos de acl que se pueden definir:
• src: Origen. Define un conjunto de clientes.
• dst: Grupo de hosts. acl prohibidos dst “ /etc/squid/destinos_prohibidos.txt”
• srcdomain: Válido para nombres de dominio
• dstdomain. Idem. acl google dstdom google.com
• port: Puerto de destino
• time: acl horas_buenas time M T W H F A S 8:00-18:00
• url_regex: Permite especificar expresiones regulares para la url: acl peliculas
url_regex -i mpg$
• req_mime: Para identificar el tipo mime de peticiones realizadas por clientes:
acl ejecutables req_mime -i ^application/octet-stream$
Las reglas de control de acceso se escriben con la directiva http_access
Se leen secuencialmente hasta la primera coincidencia:
2. http_access [allow|deny] acl1 acl2.... acln
Un ejemplo de squid.conf simplificado:
http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ?
cache deny QUERY
cache_mem 8 MB
maximum_object_size 4096 KB
maximum_object_size_in_memory 8 KB
cache_replacement_policy lru
cache_dir ufs /var/spool/squid 100 16 256
cache_log /var/log/squid/cache.log
ftp_user Squid@dominio.com
ftp_passive on
refresh_pattern ^ftp:
1440
20%
10080
refresh_pattern ^gopher:
1440
0%
1440
refresh_pattern .
0
20%
4320
acl all src 0.0.0.0/0.0.0.0
acl red_local src 192.168.0.0/24
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 SSL_ports port 443
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow red_local
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all
coredump_dir /var/spool/squid
Squid como proxy transparente:
Proxy inverso. Apache con mod_proxy
Instalación:
./configure --prefix=... --enable-proxy --enable-so --enable-mods-shared=most
Configuración:
mod_proxy:
ProxyRequests Off
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
Control de acceso a proxy:
3. <Proxy *>
Order Deny,Allow
Deny from all
Allow from yournetwork.example.com
</Proxy>
mod_proxy_balancer:
ProxyPass /url_a_balancear balancer://mycluster
<Proxy balancer://mycluster>
BalancerMember http://10.0.0.7:80 loadfactor=10
BalancerMember http://10.0.0.8:80 loadfactor=30
</Proxy>