Tabla de Contenidos
Squid
Squid es un popular programa de software libre que implementa un servidor proxy y un dominio para caché de páginas web, publicado bajo licencia GPL. Tiene una amplia variedad de utilidades, desde acelerar un servidor web, guardando en caché peticiones repetidas a DNS y otras búsquedas para un grupo de gente que comparte recursos de la red, hasta caché de web, además de añadir seguridad filtrando el tráfico. Está especialmente diseñado para ejecutarse bajo entornos tipo Unix.
Squid ha sido desarrollado durante muchos años y se le considera muy completo y robusto. Aunque orientado a principalmente a HTTP y FTP es compatible con otros protocolos como Internet Gopher. Implementa varias modalidades de cifrado como TLS, SSL, y HTTPS.
Delay pools
Por ejemplo si tengo usuarios que abusan del uso de internet, dado el caso de que bajan una iso y la dejan horas agotando el ancho de banda, lo que podemos hacer con Squid, es que cuando llegen a un tope, por ejemplo 15MB el ancho de banda baje considerablemente para todo el segmento de red que pasa por squid.
Ejemplo si un usuario baja un archivo ISO, cuando llega a los 15MB la velocidad baja a 16k/s para todo el segmento
delay_pools 1 delay_class 1 1 delay_parameters 1 16384/15728640 acl ficheros_iso url_regex \.iso$ delay_access 1 allow ficheros_iso
Se puede hacer tambien
acl restringir url_regex -i “/etc/squid/extensions”
\.ace$ \.af$ \.afx$ \.arj$ \.asf$ \.asx$ \.au$ [...] \.xla$ \.xls$ \.xlt$ \.xlw$ \.z$ \.zip$ youtube.com
Delay pool clase 2 para afectar a usuarios individuales
delay_pools 1 delay_class 1 2 delay_parameters 1 -1/-1 102400/3000 delay_access 1 allow ficheros_iso
Ejemplo de Delay pool por horarios
acl winupdate dstdomain .windowsupdate.com acl peakperiod time 10:00-16:00 delay_pools 1 delay_class 1 1 # 64 Kbit/s delay_parameters 1 8000/8000 delay_access 1 allow winupdate peakperiod
Sacado de : http://www.linux.com/archive/feature/153221
Otros ejemplos de delay pools
# 157 kB/s delay_pools 1 delay_class 1 2 delay_parameters 1 98304/131072 49152/131072 delay_access 1 allow all ancho_de_banda
# 8 kB/s delay_pools 1 delay_class 1 1 delay_parameters 1 8192/8192 delay_access 1 allow all ancho_de_banda
# 32 kB/s delay_pools 1 delay_class 1 2 delay_parameters 1 32768/32768 16384/32768
# 50 kB/s delay_pools 1 delay_class 1 2 delay_parameters 1 65536/65536 32768/65536 delay_access 1 allow all ancho_de_banda
Ejemplo de dos proxys hermanos (sibling) en una red local que comparten cache y ademas tiene dif parent proxys cada uno con prioridad cruzada
squid.conf
include squid-peers.conf
squid-peers.conf - proxy1
cache_peer 10.1.1.2 sibling 8080 3130 proxy-only no-delay cache_peer 192.168.1.2 parent 8080 0 weight=100 cache_peer 192.168.1.3 parent 8080 0 weight=10
squid-peers.conf - proxy2
cache_peer 10.1.1.3 sibling 8080 3130 proxy-only no-delay cache_peer 192.168.1.3 parent 8080 0 weight=100 cache_peer 192.168.1.2 parent 8080 0 weight=10
Bloquear MSN apto para 7 y 8
MSN Messenger 7 y MSN 8 tienen a buscar por todo lados como conectarse, entonces esto se vuelve algo medio problematico con Squid y mas cuando tenemos muchos grupos LDAP configurados y queremos que algunos si puedan acceder etc. Mi solución por el momento es :
acl MSN_Method method POST acl MSN_Agent browser ^Mozilla.compatible;.MSN Messenger acl MSN_Agent browser ^Mozilla/4\.0.*MSIE.6\.0.MSN acl MSN_Mime req_mime_type ^application/x-msn-messenger$ acl MSN_Port port 1863 acl MSN_Dom dstdom_regex -i messenger.hotmail.com 207.46.110.40 gateway.messenger.hotmail.com msn.com local-bay.contacts.msn.com messenger.live.com proxy-sn.contacts.msn.com proxy-bay.contacts.msn.com gateway.edge.messenger.live.com bay.messenger.services.live.com geo.messenger.services.live.com acl MSN_Url url_regex -i gateway.dll sqmserver.dll ADSAdClient31.dll gateway.dll? acl MSN_Usr ext_user usuario1 usuario2 usuario3
http_access deny MSN_Agent MSN_Mime MSN_Dom MSN_Url !MSN_Usr http_reply_access deny MSN_Agent MSN_Mime MSN_Dom MSN_Url !MSN_Usr http_access deny MSN_Method MSN_Url !MSN_Usr http_reply_access deny MSN_Method MSN_Url !MSN_Usr http_access deny CONNECT MSN_Port !MSN_Usr http_reply_access deny CONNECT MSN_Port !MSN_Usr
El reply acces es para forzar a que si o si se cumpla dicha condición, ya que podemos tener una gran cantidad de ACL's y algunas se pueden superponer, entonces con esto las forzamos.
Autenticacion NTLM
Para conocer el estado de una cuenta podemos ejecutar
# wbinfo -a [domain]\\[user]%[password] plaintext password authentication failed error code was NT_STATUS_ACCOUNT_LOCKED_OUT (0xc0000234) error messsage was: Account locked out Could not authenticate user GRUPODERED\soporte%Password1234 with plaintext password challenge/response password authentication failed error code was NT_STATUS_ACCOUNT_LOCKED_OUT (0xc0000234) error messsage was: Account locked out Could not authenticate user GRUPODERED\soporte with challenge/response
Para ver la lista de usuarios del dominio
# wbinfo -u
Blacklist
Listado de sitios prohibidos organizados por categorias. A continuacion describimos cada unas de las mismas:
Categoria | Descripcion |
---|---|
ads | Servidores de Publicidad |
adult | Sitios que contienen material adulto |
aggressive | Sitios que promueven la violencia |
antispyware | Sitios que remueven Spyware |
artnudes | Sitios de arte que contienen desnudos aritsticos |
astrology | Sitios de Astrologia |
audio-video | Sitios de descarga de videos o audio |
banking | Sitios de Banca en linea |
beerliquorinfo | Sitios con informacion relacionada con Cervezas o Licores |
beerliquorsale | Sitios de Compra de Cervezas o licores |
Blog | Sitios de bítacoras |
cellphones | Material para Telefonos Celulares |
chat | Sitios con salas de chat |
childcare | Sitios relacionados con el Cuidado de niños |
cleaning | Sitios relacionados con limpieza |
clothing | Sitios relacionados con la venta de indumentaria |
culnary | Sitios relacionados con la cocina |
dating | Sitios relacionados con citas en linea |
desktopsillies | Sitios que contienen salvapantallas, backgrounds, cursores, punteros, temas de escritorio y material peligroso |
dialers | Sitios con marcadores automaticos como los utilizados por Troyanos o sitios pornograficos |
drugs | Sitios Reladionados Con Drogas |
ecommerce | Sitios que proveen compras en linea |
entertainment | Sitios que promocionan peliculas, libros, revistas, humor |
filehosting | Sitios para hostear archivos |
frencheducation | Sitios relacionados con educacion francesa |
gambling | Sitios de Apuestas |
games | Sitios relacionados a los juegos |
gardening | Sitios de Jardineria |
government | Sitios Gubernamentales |
guns | Sitios relacionados con armas |
hacking | Sitios con información sobre Hacking/cracking |
homerepair | Sitios sobre reparaciones hogareñas |
hygiene | Sitios sobre higiene y material relacionado al aseo personal |
instantmessaging | Sitios que contienen descargas de clientes de mensajeria y mensajeria basada en la web |
jewelry | Sitios relacionados con la joyeria y venta de la misma |
jobsearch | Sitios de busqueda de empleo |
kidstimewasting | Sitios donde los niños suelen perder el tiempo |
Sitios de Webmail / email | |
marketingware | Sitios sobre productos de Marketing |
medical | Sitios web medicos |
mixed_adult | Sitios con material adulto mezclado |
naturism | Sitios que contienen fotos de desnudos y/o promueven el nudismo |
news | Sitios de Noticias |
onlineauctions | Sitios de Acciones en linea |
onlinegames | Sitios de Juegos en linea |
onlinepayment | Sitios de pago online |
personalfinance | Sitios de Finanzas Personales |
pets | Sitios sobre mascotas |
phishing | Sitios que intentan engañar a la gente para que ingrese información privada. |
porn | Pornografía |
proxy | Sitios con proxies para saltearse filtros |
radio | Sitios relacionados a la radio y television que no tienen relacion con noticias |
religion | Sitios que promueven la religion |
ringtones | Sitios que contienen ring tones, juegos, dibujos y otros |
searchengines | Motores de Busqueda, como Google |
sect | Sitios sobre grupos religiosos |
sexuality | Sitios dedicados a la sexualidad, que probablemente incluyen material adulto |
shopping | Sitios de Compras |
socialnetworking | Sitios de Redes Sociales |
sportnews | Sitios de noticias deportivas |
sports | Sitios sobre deportes (todos) |
spyware | Sitios que corren o tienen software espia para descargar |
updatesites | Sitios donde hay actualizaciones de software para descargar que podrian contener virus |
vacation | Sitios sobre vacacionar |
violence | Sitios que contienen violencia |
virusinfected | Sitios que contienen archivos infectados con virus |
warez | Sitios que contienen software pirateado |
weather | Sitios de noticias del Clima y relacionados con el Clima |
weapons | Sitios que detallan o venden armas |
webmail | Sitios de Webmail |
whitelist | Contienen Sitios 100% adecuados para niños |
Referencias
URL | Descripción |
---|---|
http://urlblacklist.com | Sitio con las blacklists |
http://www.squid-cache.org | Pagina del proyecto Squid |
http://www.squidguard.org | Pagina de SquidGuard |
http://dansguardian.org/ | DansGuardian |
Formato de LOG
Cambiar formato de logs
Agregar la directiva emulate_httpd_log on en el squid.conf y se va a leer mas facil :)
time.sh
Script a cual por medio de una pipe se le envia el access.log, lo analiza y nos interpreta el formato de fecha UNIX a formato de fecha Human Readable .
cat access.log | perl -p -e 's/^([0-9]*)/"[".localtime($1)."]"/e'
Otra opción :
#!/usr/bin/perl -pw s/^\d+\.\d+/localtime $&/e;
Enlace interesante: http://www.tenon.com/support/webten/papers/squidlog.shtml
Información de Squid
Si queremos ver los mensajes de error de Squid traducidos
error_directory /usr/local/squid/share/errors/Spanish
Si queremos ocultar la versión del Squid a mostrar
httpd_suppress_version_string on
Si queremos modificar el nombre del host a mostrar en el mensaje de error
visible_hostname mihostproxy
Enlace interesante: http://techspalace.blogspot.com/2008/01/remove-squid-footer.html
Script para ver los top sites
#!/usr/bin/perl -wT ## ## Squid Top Sites reporting script. ## ## Description: ## This script will parse the specified squid logfile and count up the ## frequency a URL occurs to provide a list of most frequently accessed ## sites. ## ## Author: ## Dave Hope - http://davehope.co.uk ## Sava Chankov ( Author of squid-report.pl ) ## ## Known Issues: ## + Requests to the webserver on the proxy give weird results? ## ## Changelog: ## 1.0.0 (Initial fork of squid-report.pl v1.2) ## 1.0.1 ## + Changed to have configuration held in-file. ## + Removed last-visited date. ## + Consolidated sites with/without www. ## + Improved UI slightly. ## 1.0.2 ## + Fixed issue with accessing on ports other than 80. ## + Fixed promblem with ftp:// entries in log. ## ## 1.2.0 ## + Added ability to sort by size, rather than frequency. ## ## License: ## This program is free software; you can redistribute it and/or modify it ## under the GNU General Public License. ## ## This script is based on 'squid-report.pl' v1.2 by Sava Chankov and has ## been adjusted for my specific requirements. ## ## The original script can be found here: ## http://backpan.perl.org/authors/id/S/SA/SAVA/squid-report.pl ## use strict; ## # Configuration. ## my $cfgNumberToShow = 250; my $cfgLog = "/var/log/squid/access.log"; my $cfgOutput = "/var/www/top-sites-size.htm"; # by_times_visited_then_name or by_size_then_name my $cfgSortMethod = "by_size_then_name"; ## # Stop editing here unless you know what you're doing. ## my $cfgDate = gmtime; my $row; my($epoch_time_miliseconds, $unknown_integer1, $ip, $tcp_and_http_code); my($unknown_integer2, $http_method, $url, $minus, $squid_method_site_url, $content_type); my($site_url, %sites); ## # Open output file ## open(OUTPUT, ">$cfgOutput") || die("Cannot open output file"); ## # Print header HTML ## print OUTPUT <<END; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head profile="http://gmpg.org/xfn/11"> <title>Squid Top-Site Report</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style type="text/css"> <!-- body { font: normal 1.0em 'Trebuchet MS' } ul { list-style-type: none } ul a { position: absolute; left: 150px } #Generated { margin: 0; padding: 0; font-style:italic } #Footer { color: #cecece; line-height: 150%; border-top: 1px solid #cecece; padding: 0.4em } --> </style> </head> <body> <h1>Most frequently visites sites</h1> <p id="Generated">Report generated on $cfgDate</p> <ul> END ## # Iterate through lines inaccess.log ## open(LOG, "$cfgLog") or die "Can't open file $cfgLog!"; while(<LOG>) { $row = $_; ($epoch_time_miliseconds, $unknown_integer1, $ip, $tcp_and_http_code, $unknown_integer2, $http_method, $url, $minus, $squid_method_site_url, $content_type) = split(/\s+/, $row); # Not checking for http:// etc because we want to include CONNECT's and # multi-protocol data. $url =~ s/http:\/\///; $url =~ s/ftp:\/\///; $url =~ s/www.//; $url =~ s/\/$//; # If the url is empty (which occurs occasionally in my logs, no idea # why, then don't add it to the list. if (!$url ) { next; } # Patern match data between slashes. ($site_url) = ($url =~ m{ ([A-Za-z0-9.\-:]+)}x ); # Only match html content. if($content_type =~ m{text/html}) { # If hash already contains an entry for the exact URL. if ($sites{$site_url}) { $sites{$site_url}->{count}++; } # If no matching entry exists, create one. else { $sites{$site_url}->{count} = 1; } } # Update size of content for website regardless of content-type. if (!$sites{$site_url}->{size}) { $sites{$site_url}->{size} = 0; } $sites{$site_url}->{size} = $sites{$site_url}->{size} + $unknown_integer2; } ## # Iterate through visited sites. ## foreach $site_url ( sort ($cfgSortMethod keys (%sites) ) ) { # Only show top x entries. if ($cfgNumberToShow > 0) { if ($cfgSortMethod eq "by_times_visited_then_name") { print OUTPUT " <li>" . $sites{$site_url}->{count} ."<a href=\"http://" . $site_url . "/\">" . $site_url . "</a></li>\n"; } elsif ($cfgSortMethod eq "by_size_then_name") { print OUTPUT " <li>" . format_size($sites{$site_url}->{size}) ."<a href=\"http://" . $site_url . "/\">" . $site_url . "</a></li>\n"; } $cfgNumberToShow--; } } ## # Print Footer HTML ## print OUTPUT <<END; </ul> <div id="Footer">Producted by <a href="http://davehope.co.uk">Squid Top-Site Report Generator</a>.</div> </body> </html> END ## # Sort sites by frequency visited, then alphabetically. ## sub by_times_visited_then_name { $sites{$b}->{count} <=> $sites{$a}->{count} || $a cmp $b } ## # Sort by size, then alphabetically. ## sub by_size_then_name { $sites{$b}->{size} <=> $sites{$a}->{size} || $a cmp $b } #-----------------------------------------------------------------------------# # Version: 1.0 # Copyright: Bryant H. McGill - 11c Lower Dorset Street, Dublin 1, Ireland # Web Address: http://www.bryantmcgill.com/Shazam_Perl_Module/ # Use Terms: Free for non-commercial use, commercial use with notification. # # Legal: This code is provided "as is" without warranty of any kind. # The entire risk of use remains with the recipient. # In no event shall Bryant McGill be liable for any direct, # consequential, incidental, special, punitive or other damages. #-----------------------------------------------------------------------------# sub format_size{ my($bytes) = @_; return '' if ($bytes eq ''); my($size); $size = $bytes . ' Bytes' if ($bytes < 1024); $size = sprintf("%.2f", ($bytes/1024)) . ' KB' if ($bytes >= 1024 && $bytes < 1048576); $size = sprintf("%.2f", ($bytes/1048576)) . ' MB' if ($bytes >= 1048576 && $bytes < 1073741824); $size = sprintf("%.2f", ($bytes/1073741824)) . ' GB' if ($bytes >= 1073741824 && $bytes < 1099511627776); $size = sprintf("%.2f", ($bytes/1099511627776)) . ' TB' if ($bytes >= 1099511627776); return $size; }