Introducción
Squid es un Proxy cache Web para el apoyo a HTTP, HTTPS, FTP y mucho más. Se reduce el ancho de banda y mejora los tiempos de respuesta de la memoria caché y la reutilización de frecuencia-pidió páginas web. Squid tiene amplios controles de acceso y es un gran servidor del acelerador que está licenciado bajo la GNU GPL. Fragmento extraído desde la Web oficial de squid. Para más información sobre squid dirigirse a la siguiente URL: http://www.squid-cache.org/
# Asumiremos que la maquina donde va a ser instalado squid tiene conexión directa a Internet # y habilitado dentro de /etc/systcl.conf la linea: net.inet.ip.mforwarding=1 # 1=Permit forwarding (routing) of IPv4 multicast packets
Instalación
Como primera medida vamos a instalar squid, para esto vamos a instalar desde los packages de OpenBSD, tipeando lo siguiente desde la consola:
# export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/i386/ # pkg_add squid-2.6.STABLE13-transparent.tgz
Una vez instalado procederemos a controlar que nuestro programa a sido añadido correctamente al sistema, tipeando el siguiente comando desde la consola:
# pkg_info
El mismo nos debe figurar en la lista de programas.
Otro método de instalación es por medio de ports, pero ustedes eligen.
Configuración de Squid
Para la configuración es recomendable tener unos puntos bien en claro, si bien la información que se suministrara a continuación puede ser copiada y pegada, es altamente recomendable leer desde las fuentes madres para no quedar colgados en ciertos puntos.
Para la edición de los archivos de configuración, se utilizara el viejo y conocido VI Para mas información sobre vi. Aquí. http://es.wikipedia.org/wiki/Vi
A la acción.
Desde la línea de comandos tripearemos:
# /usr/local/sbin/squid -z 2007/12/11 18:04:35| Creating Swap Directories #
Para que nos cree los espacios en disco para los temporales.
Editaremos en rc.local para que squid se ejecute durante el inicio del sistema.
# vi etc/rc.local
Agregando:
if [[|-x /usr/local/sbin/squid ]]; then
echo -n ' squid'; /usr/local/sbin/squid
fi
Salvamos el archivo presionado esc : wq
Ahora:
# vi etc/squid/squid.conf
Squid.conf llevara todas las configuraciones de nuestro Proxy cache.
Solo se comentar los puntos que considere importantes.
Para este proyecto el archivo de configuración a sido reducido solamente a las líneas que solamente nos interesan. Este mismo restringirá direcciones webs, palabras claves (en este caso del tipo porno u otras que se pueden poner como reglas), Acceso a msn por horarios, etc.
Ejemplo de squid.conf utilizado:
#############################INICIO DE SQUID.conf############################# http_port 3128 hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin ? no_cache deny QUERY cache_mem 2048 MB # cache_swap_low 90 # cache_swap_high 95 maximum_object_size 4096 KB minimum_object_size 0 KB # Definimos la cantidad de espacio almacenado en memoria # para los archivos, en este caso 240 KB maximum_object_size_in_memory 240 KB fqdncache_size 10240 cache_replacement_policy lru memory_replacement_policy lru # Definimos el espacio a utilizar en disco, en este caso 5120 cache_dir ufs /var/squid/cache 5120 16 256 cache_access_log /var/squid/logs/access.log cache_log /var/squid/logs/cache.log cache_store_log /var/squid/logs/store.log emulate_httpd_log off pid_filename /var/squid/logs/squid.pid refresh_pattern ^http://.*.gif$ 1440 50% 20160 reload-into-ims refresh_pattern ^http://.*.asis$ 1440 50% 20160 refresh_pattern -i .png$ 10080 150% 40320 reload-into-ims refresh_pattern -i .jpg$ 10080 150% 40320 reload-into-ims refresh_pattern -i .bmp$ 10080 150% 40320 reload-into-ims refresh_pattern -i .gif$ 10080 300% 40320 reload-into-ims refresh_pattern -i .ico$ 10080 300% 40320 reload-into-ims refresh_pattern -i .swf$ 10080 300% 40320 reload-into-ims refresh_pattern -i .flv$ 10080 300% 40320 reload-into-ims refresh_pattern -i .rar$ 10080 150% 40320 refresh_pattern -i .ram$ 10080 150% 40320 refresh_pattern -i .txt$ 1440 100% 20160 reload-into-ims override-lastmod refresh_pattern -i .css$ 1440 60% 20160 refresh_pattern ^http:// 1 100% 20160 reload-into-ims ignore-reload refresh_pattern ^ftp:// 240 50% 20160 refresh_pattern ^gopher:// 240 40% 20160 refresh_pattern /cgi-bin/ 0 0% 30 refresh_pattern . 0 100% 20160 reload-into-ims debug_options ALL,2 client_netmask 255.255.255.255 ftp_list_width 32 ftp_passive on ftp_sanitycheck on dns_timeout 1 minutes hosts_file /etc/hosts # Recommended minimum configuration: # auth_param digest program <uncomment and complete this line> # auth_param digest children 5 # auth_param digest realm Squid proxy-caching web server # auth_param digest nonce_garbage_interval 5 minutes # auth_param digest nonce_max_duration 30 minutes # auth_param digest nonce_max_count 50 # auth_param basic children 5 # auth_param basic realm Squid proxy-caching web server # auth_param basic credentialsttl 2 hours # auth_param basic casesensitive off request_header_max_size 20 KB quick_abort_pct 95 negative_ttl 2 minutes positive_dns_ttl 6 hours negative_dns_ttl 1 minute forward_timeout 2 minutes # Default: connect_timeout 1 minute peer_connect_timeout 30 seconds # Default: read_timeout 10 minutes request_timeout 3 minutes # Default: persistent_request_timeout 1 minute # Default: client_lifetime 1 day half_closed_clients on pconn_timeout 120 seconds # Default: ident_timeout 10 seconds # Default: shutdown_lifetime 30 seconds # Definimos una lista de urls dentro del archivo(squid-block.acl) # con accesos a paginas del tipo msn acl messenger url_regex "/etc/squid/squid-block.acl" acl restrict time MTWHF 00:30-20:00 http_access deny messenger restrict # definimos la ruta del archivo (squid-porn.acl) que llevara # un listado de palabras pornos y webs. acl porn url_regex -i "/etc/squid/squid-porn.acl" http_access deny porn acl hotmail url_regex hotmail http_access allow hotmail # Recommended minimum configuration: acl all src 0.0.0.0/0.0.0.0 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 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews 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 header_access WWW-Authenticate deny all header_access Link deny all header_access Warning deny all header_access Via deny all header_access User-Agent deny all header_access Proxy-Connection deny all header_access X-Forwarded-For deny all # TAG: http_access # Allowing or Denying access based on defined access lists # # Access to the HTTP port: # http_access allow|deny [[!]]aclname ... # # NOTE on default values: # # If there are no "access" lines present, the default is to deny # the request. # # If none of the "access" lines cause a match, the default is the # opposite of the last line in the list. If the last line was # deny, the default is allow. Conversely, if the last line # is allow, the default will be deny. For these reasons, it is a # good idea to have an "deny all" or "allow all" entry at the end # of your access lists to avoid potential confusion. # # Default: # http_access deny all # # Recommended minimum configuration: # # Only allow cachemgr access from localhost http_access allow manager localhost http_access deny manager # Deny requests to unknown ports http_access deny !Safe_ports # Deny CONNECT to other than SSL ports http_access deny CONNECT !SSL_ports http_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS acl our_networks src 0.0.0.0/0 http_access allow our_networks http_access deny all http_reply_access allow all http_reply_access allow all icp_access allow all # Default setting: # miss_access allow all # Default: # cache_mgr webmaster # Default: # cache_effective_user _squid # # Default: # cache_effective_group _squid httpd_accel_host virtual httpd_accel_port 80 # Default: httpd_accel_single_host off # Default: httpd_accel_with_proxy on # Default: httpd_accel_uses_host_header on # Default: # httpd_accel_no_pmtu_disc off logfile_rotate 10 # Default: # tcp_recv_bufsize 0 bytes # directory and point this tag at them. # # Definimos el mensaje de error que se mostrara: error_directory /usr/local/share/squid/errors/Spanish #########################FIN SQUID.CONF#########################
Salvamos el archivo presionado esc : wq
Parámetro cache_mem
El parámetro cache_mem establece la cantidad de memoria a cachear Los datos de estos objetos se almacenan en bloques de 4 Kb. Por defecto se establecen 8 MB, si tenemos un servidor con al menos 128 MB de RAM, colocaremos 16 MB. Para agregar mas medidas o entender algunas de las que se incluyen en este ejemplo, es recomendable leer las FAQS oficiales de squid.
Ahora pasaremos a crear los archivos squid-block.acl y squid-porn.acl, que contendrán los sitios y palabras claves a restringir.
# vi etc/squid/squid-block.acl
Una vez dentro hemos puesto para el ejemplo lo siguiente:
senger.hotmail.com .msn.com microsoft
Salvamos el archivo presionado esc : wq
Ahora pasaremos a crear squid-porn.acl Para el ejemplo lo siguiente:
porn porno cojer xxx blowjob lesbiana lessbian lesbian hardcore pene concha follando orgia xxx.jovencitas.xxx xxx.sexo.xxx p0rn XXX warez
Salvamos el archivo presionado esc : wq
Creado estos dos archivos, pasaremos a inicializar squid en modo debug, con el siguiente comando:
# /usr/local/sbin/squid -d 1 -N (/usr/local/sbin/squid -k shutdown para detener squid)
Si todo sale bien podemos configurar nuestros navegadores con la dirección de IP asignada a este Proxy por el puerto 3128.
De esta manera ya tenemos squid de manera NO-Trasparente
Transparentando
Para setear squid en modo transparente tendremos que habilitar PF. (para mas info sobre PF: www.openbsd.org/faq/pf/ )
# vi etc/rc.conf
y ubicar la línea
# pf=NO y remplazarla por pf=YES
Paso dos: Agregaremos dentro de: etc/pf.conf las siguientes líneas en las áreas correspondientes:
rdr on $int_if inet proto tcp from any to any port 80 -> 127.0.0.1 port 3128 # tomamos todo el trafico desde el Puerto 80 pass in on $int_if inet proto tcp from any to 127.0.0.1 port 3128 keep state pass out on $ext_if inet proto tcp from any to any port 80 keep state
Salvamos el archivo presionado esc : wq Comprobamos el archivo PF con el comando:
# pfctl -nf /etc/pf.conf Si hay alguna configuración fuera de lugar, pfctl -nf nos los indicara. De lo contrario si nuestro pf es correcto nos dejara en el path (root@path#) donde ejecutamos este comando. Ahora si, cargamos nuestro pf.conf... # pfctl -f /etc/pf.conf
De esta manera ya tendremos squid de modo trasparenté en nuestro sistema.
Algunos comandos
Para verificar el fichero de configuracion
# squid -k parse
Para parar SQUID manualmente:
# squid -k shutdown
Cuando cambies la configuración de SQUID hay que reiniciarlo
# squid -k reconfigure
Nos aseguramos de que SQUID esta ejecutándose
# ps waux | grep squid
Monitoreo de Squid
Miremos a squid trabajando en tiempo real con los usuarios conectados a el.
# tail -f /usr/local/squid/var/logs/access.log
Existen muchas herramientas para el tratamiento de Squid.. http://www.squid-cache.org/Scripts/
Depurando Errores
El archivo cache.log muestra que ocurre cuando squid arranca o es reconfigurado
# more /usr/local/squid/var/logs/cache.log
Ahora solo reiniciar
# shutdown -r now
y listo…. enjoy
Agradecimientos
Gracias P. por ayudar en squid.conf y OpenBSDeros por el espacio de publicación Salud amigos. Alekid…