Header Ads

Squid Cache III

En las dos entregas anteriores Squid Cache y Squid Cache II, expusimos una serie de parámetros con los que podemos configurar nuestro Squid, como las diferencias entre los tipos de cache, la reconstrucción de la misma, la detección de errores en nuestra configuración, el buffer, el uso de Debug y Logformat, entre otros parámetros.
En esta última entrega hemos querido crear un archivo de configuración muy básico del Squid, aplicable a cualquier red local pymes, cibercafes y otros entornos empresariales pequeños y de hogar, que pueda garantizar un funcionamiento mínimo de un servidor proxy cache.
La configuración propuesta, deberá ir acompañada de otras acciones complementarias, en dependencia de lo que se pretenda hacer.
Recomendaciones antes de comenzar
1. No es recomendable utilizar ips internas terminadas en 1, 20, entre otras, ya que son ips (por default) reservadas para routers y otros hardware de comunicaciones. Para el siguiente ejemplo hemos utilizado para el proxy, la ip interna clase C eth1 192.168.1.10.
2. Edite las interfaces de su servidor. Debe tener al menos dos; una para el enlace de internet (eth0) y la segunda para la red local (eth1).
sudo nano /etc/network/interfaces

# si recibe el internet por dhcp
auto eth0
iface eth0 inet dhcp

# psi recibe el internet por ip estática 
# Reemplace las ips por las de su ISP
auto eth0
iface eth0 inet static
address 19X.XX.XX.XX
gateway 19X.XX.XX.XX 
netmask 255.255.255.XXX
broadcast 19X.XX.XX.XX

# salida a la redlocal
auto eth1
iface eth1 inet static
address 192.168.1.10
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0
Finalmente reinicie
sudo /etc/init.d/network restart
o
sudo service networking restart
3. Si no tiene servidor propio DNS, configure los DNS de su ISP
# reemplace los DNS de google por los de su ISP
sudo nano /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
4. Si quiere asignar direcciones IP mediante DHCP y no dispone de un Router u otro equipo que las asigne, puede instalar el servidor DHCP (Consulte Tutorial). Si ya tiene DHCP, salte este paso.
# Instale el servidor DHCP
sudo apt-get install isc-dhcp-server
# Edite isc-dhcp-server
sudo nano /etc/default/isc-dhcp-server
# /etc/default/dhcp3-server (para Ubuntu 10x)
# Busque la linea INTERFACES y agregue la interface de la red local
INTERFACES="eth1"
Ahora edite el archivo de configuración 'dhcp.conf'
# sudo nano /etc/dhcp/dhcpd.conf
Establezca la autoridad de su servidor dhcp, descomentando 'authoritative'
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
Y agregue los parámetros de su red local. Modifique 'range', 'option domain-name' y 'option domain-name-servers' según sus directivas
# redlocal (localnet)
subnet 192.168.1.0 netmask 255.255.255.0 { 
        range 192.168.1.100 192.168.1.200; 
# reemplace los dns de google por los de su ISP
 option domain-name-servers 8.8.8.8, 8.8.4.4; 
# option domain-name "inf01.server.public"; 
 option routers 192.168.1.10; 
 option broadcast-address 192.168.1.255; 
 default-lease-time 600; 
 max-lease-time 7200; 
}
Y finalmente reinicie el servidor DHCP
sudo service isc-dhcp-server restart
Instalación y configuración de Squid3
Nota: Las acciones que a continuación se describen son válidas para versiones de Squid superiores a 3.1. Para 3.1 o anteriores se especificará dónde varía. No aplican para Squid2x.
Tenga en cuenta que Squid v3.3x es una verdadera pesadilla, literalmente hablando (presenta muchos bugs). Por lo anterior recomendamos trabajar con versiones estables (3.0 a la 3.2)
Instalamos Squid3 y accedemos a su configuración
sudo apt-get install squid-cgi squid3 squid3-common squidclient
Detenga el servidor squid3
sudo service squid3 stop
Elimine directorios previos
sudo rm -Rf /var/spool/squid3/*
Reconstruya
sudo squid3 -z
Edite Squid3
sudo gedit /etc/squid3/squid.conf
Reemplace todo el contenido de su 'squid.conf' con la configuración que se describe abajo. Reemplace 'servidor' con el nombre de su servidor y demás parámetros donde se indique.
# WELCOME TO SQUID 3.3.8
# ----------------------------
# SQUID.CONF
# probar: sudo squid3 -k parse o netstat -pltn | grep 3128
# recarga: sudo squid3 -k reconfigure | sudo invoke-rc.d apache2 force-reload
# verificar configuracion: squid – v
# asegurese que su servidor tiene ipv6 desactivado http://ipv6-test.com/

# ACCESS CONTROLS
# -----------------------------------------------------------------------------

# Recommended minimum configuration:

# servidor (cambie la ip por la de su servidor proxy)
acl servidor src 192.168.1.10/32
http_access allow localhost
http_access allow servidor
# Redlocal (localnet). Reemplace la información por la de su red local
acl localnet src 192.168.1.0/24

# IPv RULES
# DNS Ipv4
dns_v4_first on
# BLOCK IPv6
acl to_ipv6 dst ipv6
http_access deny to_ipv6 !all
# outgoing proxy. (Activela si usa tiene DNS-LOCAL)
outgoing_address 192.168.1.10
udp_outgoing_address 192.168.1.10

acl SSL_ports port 443
acl SSL_ports port 5228         # GTalk
acl Safe_ports port 80  # http
acl Safe_ports port 21  # ftp
acl Safe_ports port 443  # https
acl Safe_ports port 70  # gopher
acl Safe_ports port 210  # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280  # http-mgmt
acl Safe_ports port 488  # gss-http
acl Safe_ports port 591  # filemaker
acl Safe_ports port 777  # multiling http
acl CONNECT method CONNECT

# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access allow servidor manager
http_access deny manager
#http_access deny to_localhost

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENT

# Visite blacklistweb.com
acl blacklistweb dstdomain -i "/etc/acl/blacklistweb.txt"
http_access deny blacklistweb

# Access Localnet
http_access allow localnet

# And finally deny all other access to this proxy
http_access deny all

# ICP-HTCP-CLR
# Allow ICP queries from local networks only
icp_access allow localnet
icp_access deny all
# Allow HTCP queries from local networks only
htcp_access allow localnet
htcp_access deny all

# Ancho de banda
reply_body_max_size 2048 MB

# NETWORK OPTIONS
# -----------------------------------------------------------------------------

# Squid Port
http_port 192.168.1.10:3128 ignore-cc
# PROXYINTERCEPT (Active esta linea si es transparente)
#http_port 192.168.1.10:8080 ignore-cc

# Qos
qos_flows local-hit=0x30
qos_flows parent-hit=0x32
# To prevent error FATAL: Bungled comment this line
# qos_flows disable-preserve-miss

# Destination IP address matches the Host header domain or IP
host_verify_strict on

# Verificacion de la cabecera Host
# client_dst_passthru on

# OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM
# -----------------------------------------------------------------------------

# CACHEPEER (cambie el puerto 3128 a 8080 si es proxy transparente)
cache_peer 192.168.1.10 parent 3128 0 proxy-only no-digest no-delay no-netdb-exchange no-query no-tproxy
dead_peer_timeout 2 seconds
cache_peer_access 192.168.1.10 allow all

# Páginas que contengan ciertos caracteres no se almacenan en la cache. Solicitudes de 'cgi-bin' or '?' van directo al servidor
hierarchy_stoplist cgi-bin ? hotmail gmail yahoo outlook
# Si la url contiene 'cgi-bin' o '?', no se almacena en la cache
# http://gofedora.com/how-to-configure-squid-proxy-server/comment-page-1/
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

# MEMORY CACHE OPTIONS
# -----------------------------------------------------------------------------

# Cache de memoria
# Por cada 256MB en ram son 32MB (buffers, delay_pools, etc). Ejemplo: 8 GB (8192 MB) = 1024 MB
# Se recomienda que dedique aprox 5MB de RAM por cada 1GB asignado a cache_dir
cache_mem 512 MB

# Tamano máximo del tamaño de los objetos en memoria (cámbielo según sus especificaciones)
maximum_object_size_in_memory 1024 KB

# objects are purged from memory when memory space is needed
memory_replacement_policy heap GDSF

# DISK CACHE OPTIONS
# -----------------------------------------------------------------------------

# objects are evicted (replaced) when disk space is needed
cache_replacement_policy heap LFUDA

# cache de disco (No puede superar el 70% del total del disco menos el espacio ocupado)
# Ejemplo: 100 GB asignados para disco de 250 GB
cache_dir aufs /var/spool/squid3 100000 16 256

#  TAG: max_open_disk_fds
# no limit

# tamaño mínimo y máximo de los objetos que se guardarán en memoria
# Ej: 200 Mb (maximum_object_size 20480 KB)
minimum_object_size 0 KB
maximum_object_size 4 MB

# Squid vaciar la caché (1% de 100 GB)
cache_swap_low 95 
cache_swap_high 99

# LOGFILE OPTIONS
# -----------------------------------------------------------------------------

# logs
access_log daemon:/var/log/squid3/access.log squid
access_log stdio:/var/log/squid3/access.log squid
cache_access_log stdio:/var/log/squid3/access.log
cache_store_log stdio:/var/log/squid3/store.log
cache_store_log daemon:/var/log/squid3/store.log

# Rotacion manual de log
# sudo apt-get install logrotate 
# sudo squid3 -k rotate
logfile_rotate 7

# netdb_filename
# netdb_filename stdio:/var/log/squid3/netdb.state
# Disable Journal
# netdb_filename none

# OPTIONS FOR TROUBLESHOOTING
# -----------------------------------------------------------------------------

#  Squid administrative logging file.
cache_log /var/log/squid3/cache.log

# debug
debug_options ALL,1

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid3

# OPTIONS FOR EXTERNAL SUPPORT PROGRAMS
# -----------------------------------------------------------------------------

# Pinger (sudo chmod 4755 /usr/lib/squid3/pinger)
pinger_program /usr/lib/squid3/pinger
pinger_enable off

# OPTIONS FOR TUNING THE CACHE
# -----------------------------------------------------------------------------

# refresh_pattern (frecuencia de actualizacion de archivos) ref: maximum_object_size
# http://www.alterserv.com/foros/index.php?topic=363.msg2695#msg2695
# Calcule Minutos http://www.convertworld.com/es/tiempo/Minutos.html
# Agregue mas Extensiones http://filext.com/
# Nota: override-expire override-lastmod refresh-ims reload-into-ims ignore-reload ignore-no-store ignore-private ignore-auth ignore-must-revalidate pueden generar advertencia 'violates HTTP'
# Standard de actualización de objetos: Mayor a 43200 min (30d) download. Menor a 14400 min (10d) keep. Fecha de modificacion mayor a 80%, download
refresh_pattern -i .(gif|png|jp?g|ico|bmp|pict|tiff?)$ 14400 80% 43200  reload-into-ims ignore-no-store ignore-private ignore-auth refresh-ims
refresh_pattern -i .(swf|htm|html|shtm|shtml|nub)$ 14400 80% 43200  reload-into-ims ignore-no-store ignore-private ignore-auth refresh-ims refresh-ims
refresh_pattern -i .(rpm|cab|deb|exe|msi|msu|zip|tar|xz|bz|bz2|lzma|gz|tgz|rar|bin|7z|doc?|xls?|ppt?|pdf|nth|psd|sis)$ 14400 80% 43200  reload-into-ims ignore-no-store ignore-private ignore-auth refresh-ims
refresh_pattern -i .(avi|iso|wav|mid|ogg|mp?|mpe?g?|mpeg|aiff?|mov|3gp|wm?|flv|x-flv|axd)$ 14400 80% 43200 reload-into-ims ignore-no-store ignore-private ignore-auth refresh-ims
refresh_pattern -i .(qtm?|viv|au|ram?|snd|sit|hqx|arj|lzh|lha|txt|rtf|tex|latex|class|js|ico|do|dll|asf|dat|psf)$ 14400 80% 43200
refresh_pattern -i \.a[0-9][0-9]$ 14400 80% 43200
refresh_pattern -i \.r[0-9][0-9]$ 14400 80% 43200
refresh_pattern -i \.css$ 10 20% 4320
# Default
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320

# Opcional (Antivirus) (descomente la que necesite)
#refresh_pattern .avast.com/.*\.(vpu|stamp) 14400 80% 43200 reload-into-ims
#refresh_pattern .eset.com/.*\.(exe|rar|nup|ver) 4320 100% 43200 reload-into-ims
#refresh_pattern .avg.com/.*\.(rar|nup|ver) 4320 100% 43200 reload-into-ims
#refresh_pattern .pandasecurity.com/.*\.* 4320 100% 43200 reload-into-ims
#refresh_pattern .pandasoftware.com/.*\.exe 4320 100% 43200 reload-into-ims
#refresh_pattern .*downloads.*\.kaspersky-labs\.com/.*\.(.*)  1440 100% 1440 reload-into-ims

# HTTP Options
request_header_max_size 256 KB
ie_refresh on
quick_abort_min 16 KB
quick_abort_max 16 KB
quick_abort_pct 95
read_ahead_gap 16 KB
negative_ttl 0 seconds
positive_dns_ttl 6 hours
negative_dns_ttl 10 seconds
fqdncache_size 16384

# Range
range_offset_limit -1
minimum_expiry_time 60 seconds

# HTTP OPTIONS
# -----------------------------------------------------------------------------

# Cambiar via a off oculta localnet pero genera violacion
via on

# TIMEOUTS
# -----------------------------------------------------------------------------

# Timeouts
forward_timeout 4 minutes
connect_timeout 1 minute
peer_connect_timeout 30 seconds
read_timeout 15 minutes
write_timeout 15 minutes
request_timeout 5 minutes
persistent_request_timeout 60 seconds
client_lifetime 1 day
pconn_timeout 60 seconds
shutdown_lifetime 20 seconds
pipeline_prefetch off
client_idle_pconn_timeout 2 minutes

# cerrar las peticiones que se queden a medias cuando cierra la conexión TCP
half_closed_clients off

# ADMINISTRATIVE PARAMETERS
# -----------------------------------------------------------------------------

#  TAG: cache_mgr
# Cambielo por su email
# Default (webmaster)
#cache_mgr tucorreo@dominio.com

# proteger el squid3 (cámbielo según sus especificaciones)
# http://www.linuceum.com/Server/srvSquidServer.php
cache_effective_user proxy 
cache_effective_group proxy

# Hide squid inf
httpd_suppress_version_string on

# nombre del proxy (reemplacelo por el nombre de su proxy)
visible_hostname servidor

# DELAY POOL PARAMETERS
# -----------------------------------------------------------------------------

# Pool
# TABLA DE EQUIVALENCIAS
#2048 B ==> 16 kb ==> 2KB
#4096 B ==> 32 kb ==> 4KB
#8192 B ==> 64 kb ==> 8KB
#16384 B ==> 128kb ==> 16KB
#32768 B ==> 256Kb ==> 32KB
#65536 B ==> 512Kb ==> 64KB
#131072 B ==> 1 Mb ==> 128KB
#196608 B ==> 1.5 Mb ==> 192KB
#262144 B ==> 2 Mb ==> 256KB

# Active el Delay Pool en dependencia de su localnet y ancho de banda
# http://www.alterserv.com/foros/index.php?topic=825.0
#delay_initial_bucket_level 50
#delay_pools 1
#delay_class 1 1
#delay_access 1 allow localnet
#delay_parameters 1 -1/-1 -1/-1
#delay_access 1 deny all

# PERSISTENT CONNECTION HANDLING
# -----------------------------------------------------------------------------

# Conexiones persistentes
server_persistent_connections off
client_persistent_connections off

# ICP OPTIONS
# -----------------------------------------------------------------------------

# Disable ICP (Inter-Cache Protocol) (default icp_port 3130)
icp_port 0

# Disable icmp
query_icmp off

# ERROR PAGE OPTIONS
# -----------------------------------------------------------------------------

# Paginas de error squid3 (en español)
error_directory /usr/share/squid3/errors/es

# OPTIONS INFLUENCING REQUEST FORWARDING 
# -----------------------------------------------------------------------------

# DIRECT 
always_direct allow servidor 
always_direct allow localnet
never_direct allow CONNECT
never_direct allow all

# DNS OPTIONS
# -----------------------------------------------------------------------------

# Chequear hostnames
# check_hostnames off
# hosts_file /etc/hosts

# Intervalo de Retransmisión DNS
dns_retransmit_interval 5 seconds

# Tiempo de espera de consulta DNS. >2 min se asume disponible
dns_timeout 30 seconds

# DNS publicos. Reemplace por los de su ISP 
# Si utiliza /etc/resolv.conf para DNS no se recomienda activarla
dns_nameservers 8.8.8.8 8.8.4.4
# Si usa DNS-LOCAL (dnsmasq) active esta regla
#dns_nameservers 127.0.0.1 192.168.1.10

# Numero max peticiones cache DNS
# Default ipcache_size 1024
ipcache_size 8192
ipcache_low 90
ipcache_high 95
fqdncache_size 1024

# MISCELLANEOUS
# -----------------------------------------------------------------------------

# Liberando Memoria Ram
memory_pools off

# Cantidad de RAM para almacenamiento Squid
memory_pools_limit 512 MB

# hide internal ip
forwarded_for deleted

# Acceso a la cache. Si utiliza sqstat debe poner el mismo pass en config.inc.php
cache_mgr servidor
cachemgr_passwd servidor all

# Validar (off) o no validar (on) los objetos de la cache Squid 
offline_mode on

# Rotacion de ips
# balance_on_multiple_ip off

# Limite de memoria Squid ('cache.log' y 'syslog')
high_memory_warning 3072 MB
Ahora guarde los cambios e inicie el Squid3
sudo service squid3 start
o
sudo squid3 -k reconfigure
Y si con apache
sudo squid3 -k reconfigure | sudo invoke-rc.d apache2 reload
Y verifique estado, errores y puerto de escucha de su Squid
sudo service squid3 status
sudo squid3 -k parse
netstat -pltn | grep 3128
Con esta configuración elemental, su servidor proxy Squid tendría un funcionamiento normal. Puede agregarle más configuraciones o modificar lo propuesto para un mejor desempeño de su Squid. También puede configurar los reportes, así como DNS masq para acelerar las peticiones y reforzar la seguridad perimetral del proxy (firewall, ArpON, IDS/IPS, etc)

Lectura Recomendada Proxy
Con la tecnología de Blogger.