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

Proxy

  • 1.
    Seguridad perimetral. Proxyweb. 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] acl1acl2.... 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 Denyfrom 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>