Proxy caché y filtrador web: squid
De Wiki administradores
Información aportada por Antonio Abasolo y totalmente mejorable
Tabla de contenidos |
Acerca de Squid
Squid es un Servidor Intermediario (Proxy) de alto desempeño que se ha venido desarrollando desde hace varios años y es hoy en día un muy popular y ampliamente utilizado entre los sistemas operativos como GNU/Linux y derivados de Unix®. Es muy confiable, robusto y versátil y se distribuye bajo los términos de la Licencia Pública General GNU (GNU/GPL). Siendo sustento lógico libre, está disponible el código fuente para quien así lo requiera.
Entre otras cosas, Squid puede funcionar como Servidor Intermediario (Proxy) y caché de contenido de Red para los protocolos HTTP, FTP, GOPHER y WAIS, Proxy de SSL, caché transparente, WWCP, aceleración HTTP, caché de consultas DNS y otras muchas más como filtración de contenido y control de acceso por IP y por usuario.
Squid consiste de un programa principal como servidor, un programa para búsqueda en servidores DNS, programas opcionales para reescribir solicitudes y realizar autenticación y algunas herramientas para administración y y herramientas para clientes. Al iniciar Squid da origen a un número configurable (5, de modo predefinido a través del parámetro dns_children) de procesos de búsqueda en servidores DNS, cada uno de los cuales realiza una búsqueda única en servidores DNS, reduciendo la cantidad de tiempo de espera para las búsquedas en servidores DNS.
NOTA ESPECIAL: Squid no debe ser utilizado como Servidor Intermediario (Proxy) para protocolos como SMTP, POP3, TELNET, SSH, IRC, etc. Si se requiere intermediar para cualquier protocolo distinto a HTTP, HTTPS, FTP, GOPHER y WAIS se requerirá implementar obligatoriamente un enmascaramiento de IP o NAT (Network Address Translation) o bien hacer uso de un servidor SOCKS como Dante (http://www.inet.no/dante/).
Configuración de Squid
Este fichero contiene todos los datos de configuración y control de acceso a nuestra red, nos permite indicar como deseamos que los clientes usen o tengan el acceso externo (internet).
NOTA: Para adaptarlo a cada centro, tan solo hay que modificar los sitios indicados con "*" (El asterísco hay que quitarlo, solo es para señalar estas líneas). Que son los datos de identificación de nuestra red y el nombre completo del servidor. Se necesita a su vez, un directorio llamado "acl" donde se ubicarán los archivos de acl, que se necesitan para filtrar palabras, páginas, dominios, etc... No debe haber espacios al inicio de cada línea.
Contenidos:
/etc/squid/squid.conf
# ----------------------------------------------------------------------------- # WELCOME TO SQUID 2 # ----------------------------------------------------------------------------- # NETWORK OPTIONS # ----------------------------------------------------------------------------- http_port 3128 icp_port 3130 hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY #impide el cacheo de páginas con contenido dinámico y de archivos con extensiones (.gz, .bz2) que #no merece la pena cachear. Es además insensible a mayúsculas, por si cae algún *.ISO, por ej. #acl NOCACHE urlpath_regex -i cgi-bin \? \.gz$ \.bz2$ #no_cache deny NOCACHE cache_mem 8 MB cache_swap_low 90 cache_swap_high 95 maximum_object_size 4096 KB cache_dir ufs /var/spool/squid 100 16 256 cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log client_netmask 255.255.255.255 # ACCESS CONTROLS # ----------------------------------------------------------------------------- ###################################################################### # TAG: acl --> Definición de listas de acceso ###################################################################### #Recommended minimum configuration: acl all src 0.0.0.0-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 # https, snews acl SSL_ports port 873 # rsync 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 Safe_ports port 631 # cups #acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT #Datos propios del centro #Si tengo varios rangos no consecutivos, o varias redes, debemos definir acl's para cada una acl mired src 172.X.Y.0/255.255.Z.0 * #También puedo definir rangos de IP: 172.X.Y.A-B/Máscara (ej. para separar redes con window y linex) #acl IPAdministrador src 172.X.Y.A/255.255.Z.0 * # Regla para denegar a internet explorer. # todo lo demás está permitido, excepto lo que no esté explicitamente denegado acl NoIE browser MSIE # Permitir windowsupdate con IE acl windowsupdate dstdomain .windowsupdate.com acl windowsupdate dstdomain .microsoft.com acl windowsupdate dstdomain .public-trust.com acl windowsupdate dstdomain .windows.com acl windowsupdate dstdomain .webiqonline.com acl windowsupdate dstdomain 207.46.224.158 acl windowsupdate dstdomain .msn.com always_direct allow windowsupdate # Para tener en cuenta la lista de IP's libres (sin restricciones) acl permitidos src "/etc/squid/acl/permitidos.acl" #Denegar sitios, ficheros, dominios # Para denegar acceso a sitios web con estas palabras: ej. busca "culo" en google #acl filter url_regex "/etc/squid/acl/banned.acl" #http_access deny filter acl palabrasNo url_regex "/etc/squid/acl/palabrasNo.acl" # Para denegar acceso a ficheros con estas extensiones: .mp3$, .avi$ acl ficherosNo urlpath_regex -i "/etc/squid/acl/ficherosNo.acl" # Para denegar acceso a dominios completos: sponsoradulto.com acl sitiosNo dstdomain "/etc/squid/acl/sitiosNo.acl" # Prohibe messenger acl msnNo req_mime_type ^application/x-msn-messenger$ # Sin messenger #acl msnSi src "/etc/squid/acl/msnSi.acl" # Con messenger # Restringue uso de Lunes a Viernes, de 8 a 23 horas acl RestringirPorHoras time MTWHF 08:00-23:00 ###################################################################### # TAG: http_access --> Orden de asignación de reglas #Importante: las reglas se analizan de arriba para abajo, y #la primera que coincide es la que se aplica, y el resto se ignoran. ###################################################################### #http_access allow IPAdministrador http_access deny NoIE http_access deny !RestringirPorHoras http_access allow windowsupdate http_access allow permitidos http_access deny msnNo http_access deny palabrasNo http_access deny ficherosNo http_access deny sitiosNo http_access allow mired #Si tengo varios rangos no consecutivos, o varias redes, las puedo poner aqui en la misma linea #separadas por espacio: ej. http_access allow mired1 mired2 mired3 (o negando una red con !mired) http_access deny manager # Only allow purge requests from localhost http_access allow purge localhost http_access deny purge # 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 allow localhost # And finally deny all other access to this proxy http_access deny all ###################################################################### # TAG: icp_access icp_access allow all ###################################################################### # ADMINISTRATIVE PARAMETERS # ----------------------------------------------------------------------------- visible_hostname SERVIDOR.DOMINIO.ex * error_directory /usr/share/squid/errors/Spanish #logfile_rotate 7 # HTTPD-ACCELERATOR OPTIONS # ----------------------------------------------------------------------------- httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on offline_mode on ######################################################################
Algunos ejemplos de posibles contenidos para los ficheros acl, son:
/etc/squid/acl/palabrasNo.acl --> palabras de búsqueda o que aparezcan en la url porno juego chat video peli ...
/etc/squid/acl/ficherosNo.acl --> ficheros .mp3$ .avi$ .jpeg$ mp3 avi jpeg juegos games chat ...
/etc/squid/acl/sitiosNo.acl --> sitios web minijuegos.com sponsoradulto.com juegos.com juegos.ozu.com videofilia.com youtube.com video.google.com doubleclick.net video.1.google.com hotmail.msn.com login.live.com
/etc/squid/acl/permitidos.acl --> IP's o NombrePC a las que no se les restringue la salida 172.X.Y.2 172.X.Y.3 172.X.Y.4 ... a01-pro a11-pro ... ciclo-pro quimica-pro ...
Tratando el servicio de squid
Squid se maneja como un servicio mas del servidor, por lo que cada vez que modifiquemos su configuración y/o contenido, habrá que reiniciarlo, observando la salida del proceso, por si se produjese algún error:
/etc/init.d/squid restart
Lista de sitios web a filtrar
Vamos a intentar mantener esta lista con todas las páginas web que creemos que se deben filtrar para evitar tráfico en la red y para proteger a nuestras criaturitas de todo lo malo que hay en internet.
Sólo hay que copiar la lista y pegarla en el fichero /etc/squid/acl/sitiosNo.acl (o como le hayas llamado).
.minijuegos.com alosjuegos.com candystand.com crackmanworld.com abcjuegos.com tuparada.com melodias-logos-juegos.com rincondeljuego.com/ trucoteca.com teagames.com extremo.101rpm.info portaljuegosgratis.com juegos.com chatear.com sexoyocio.com.mx juegamas.com i-network.com chat.com ads.prisacom.com bannersxchange.com pagead2.googlesyndication.com elreyano.com juegosjuegos.com lagripe.com falkag.net miniclip.com genteya.com movilisto.com .sponsoradulto.com .juegos.com .juegos.ozu.com .videofilia.com .youtube.com .video.google.com .doubleclick.net .video.1.google.com proxify.com proxify.org proxify.net proxify.biz proxify.info proxify.co.uk proxify.us anonymouse.org .e-messenger.net .juegomaniac.com .miniclip.com .juegos.servifutbol.com www.ebuddy.com www.meebo.com www1.messengerfx.com sc.webmessenger.msn.com www.msn2go.com www.emessenger.cl
Expresiones regulares para filtrar el uso de proxies web anónimos
Por Esteban M. Navas.
En este apartado podemos añadir expresiones regulares que filtren el acceso a las webs de proxies anónimos que intentan usar algunos usuarios para evitar el filtro de squid.
Sólo hay que copiar la lista y pegarla en el fichero /etc/squid/acl/banned.acl (o como le hayas llamado). Por supuesto, después de añadir entradas al fichero, recargamos squid:
/etc/init.d/squid reload
/etc/squid/acl/banned.acl .*/.+\.php\?q=.+(&hl).* .*/cgi-bin/nph-proxy-1.cgi .*/.+\.php\?u=.+(&b).* .*/proxy\.php\?q=.+(&p).* .*/.+\.php\?woo=.+(&hvn).*
