Herramientas personales

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).*