Proxy Transparente con SMP en Squid 3.3.3
Mucha gente confunde el término Proxy con el de Gateway (o “puerta de enlace predeterminada”, según la traducción de cierta empresa).
En una red privada 192.168.0.0 Clase C (Máscara 255.255.255.0 o '/24'), se necesita un gateway si se desea llegar a otras redes, como Internet. Dicho Gateway poseerá la cantidad de interfaces necesarias y rutas establecidas y políticas de acceso que permitirán o no el acceso a ciertos destinos desde esta red interna.
Por supuesto, en este caso se hablará de acceso “transparente” (por así decirlo) a la red destino en cuestión. Esto significa que el Gateway no tiene en cuenta el protocolo de aplicación (HTTP, FTP, etc.) o mejor dicho que “no los entiende ni tiene en cuenta excepto por puerto de origen o destino”.
Por ejemplo, se puede asumir que en el puerto 80 de cierta IP de destino habrá un servicio que entienda HTTP... pero el Gateway no puede asegurarlo.
Un Proxy actúa como Gateway pero a un nivel más alto, en la llamada “capa de aplicación”. Significa que entiende HTTP, FTP, u algún otro protocolo de alto nivel y que acepta por parte de un cliente (de la red interna, por ejemplo) solicitudes vinculadas a dicho protocolo.
El Proxy realizará, a su vez, la solicitud al servidor de destino, tomará el resultado y lo devolverá. Al tener conocimiento del protocolo se pueden aplicar reglas mucho más interesantes, como restricciones basadas en contenido, partes del nombre de un sitio, usuario, grupo al que un usuario pertenece, IP de origen, etc.
Squid es un Proxy de HTTP y FTP y a su vez provee la funcionalidad de Cache (guarda copias de las páginas y archivos visitados). De esta forma, cada vez que un usuario vuelve a acceder a cierto sitio, sólo el contenido que haya cambiado será transferido, logrando una reducción de la utilización del Ancho de Banda disponible.
En resumen, el cliente no accede realmente a internet, sino que le solicita al Proxy lo que quiere, el proxy a su vez lo busca en Internet, lo transfiere y luego se lo da al cliente. Es menos directo que NAT, donde se trabaja a nivel IP y no a nivel aplicación.
Existen una cierta cantidad de términos que se deben conocer antes de configurar un Servidor Proxy, ya sea directo o transparente.
Entender dichos términos, permitirá comprender en mayor profundidad los comentarios, ejemplos y documentación que suelen acompañar a los paquetes de Software de esta categoría y de todo el Software Libre en general.
En este caso, el término "Proxy" es tomado de forma incorrecta. Ya que muchos hablan de "proxies" cuando en verdad hablan de un "router" o de NAT.
Veamos las ventajas de usar el Proxy Squid:
* Soporta HTTP y FTP.
* Tiene un avanzado mecanismo de autentificación y control de acceso (o sea, a quien y cuando permitimos utilizar el proxy).
* Permite actuar como cache de Internet, copiando contenido en forma local para que se lo pueda acceder rápidamente.
* Es Software Libre.
El hecho de que sea transparente permite al administrador lograr que toda solicitud HTTP (puerto de destino 80/tcp) realizada por un cliente de la red interna sea automáticamente redirigida al Proxy, evitando la salida directa. Los motivos para realizar ésto pueden depender del administrador, pero seguramente tengan que ver con políticas de administración de recursos, seguridad, performance, etc. Esto se realiza mediante reglas FORWARD de Iptables.
En computación, SMP (del inglés Symmetric Multi-Processing, en español "multiproceso simétrico") es un tipo de arquitectura de computadores en la que dos o más unidades de procesamiento comparten una única memoria central.
Explicación detallada
La arquitectura SMP (también llamada UMA, del inglés Uniform Memory Access, en español "acceso uniforme a memoria") se caracteriza por el hecho de que varias unidades de procesamiento comparten el acceso a la memoria, compitiendo en igualdad de condiciones por dicho acceso, de ahí la denominación "simétrico".
Los sistemas SMP permiten que cualquier procesador trabaje en cualquier tarea sin importar su localización en memoria; con un propicio soporte del sistema operativo, estos sistemas pueden mover fácilmente tareas entre los procesadores para garantizar eficientemente el trabajo.
Una computadora SMP se compone de microprocesadores independientes que se comunican con la memoria a través de un bus compartido. Dicho bus es un recurso de uso común. Por tanto, debe ser arbitrado para que solamente un microprocesador lo use en cada instante de tiempo. Si las computadoras con un único microprocesador tienden a gastar considerable tiempo esperando a que lleguen los datos desde la memoria, SMP empeora esta situación, ya que hay varios parados en espera de datos.
* '''PREROUTING = ANTES DE RUTEAR:''' Significa que todavía no está definido para donde va el paquete. El paquete pasa por DNAT y luego pasa por la tabla de ruteo y ahí se define el destino. Justamente DNAT cambia la IP destino del paquete, entonces es NECESARIO que esté antes de la tabla de ruteo.
* '''POSTROUTING = DESPUES DE RUTEAR:''' Significa que ya está claro el destino del paquete, ya pasó por la tabla de ruteo. Pero antes de salir a la red, SNAT cambia la IP origen del paquete por otra IP.
* '''SNAT:''' se suele usar cuando tenés una LAN (ej: 192.168.100.0/24) y tenés que mandar un paquete a internet. Como no se puede mandar un paquete con IP PRIVADA a internet, cuando éste pasa por el router, SNAT le pone a cada paquete la IP PUBLICA del router. Por eso es necesario definir la interfaz de destino (que sería el cable por donde salís a internet) Todo lo que vaya por esa interfaz tiene que tener IP PUBLICA. '''Ejemplo:'''
iptables -t nat -A POSTROUTING –s 192.168.10.0/24 -o eth0 -j MASQUERADE
* '''DNAT:''' se suele usar para lo contrario. Por ejemplo, vos estás en China y querés entrar a un servidor web que tenés en la PC de tu casa, que está en una LAN con la IP 192.168.100.1. ¡Es imposible mandar por internet un paquete con IP destino PRIVADA! Entonces le mandás el paquete al router de tu casa (que tiene IP PUBLICA) Cuando el paquete pasa por el router, DNAT le cambia la IP destino por la IP PRIVADA de tu PC. '''Ejemplo:'''
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.100.1:80
En ambos casos eth0 sería la interfaz para internet.
Optimizando Conexión SSH
Realizar modificación en el archivo ''/etc/ssh/sshd_config''.
# vim /etc/ssh/sshd_config
# Puerto por el cual ssh escuchará
Port 83
# Authentication:
# Tiempo máximo para captar la contraseña del cliente
LoginGraceTime 15
# No permitir la entrada de root
PermitRootLogin no
# Número de veces que puede haber equivocaciones de Usuario y Contraseña
MaxAuthTries 3
Añadir un Usuario para el Acceso por SSH
# add nombre_usuario
Habilitar Bit de Forward
Se debe habilitar el bit de forward para que los Paquetes de Datos que lleguen al Proxy puedan ser enrutados. Para esto se utiliza el siguiente comando como Super Usuario.
echo 1 > /proc/sys/net/ipv4/ip_forward
Iptables para Squid
Se deben configurar reglas de iptables para direccionar el tráfico proveniente de la Red LAN xx.xx.0.0/16 a la Dirección IP xx.xx.xx.xx, la misma es la que tiene salida a Internet, y luego direccionar los Paquetes de Datos de la Interfaz eth1 de puerto 80 a 3128 de la Dirección que lleva a Internet. Así como también agregar las diferentes reglas que se deseen.
iptables -t nat -A POSTROUTING -s xx.xx.0.0/16 -o eth0 -j SNAT --to xx.xx.xx.xx
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to xx.xx.xx.xx:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Enrutamiento del Servidor
En este apartado deben ser especificadas la tabla de ruta del Servidor para que pueda llegar de una red a otra; para éste caso el Gateway será ''172.16.0.20''.
route -n = Visualiza el enrutamiento del Servidor
route add default gw 172.16.0.20 eth0 = Agregar Gateway
Arrancar Iptables con S.O.
Colocar en un script.sh las reglas Iptables que se deseen cargar cuando por alguna eventualidad sea reiniciado el Servidor para que sean cargadas automáticamente cuando cargue el Sistema Operativo (S.O.) y no hacerlo de manera manual; el mismo debe ser guardado en ''/etc/init.d'' Con la siguiente línea de Comando se realiza la tarea de colocarlo en el arranque del S.O.
update.rc.d nombre_iptables.sh defaults
Opciones de Iptables
* '''-A''': Le dice a iptables que abra esta regla para la cadena INPUT
* '''-s''' [origen]: Dirección de origen. Esta regla solo pertenece al trafico proviniente de esta IP. Sustituya con la direccion IP desde donde estamos generando el SSH.
* '''-d''' [destino]: Dirección de Destino. Puede ser un nombre de host, dirección de red o dirección IP singular.
* '''–dport''' [puerto]: Puerto de Destino. Especificando tráfico que es TCP puerto 22 (SSH).
* '''-j''' [salto]: Si todo funciona en esta regla saltar para ACCEPT (aceptar)
* '''-p''' [protocolo]: Protocolo al que pertenece el paquete.
* '''-s''' [origen]: dirección de origen del paquete, puede ser un nombre de host, una dirección IP normal, o una dirección de red (con máscara, de forma dirección/máscara).
* '''-i''' [interfaz-entrada]: Especificación del interfaz por el que se recibe el paquete.
* '''-o''' [interfaz-salida]: Interfaz por el que se va a enviar el paquete.
* ''' [!] -f''': Especifica que la regla se refiere al segundo y siguientes fragmentos de un paquete fragmentado. Si se antepone !, se refiere sólo al primer paquete, o a los paquetes no fragmentados.
* '''-j''' [target]: Nos permite elegir el target al que se debe enviar ese paquete, esto es, la acción a llevar a cabo con él.
Instalando Paso a Paso de Squid
1. Descargar la última versión de Squid desde la [http://www.squid-cache.org/ Pagina Oficial]
2. Enviar por ''ssh'' al Servidor el archivo descargado.
3. Descomprimir el archivo ''tar.gz''.
# tar -xvzf /ruta/archivo
4. Otorgarle todos los permisos a la Carpeta descomprimida.
chmod -R 777 /ruta/archivo
5. Luego compilar:
# ./configure --prefix=/usr/local/squid
# make all
# make install
6. Personalizar el squid.conf de acuerdo a la necesidad.
vim /usr/local/squid/etc/squid.conf
7. Inicializar el cache de Squid, esto se hace con el siguiente:
# /usr/local/squid/sbin/squid -z
8. Iniciar el Servicio de Squid:
# /usr/local/squid/sbin/squid
Ejemplo Archivo squid.conf
El siguiente archivo squid.conf es un ejemplo, el cual se encuentra optimizado y adaptado para una empresa y funcionando al 100% con Multiprocesamiento. O puedes descargarlos el .conf haciendo clic aqui.
acl red src xx.xx.0.0/16 # Red LAN
acl SSL_ports port 443
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
##### REGLAS #####
# Sitios Web's Bloqueados
acl paginasbloqueadas url_regex -i "/usr/local/squid/etc/reglas/paginas_bloqueadas"
# Páginas Desbloqueadas para toda la Red
acl paginasdesbloqueadas url_regex -i "/usr/local/squid/etc/reglas/paginas_desbloqueadas"
# Páginas Permitidas a Medios
acl paginasmedios url_regex -i "/usr/local/squid/etc/reglas/paginas_medios"
# Mac para Acceder a Páginas necesarias en Medios
acl macmedios arp "/usr/local/squid/etc/reglas/mac_medios"
# Frases Bloqueadas en las Busquedas de Tod@s l@s Usuari@s
acl palabrasbloqueadas url_regex -i "/usr/local/squid/etc/reglas/palabras_bloqueadas"
# Mac para Acceder a cualquier sitio
acl maclibres arp "/usr/local/squid/etc/reglas/mac_libres"
acl mactemporales arp "/usr/local/squid/etc/reglas/mac_temporales"
acl paginastemporales url_regex -i "/usr/local/squid/etc/reglas/paginas_temporales"
acl paginasssl port 443
acl macbloqueadas arp "/usr/local/squid/etc/reglas/mac_bloqueadas"
# MacAddress desbloqueadas para Nivel Medio
acl maclibresnivelmedio arp "/usr/local/squid/etc/reglas/mac_libres_nivelmedio"
# Paginas para Acceso de Nivel Medio
acl paginasdesbloqueadasnivelmedio url_regex -i "/usr/local/squid/etc/reglas/paginas_desbloqueadas_nivelmedio"
# Navegacion Libre para fines de semana S - Domingo : M - Lunes : T - Martes : W - Miércoles : H - Jueves : F - Viernes : A - Sábado
acl horariolibrerecepcion time MTWHF 18:00-23:59
acl horariolibrerecepcion1 time MTWHF 00:00-6:00
# Mac Libres Fin de Semana
acl macfindsemana arp "/usr/local/squid/etc/reglas/mac_findsemana"
acl macrecepcion arp "/etc/squid/reglas/mac_recepcion"
# Paginas permitidas para Recepcion
acl paginasdesbloqueadasrecepcion url_regex -i "/etc/squid/reglas/paginas_desbloqueadas_recepcion"
####################################
acl iexplorer browser MSIE
#acl EXE urlpath_regex \.[eE][xX][eE]
acl ISO urlpath_regex \.[iI][sS][oO]
acl MP3 urlpath_regex \.[mM][pP][3]
# Recommended minimum Access Permission configuration:
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
# 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
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
# Denegar Acceso de MacAddress Bloqueadas a la Red
http_access deny red macbloqueadas
http_access allow mactemporales paginastemporales
http_access allow macmedios paginasmedios
# Permitir Acceso a maclibres a bloqueados
http_access allow maclibres paginasbloqueadas
http_access allow maclibres palabrasbloqueadas
http_access allow maclibres paginasmedios
#http_access allow maclibres EXE
http_access allow maclibres ISO
http_access allow maclibres MP3
http_access allow maclibres iexplorer
# Permitir acceso a ciertas paginas TODOS
http_access allow red paginasdesbloqueadas
# Permitir Acceso a Nivel Medio las MacAddess descritas a las Paginas determinadas
http_access allow maclibresnivelmedio paginasdesbloqueadasnivelmedio
http_access allow maclibresnivelmedio paginasmedios
#http_access allow maclibresnivelmedio EXE
http_access allow maclibresnivelmedio ISO
http_access allow maclibresnivelmedio MP3
http_access allow macrecepcion horariolibrerecepcion paginasmedios
http_access allow macrecepcion horariolibrerecepcion1 paginasmedios
http_access allow macrecepcion horariolibrerecepcion1 paginasdesbloqueadasrecepcion
# Denegar Acceso a bloqueados
http_access deny paginasbloqueadas
# Denegar frasesbloqueadas para Usuari@s
http_access deny palabrasbloqueadas
http_access deny iexplorer
#http_access deny EXE
http_access deny ISO
http_access deny MP3
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow red
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
# icp_access deny all
icp_access deny all
htcp_access deny all
http_port 3128 transparent
cache_mem 384 MB
maximum_object_size_in_memory 512 KB
cache_dir diskd /usr/local/squid/var/cache/squid 10000 16 256
maximum_object_size 4 MB
cache_swap_low 90
cache_swap_high 95
access_log daemon:/usr/local/squid/var/logs/squid/access.log squid
cache_store_log /usr/local/squid/var/logs/squid/store.log
logfile_rotate 10
cache_log /usr/local/squid/var/logs/squid/cache.log
coredump_dir /var/cache/squid
# Add any of your own refresh_pattern entries above these.
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
# Si el objeto no expiró, se pasa a la siguiente etapa.
# Si el objeto tiene más de 28800 minutos (20 dias)en caché, es VIEJO, por lo que se descarga nuevamente. Sino...
# Si el factor de última modificación es mayor que 80%, se descarga nuevamente. Sino...
# Si el objeto tiene menos de 10 días (14400) en caché, NO se descarga, se usa el que está cacheado. Sino, se descarga.
# Imagenes
refresh_pattern -i \.gif$ 14400 80% 28800
refresh_pattern -i \.tiff?$ 14400 80% 28800
refresh_pattern -i \.bmp$ 14400 80% 28800
refresh_pattern -i \.jpe?g$ 14400 80% 28800
refresh_pattern -i \.xbm$ 14400 80% 28800
refresh_pattern -i \.png$ 14400 80% 28800
refresh_pattern -i \.wrl$ 14400 80% 28800
refresh_pattern -i \.ico$ 14400 80% 28800
refresh_pattern -i \.pnm$ 14400 80% 28800
refresh_pattern -i \.pbm$ 14400 80% 28800
refresh_pattern -i \.pgm$ 14400 80% 28800
refresh_pattern -i \.ppm$ 14400 80% 28800
refresh_pattern -i \.rgb$ 14400 80% 28800
refresh_pattern -i \.ppm$ 14400 80% 28800
refresh_pattern -i \.rgb$ 14400 80% 28800
refresh_pattern -i \.xpm$ 14400 80% 28800
refresh_pattern -i \.xwd$ 14400 80% 28800
refresh_pattern -i \.pict?$ 14400 80% 28800
# Videos
refresh_pattern -i \.mov$ 14400 80% 28800
refresh_pattern -i \.mpe?g?$ 14400 80% 28800
refresh_pattern -i \.avi$ 14400 80% 28800
refresh_pattern -i \.qtm?$ 14400 80% 28800
refresh_pattern -i \.viv$ 14400 80% 28800
refresh_pattern -i \.swf$ 14400 80% 28800
# Sonido
refresh_pattern -i \.wav$ 14400 80% 28800
refresh_pattern -i \.aiff?$ 14400 80% 28800
refresh_pattern -i \.au$ 14400 80% 28800
refresh_pattern -i \.ram?$ 14400 80% 28800
refresh_pattern -i \.snd$ 14400 80% 28800
refresh_pattern -i \.mid$ 14400 80% 28800
refresh_pattern -i \.mp2$ 14400 80% 28800
refresh_pattern -i \.mp3$ 14400 80% 28800
# archivos varios
refresh_pattern -i \.sit$ 14400 80% 28800
refresh_pattern -i \.zip$ 14400 80% 28800
refresh_pattern -i \.hqx$ 14400 80% 28800
refresh_pattern -i \.exe$ 14400 80% 28800
refresh_pattern -i \.arj$ 14400 80% 28800
refresh_pattern -i \.lzh$ 14400 80% 28800
refresh_pattern -i \.lha$ 14400 80% 28800
refresh_pattern -i \.cab$ 14400 80% 28800
refresh_pattern -i \.rar$ 14400 80% 28800
refresh_pattern -i \.tar$ 14400 80% 28800
refresh_pattern -i \.gz$ 14400 80% 28800
refresh_pattern -i \.z$ 14400 80% 28800
refresh_pattern -i \.a[0-9][0-9]$ 14400 80% 28800
refresh_pattern -i \.r[0-9][0-9]$ 14400 80% 28800
# Archivos de documentacion
refresh_pattern -i \.txt$ 14400 80% 28800
refresh_pattern -i \.pdf$ 14400 80% 28800
refresh_pattern -i \.doc$ 14400 80% 28800
refresh_pattern -i \.xls$ 14400 80% 28800
refresh_pattern -i \.ppt$ 14400 80% 28800
refresh_pattern -i \.odt$ 14400 80% 28800
refresh_pattern -i \.ods$ 14400 80% 28800
refresh_pattern -i \.odp$ 14400 80% 28800
refresh_pattern -i \.rtf$ 14400 80% 28800
refresh_pattern -i \.tex$ 14400 80% 28800
refresh_pattern -i \.latex$ 14400 80% 28800
# Java-type objects
refresh_pattern -i \.class$ 14400 80% 28800
refresh_pattern -i \.js$ 14400 80% 28800
refresh_pattern -i \.class$ 14400 80% 28800
# Web-type objects
refresh_pattern -i \.css$ 10 20% 4320
refresh_pattern -i \.html?$ 10 20% 4320
refresh_pattern \/$ 10 20% 4320
cache_mgr informatica@xxxx.xx.xx
cache_effective_user proxy
visible_hostname Proxy Empresa
error_directory /usr/local/squid/share/errors/es-es/
nonhierarchical_direct off
dns_nameservers xx.xx.xx.xx xx.xx.xx.xx
hosts_file /etc/hosts
ipcache_size 1024
ipcache_low 90
ipcache_high 95
fqdncache_size 1024
memory_pools off
workers 3
Lectura Log de Squid
Los logs (access.log, store.log, cache.log) de Squid se alojan en la siguiente ruta:
/var/log/squid/*.log
Los datos que guarda son, por orden:
# Fecha y hora en formato Unix UTC.
# Duración de la transacción, tiempo de respuesta.
# Dirección IP del cliente (equipo que hace la petición web).
# Resultado de la transacción.
# Tamaño de la descarga del objeto solicitado.
# Método de solicitud para obtener un objeto.
# URL solicitada.
# Por defecto en esta columna no aparece nada, pues mostrará información sólo si el parámetro ident_loookups está activado. Está desactivado por defecto porque afecta al rendimiento. Si está desactivado en esta columna aparecerá un guión "-".
# Código de jerarquía de la información, se compone de tres elementos: '''a.''' TIMEOUT_. '''b.''' Código que indica cómo ha sido manejada la solicitud: NONE, DIRECT, SIBLING_HIT, PARENT_HIT, DEFAULT_PARENT, SINGLE_PARENT, FIRST_UP_PARENT, NO_PARENT_DIRECT, FIRST_PARENT_MISS, CLOSEST_PARENT_MISS, CLOSEST_PARENT, CLOSEST_DIRECT, NO_DIRECT_FAIL, SOURCE_FASTEST, ROUNDROBIN_PARENT, CACHE_DIGEST_HIT, CD_PARENT_HIT, CD_SIBLING_HIT, NO_CACHE_DIGEST_DIRECT, CARP, ANY_PARENT. '''c.''' IP o hostname del equipo que hace la solicitud.
# Tipo de objeto descargado, tal y como indica el encabezado HTTP.
Tipos de Mensajes en Log de Squid
* '''TCP_HIT:''' copia válida en la caché de squid del objeto solicitado.
* '''TCP_MISS:''' el objeto solicitado no existe en la caché.
* '''TCP_MISS/200''' Se verá esta entrada en el log cuando se esté intentando descargar algún archivo que no esté en el Cache del Servidor. Lo que siginifica que sera descargado desde el servidor web. Tomar en cuenta que los scripts no se pueden almacenar en cache, esto aplica para los archivos con terminacion .pl o .php entre otros.
* '''TCP_MISS/304''' Al igual que el anterior significa que el archivo que se intenta descargar no está en el cache del servidor proxy, pero si esta almacenado en el cache de tu navegador de internet. En este caso el navegador enviará una solicitud de descarga solo si el archivo en el servidor web es mas reciente que el del cache de Navegador.
* '''TCP_REFRESH_HIT:''' el objeto solicitado estaba en la caché, pero es "antiguo". Se hace una petición para descargar el objeto reciente actual.
* '''TCP_REFRESH_FAIL_HIT:''' el objeto solicitado estaba en la caché, pero era viejo. La petición de validación del objeto falló. Por lo tanto se servirá el objeto de la caché.
* '''TCP_REFRESH_MISS:''' el objeto solicitado estaba en la caché, pero era viejo. Se hizo una petición de traer un objeto más reciente y se descargó correctamente.
* '''TCP_CLIENT_REFRESH_MISS:''' el cliente solicita el refresco de una web determinada, pidiendo una nueva versión.
* '''TCP_IMS_HIT:''' el cliente ha solicitado una nueva versión de un objeto que estaba cacheado, pero se encuentra que el objeto de la caché aún no estaba caducado, es decir, que ya era lo más nuevo posible.
* '''TCP_IMS_MISS:''' el cliente solicita nueva copia acerca de un objeto viejo.
* '''TCP_SWAPFAIL:''' falla la petición del objeto a la caché.
* '''TCP_SWAPFAIL_MISS:''' el objeto solicitado está en la caché pero no se puede acceder a él.
* '''TCP_NEGATIVE_HIT:''' solicitud negativa de objeto en caché, ejemplo "404 no encontrado".
* '''TCP_MEM_HIT A:''' una copia válida del objeto solicitado estaba en la caché y fue puesta en memoria, evitando así accesos al disco.
* '''TCP_DENIED:''' acceso denegado para esta petición.
* '''TCP_DENIED/400:''' indica que la petición tenía una mala sintaxis. El usuario (o un link a una página web) hizo algo mal.
* '''TCP_DENIED/401:''' indica que la página requiere autorización.
* '''TCP_DENIED/403:''' lo más probable es que sea un sitio bloqueado por una de las listas de control de acceso del Squid.
* '''TCP_DENIED/407:''' indica que el proxy está configurado para usar alguna forma de autenticación y esta autenticación está fallando.
Códigos de Estado de Squid
'''CÓDIGO DESCRIPCIÓN'''
000 Respuesta no recibida (puede que tenga un problema con el enlace de Internet)
- 1xx Una serie de respuestas informativas
100 Continuar
101 Protocolos de intercambio
- 2xx Número de respuestas satisfactorias a las solicitudes
200 Bueno
201 Creado
202 Aceptado
203 Información no autorizada
204 Sin contenido
205 Contenido eliminado
206 Contenido parcial
- 3xx Redirecciones
300 Múltiples opciones
301 Movido permanentemente
302 Encontrado
303 Ver más
304 Sin modificar
305 Utilice el proxy
306 No se utiliza
307 Redirección temporal
- 4xx Número de errores en el cliente
400 Mala respuesta
401 No autorizado
402 Pago solicitado
403 Denegado / prohibido
404 No se ha encontrado
405 Método no encontrado
406 No estoy de acuerdo
407 Autenticación de solicitud para el proxy
408 Tiempo de espera
409 Conflicto
410 Hecho
411 Tamaño requerido
412 No se pudo pre-condicional
413 Entrada amplia solicitud de
414 URL solicitada demasiado tiempo
415 Tipo de medio no es compatible
416 Rango requerido insatisfactoria
417 Esperanzas fallidas
- 5xx Número de errores en el servidor
500 Error interno del servidor
501 No se ha aplicado
502 Puerta de enlace incorrecta
503 Servicio no disponible
504 Tiempo de espera de puerta de enlace
505 HTTP versión no es compatible
- 6xx Una serie de errores de proxy
600 Cabecera de la respuesta incorrecta
Visualizar Log de Squid
1. De la siguiente manera se visualizan los últimos diez (10) registros del log
# tail -l /var/log/squid/access.log
2. Con la ésta línea de Comandos se puede observar el log con colores que hacen un poco fácil su lectura. Para ejecutarlo se debe instalar el Paquete multitail.
# aptitude install multitail
# multitail -cS squid -i /var/log/squid/access.log
3. Otra opción es squidview, el cual debe ser instalado y leugo de ejecutarlo mostrará línea a línea las conexiones a través del proxy, éste no muestra mayores detalles en cuanto a las peticiones.
# aptitude install squidview
# squidview
Reportes
sarg
Algunas Opciones a Revisar
# Añadir las opciones "cache_swap_low"(90) y "cache_swap_high"(95) que ayudan a determinar cuando Squid empezará a vaciar la caché. Esto es importante para mantener la caché dentro de unos límites razonables y accesibles rápidamente.
# Ajustar la opción "memory_pools" en "off" para que Squid libere la RAM que no está usando el servidor y la coloque en la fuente de memoria.
# Indicar sus servidores de nombres DNS usando la opción "dns_nameserves". Esto es importante puesto que Squid se queda atascado cuando hace búsquedas de DNS.
# Añadir la opción "half_closed_clients" para ponerla en "off" en el archivo de configuración. Además, cambia la opción "maximum_object_size" por "1024KB" para mejoras menores.
# Cambiar la opción "cache_mem" de 8MB, el predeterminado, a 32 MB. Si la máquina tiene memoria disponible, aumentar esta opción de memoria caché puede mejorar mucho el rendimiento. Algunas personas ponen esto a 100 MB o más.
Restricción de Acceso por Horarios
Denegar el acceso en ciertos horarios permite hacer un uso más racional del ancho de banda del que se dispone.
Los días de la semana se definen con letras, las cuales corresponden a la primera letra del nombre en inglés, de modo que se utilizarán del siguiente modo:
S - Domingo : M - Lunes : T - Martes : W - Miércoles : H - Jueves : F - Viernes : A - Sábado
Ejemplo:
acl laboral time MTWHF 08:00-15:00
Esta regla define a la lista laboral, la cual comprende un horario de 08:00 a 15:00 horas desde el Lunes hasta el Viernes.
La definición de la Regla de Control de Acceso sería:
http_access deny !laboral red_lan
Lo anterior, significa que quienes conformen red_lan solo podrán acceder a Internet de Lunes a Viernes de 08:00-15:00 horas.
Patrones de Refresco
Los patrones de refresco es la parte fundamental para hacer eficiente a Squid. Esto sucede porque su función es determinar que archivos se consideran frescos (y no deben volver a solicitarse a la url), separándolos de los que no cumplen dicha condición (y sí deben volver a solicitarse).
El mecanismo es complejo, porque la función de esta etiqueta es compleja. Por eso es que incluímos una buena cantidad de sugerencias que podrán servir de ejemplo.
La sinopsis de la etiqueta es la siguiente:
refresh_pattern [-i] regex min porcentaje max [opciones]
Como vemos ''-i'' es opcional (porque está entre corchetes). Lo que hace es activar la opción "case-insensitive", o sea, que no distinga mayúsculas de minúsculas. Si no ponemos esta opción, por defecto, es case-sensitive, como todo en Linux.
''regex'' se refiere a una expresión regular que define a que tipo de objeto apuntamos con este patrón.
''min'' es el tiempo (en minutos) que un objeto, sin tiempo explísito de expiración, debe considerarse fresco.
''porcentaje'' es (valga la redundancia) el porcentaje de vida promedio de un objeto, en el que éste debe considerarse fresco.
''max'' es el tiempo máximo (en minutos) que un objeto, sin tiempo explícito de expiración, debe considerarse fresco.
Lógica de Implementación
Squid irá planteandose la siguiente lógica en este orden:
Un objeto es FRESCO sí: Su fecha de expiración es menor que la actual. Sino es VIEJO. Y se solicita a la url.
Un objeto es VIEJO sí: Su edad es mayor que max. Y se solicita a la url.
Un objeto es FRESCO sí: El factor de última modificación (lm-factor) es menor a porcentaje, sino es VIEJO. Y se solicita a la url.
Un objeto es FRESCO sí: Su edad es menor que min. Sino es VIEJO. Y se solicita a la url.
'''Ejemplo:'''
# Debian
refresh_pattern -i \.deb$ 129600 100% 129600
En este grupo se tienen los archivos terminados en ''.deb''.
Si el objeto no expiró, se pasa a la siguiente etapa.
Si el objeto tiene más de 129600 minutos (3 meses)en caché, es VIEJO, por lo que se descarga nuevamente. Sino...
Si el factor de última modificación es mayor que 100% (eso es imposible para este caso), se descarga nuevamente. Sino...
Si el objeto tiene menos de 3 meses en caché, NO se descarga, se usa el que está cacheado. Sino, se descarga.
'''Aclaratoria:''' Estos objetos se mantendrán frescos el 100% de su tiempo de vida promedio (el tiempo promedio que pasa entre una solicitud y otra).
# Imagenes
refresh_pattern -i \.gif$ 14400 80% 28800
refresh_pattern -i \.tiff?$ 14400 80% 28800
refresh_pattern -i \.bmp$ 14400 80% 28800
refresh_pattern -i \.jpe?g$ 14400 80% 28800
Si el objeto no expiró, se pasa a la siguiente etapa.
Si el objeto tiene más de 28800 minutos (20 dias)en caché, es VIEJO, por lo que se descarga nuevamente. Sino...
Si el factor de última modificación es mayor que 80%, se descarga nuevamente. Sino...
Si el objeto tiene menos de 10 días (14400) en caché, NO se descarga, se usa el que está cacheado. Sino, se descarga.
Para chequear las reglas y/o parámetros en squid.conf, y de esta manera ver los errores que existen en el Archivo de Configuración squid.conf antes de reiniciar el Servicio del mismo, se utiliza el siguiente Comando:
# squid -k parse
http://www.tutoriales-ubuntu.com/archives/configurar-un-proxy-transparente-con-squid
http://www.esdebian.org/foro/46455/iptables-squid-3-transparente
http://www.ubuntu-es.org/node/165928
http://www.tuxjm.net/docs/Manual_de_Instalacion_de_Servidor_Proxy_Web_con_Ubuntu_Server_y_Squid/html-multiples/index.html
http://www.alcancelibre.org/staticpages/index.php?page=19-4-como-squid-tiempo
http://www.redesymas.org/2011/07/configuracion-de-iptables-firewall-en.html
http://www.pello.info/filez/firewall/iptables.html
http://www.adslayuda.com/Linux-iptables_lan.html
http://www.linuxparatodos.net//web/comunidad/base-de-conocimiento/-/wiki/Base%20de%20Conocimiento/Servidor+Proxy
http://servidordebian.wikidot.com/squeeze-es:intranet-ssl-cert-self-signed
http://www.visolve.com/system_services/opensource/squid/squid30/network.php#sslproxy_client_key
http://www.rahulpahade.com/content/squid-transparent-proxy-over-ssl-https
http://www.sebest.com.ar/?q=node/55
http://thebitdeveloper.com/2010/02/12/instalacion-y-configuracion-de-squid3/
http://www.akadia.com/services/ssh_test_certificate.html
http://wiki.cayu.com.ar/doku.php?id=manuales:servidor_squid
http://www.taringa.net/posts/linux/8448270.R/Servidor-Firewall-en-Linux-_IPTABLES_.html
https://www.arin.net/
http://www.ecualug.org/2008/07/24/comos/optimizar_squid_delays_pools_squish?page=1
http://www.esdebian.org/foro/42775/configurarar-optimamente-squid
http://www.taringa.net/posts/linux/15866058/Squid-a-fondo---editado.html
http://octavio.gnu.org.ve/squid-3-2-4-smp-en-debian-squeeze/
http://wiki.xtech.com.ar/index.php/Proxy
http://eduangi.com/2009/04/04/limpiar-memoria-en-linux/
En una red privada 192.168.0.0 Clase C (Máscara 255.255.255.0 o '/24'), se necesita un gateway si se desea llegar a otras redes, como Internet. Dicho Gateway poseerá la cantidad de interfaces necesarias y rutas establecidas y políticas de acceso que permitirán o no el acceso a ciertos destinos desde esta red interna.
Por supuesto, en este caso se hablará de acceso “transparente” (por así decirlo) a la red destino en cuestión. Esto significa que el Gateway no tiene en cuenta el protocolo de aplicación (HTTP, FTP, etc.) o mejor dicho que “no los entiende ni tiene en cuenta excepto por puerto de origen o destino”.
Por ejemplo, se puede asumir que en el puerto 80 de cierta IP de destino habrá un servicio que entienda HTTP... pero el Gateway no puede asegurarlo.
Un Proxy actúa como Gateway pero a un nivel más alto, en la llamada “capa de aplicación”. Significa que entiende HTTP, FTP, u algún otro protocolo de alto nivel y que acepta por parte de un cliente (de la red interna, por ejemplo) solicitudes vinculadas a dicho protocolo.
El Proxy realizará, a su vez, la solicitud al servidor de destino, tomará el resultado y lo devolverá. Al tener conocimiento del protocolo se pueden aplicar reglas mucho más interesantes, como restricciones basadas en contenido, partes del nombre de un sitio, usuario, grupo al que un usuario pertenece, IP de origen, etc.
Squid es un Proxy de HTTP y FTP y a su vez provee la funcionalidad de Cache (guarda copias de las páginas y archivos visitados). De esta forma, cada vez que un usuario vuelve a acceder a cierto sitio, sólo el contenido que haya cambiado será transferido, logrando una reducción de la utilización del Ancho de Banda disponible.
En resumen, el cliente no accede realmente a internet, sino que le solicita al Proxy lo que quiere, el proxy a su vez lo busca en Internet, lo transfiere y luego se lo da al cliente. Es menos directo que NAT, donde se trabaja a nivel IP y no a nivel aplicación.
Squid
Existen una cierta cantidad de términos que se deben conocer antes de configurar un Servidor Proxy, ya sea directo o transparente.
Entender dichos términos, permitirá comprender en mayor profundidad los comentarios, ejemplos y documentación que suelen acompañar a los paquetes de Software de esta categoría y de todo el Software Libre en general.
En este caso, el término "Proxy" es tomado de forma incorrecta. Ya que muchos hablan de "proxies" cuando en verdad hablan de un "router" o de NAT.
Veamos las ventajas de usar el Proxy Squid:
* Soporta HTTP y FTP.
* Tiene un avanzado mecanismo de autentificación y control de acceso (o sea, a quien y cuando permitimos utilizar el proxy).
* Permite actuar como cache de Internet, copiando contenido en forma local para que se lo pueda acceder rápidamente.
* Es Software Libre.
Proxy Transparente
El hecho de que sea transparente permite al administrador lograr que toda solicitud HTTP (puerto de destino 80/tcp) realizada por un cliente de la red interna sea automáticamente redirigida al Proxy, evitando la salida directa. Los motivos para realizar ésto pueden depender del administrador, pero seguramente tengan que ver con políticas de administración de recursos, seguridad, performance, etc. Esto se realiza mediante reglas FORWARD de Iptables.
Multiprocesamiento Simétrico (SMP)
En computación, SMP (del inglés Symmetric Multi-Processing, en español "multiproceso simétrico") es un tipo de arquitectura de computadores en la que dos o más unidades de procesamiento comparten una única memoria central.
Explicación detallada
La arquitectura SMP (también llamada UMA, del inglés Uniform Memory Access, en español "acceso uniforme a memoria") se caracteriza por el hecho de que varias unidades de procesamiento comparten el acceso a la memoria, compitiendo en igualdad de condiciones por dicho acceso, de ahí la denominación "simétrico".
Los sistemas SMP permiten que cualquier procesador trabaje en cualquier tarea sin importar su localización en memoria; con un propicio soporte del sistema operativo, estos sistemas pueden mover fácilmente tareas entre los procesadores para garantizar eficientemente el trabajo.
Una computadora SMP se compone de microprocesadores independientes que se comunican con la memoria a través de un bus compartido. Dicho bus es un recurso de uso común. Por tanto, debe ser arbitrado para que solamente un microprocesador lo use en cada instante de tiempo. Si las computadoras con un único microprocesador tienden a gastar considerable tiempo esperando a que lleguen los datos desde la memoria, SMP empeora esta situación, ya que hay varios parados en espera de datos.
Términos de Enrutamiento
* '''PREROUTING = ANTES DE RUTEAR:''' Significa que todavía no está definido para donde va el paquete. El paquete pasa por DNAT y luego pasa por la tabla de ruteo y ahí se define el destino. Justamente DNAT cambia la IP destino del paquete, entonces es NECESARIO que esté antes de la tabla de ruteo.
* '''POSTROUTING = DESPUES DE RUTEAR:''' Significa que ya está claro el destino del paquete, ya pasó por la tabla de ruteo. Pero antes de salir a la red, SNAT cambia la IP origen del paquete por otra IP.
* '''SNAT:''' se suele usar cuando tenés una LAN (ej: 192.168.100.0/24) y tenés que mandar un paquete a internet. Como no se puede mandar un paquete con IP PRIVADA a internet, cuando éste pasa por el router, SNAT le pone a cada paquete la IP PUBLICA del router. Por eso es necesario definir la interfaz de destino (que sería el cable por donde salís a internet) Todo lo que vaya por esa interfaz tiene que tener IP PUBLICA. '''Ejemplo:'''
iptables -t nat -A POSTROUTING –s 192.168.10.0/24 -o eth0 -j MASQUERADE
* '''DNAT:''' se suele usar para lo contrario. Por ejemplo, vos estás en China y querés entrar a un servidor web que tenés en la PC de tu casa, que está en una LAN con la IP 192.168.100.1. ¡Es imposible mandar por internet un paquete con IP destino PRIVADA! Entonces le mandás el paquete al router de tu casa (que tiene IP PUBLICA) Cuando el paquete pasa por el router, DNAT le cambia la IP destino por la IP PRIVADA de tu PC. '''Ejemplo:'''
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.100.1:80
En ambos casos eth0 sería la interfaz para internet.
Configuraciones Previas del Servidor
Optimizando Conexión SSH
Realizar modificación en el archivo ''/etc/ssh/sshd_config''.
# vim /etc/ssh/sshd_config
# Puerto por el cual ssh escuchará
Port 83
# Authentication:
# Tiempo máximo para captar la contraseña del cliente
LoginGraceTime 15
# No permitir la entrada de root
PermitRootLogin no
# Número de veces que puede haber equivocaciones de Usuario y Contraseña
MaxAuthTries 3
Añadir un Usuario para el Acceso por SSH
# add nombre_usuario
Habilitar Bit de Forward
Se debe habilitar el bit de forward para que los Paquetes de Datos que lleguen al Proxy puedan ser enrutados. Para esto se utiliza el siguiente comando como Super Usuario.
echo 1 > /proc/sys/net/ipv4/ip_forward
Iptables para Squid
Se deben configurar reglas de iptables para direccionar el tráfico proveniente de la Red LAN xx.xx.0.0/16 a la Dirección IP xx.xx.xx.xx, la misma es la que tiene salida a Internet, y luego direccionar los Paquetes de Datos de la Interfaz eth1 de puerto 80 a 3128 de la Dirección que lleva a Internet. Así como también agregar las diferentes reglas que se deseen.
iptables -t nat -A POSTROUTING -s xx.xx.0.0/16 -o eth0 -j SNAT --to xx.xx.xx.xx
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to xx.xx.xx.xx:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Enrutamiento del Servidor
En este apartado deben ser especificadas la tabla de ruta del Servidor para que pueda llegar de una red a otra; para éste caso el Gateway será ''172.16.0.20''.
route -n = Visualiza el enrutamiento del Servidor
route add default gw 172.16.0.20 eth0 = Agregar Gateway
Arrancar Iptables con S.O.
Colocar en un script.sh las reglas Iptables que se deseen cargar cuando por alguna eventualidad sea reiniciado el Servidor para que sean cargadas automáticamente cuando cargue el Sistema Operativo (S.O.) y no hacerlo de manera manual; el mismo debe ser guardado en ''/etc/init.d'' Con la siguiente línea de Comando se realiza la tarea de colocarlo en el arranque del S.O.
update.rc.d nombre_iptables.sh defaults
Opciones de Iptables
* '''-A''': Le dice a iptables que abra esta regla para la cadena INPUT
* '''-s''' [origen]: Dirección de origen. Esta regla solo pertenece al trafico proviniente de esta IP. Sustituya con la direccion IP desde donde estamos generando el SSH.
* '''-d''' [destino]: Dirección de Destino. Puede ser un nombre de host, dirección de red o dirección IP singular.
* '''–dport''' [puerto]: Puerto de Destino. Especificando tráfico que es TCP puerto 22 (SSH).
* '''-j''' [salto]: Si todo funciona en esta regla saltar para ACCEPT (aceptar)
* '''-p''' [protocolo]: Protocolo al que pertenece el paquete.
* '''-s''' [origen]: dirección de origen del paquete, puede ser un nombre de host, una dirección IP normal, o una dirección de red (con máscara, de forma dirección/máscara).
* '''-i''' [interfaz-entrada]: Especificación del interfaz por el que se recibe el paquete.
* '''-o''' [interfaz-salida]: Interfaz por el que se va a enviar el paquete.
* ''' [!] -f''': Especifica que la regla se refiere al segundo y siguientes fragmentos de un paquete fragmentado. Si se antepone !, se refiere sólo al primer paquete, o a los paquetes no fragmentados.
* '''-j''' [target]: Nos permite elegir el target al que se debe enviar ese paquete, esto es, la acción a llevar a cabo con él.
Instalación
Instalando Paso a Paso de Squid
1. Descargar la última versión de Squid desde la [http://www.squid-cache.org/ Pagina Oficial]
2. Enviar por ''ssh'' al Servidor el archivo descargado.
3. Descomprimir el archivo ''tar.gz''.
# tar -xvzf /ruta/archivo
4. Otorgarle todos los permisos a la Carpeta descomprimida.
chmod -R 777 /ruta/archivo
5. Luego compilar:
# ./configure --prefix=/usr/local/squid
# make all
# make install
6. Personalizar el squid.conf de acuerdo a la necesidad.
vim /usr/local/squid/etc/squid.conf
7. Inicializar el cache de Squid, esto se hace con el siguiente:
# /usr/local/squid/sbin/squid -z
8. Iniciar el Servicio de Squid:
# /usr/local/squid/sbin/squid
Ejemplo Archivo squid.conf
El siguiente archivo squid.conf es un ejemplo, el cual se encuentra optimizado y adaptado para una empresa y funcionando al 100% con Multiprocesamiento. O puedes descargarlos el .conf haciendo clic aqui.
acl red src xx.xx.0.0/16 # Red LAN
acl SSL_ports port 443
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
##### REGLAS #####
# Sitios Web's Bloqueados
acl paginasbloqueadas url_regex -i "/usr/local/squid/etc/reglas/paginas_bloqueadas"
# Páginas Desbloqueadas para toda la Red
acl paginasdesbloqueadas url_regex -i "/usr/local/squid/etc/reglas/paginas_desbloqueadas"
# Páginas Permitidas a Medios
acl paginasmedios url_regex -i "/usr/local/squid/etc/reglas/paginas_medios"
# Mac para Acceder a Páginas necesarias en Medios
acl macmedios arp "/usr/local/squid/etc/reglas/mac_medios"
# Frases Bloqueadas en las Busquedas de Tod@s l@s Usuari@s
acl palabrasbloqueadas url_regex -i "/usr/local/squid/etc/reglas/palabras_bloqueadas"
# Mac para Acceder a cualquier sitio
acl maclibres arp "/usr/local/squid/etc/reglas/mac_libres"
acl mactemporales arp "/usr/local/squid/etc/reglas/mac_temporales"
acl paginastemporales url_regex -i "/usr/local/squid/etc/reglas/paginas_temporales"
acl paginasssl port 443
acl macbloqueadas arp "/usr/local/squid/etc/reglas/mac_bloqueadas"
# MacAddress desbloqueadas para Nivel Medio
acl maclibresnivelmedio arp "/usr/local/squid/etc/reglas/mac_libres_nivelmedio"
# Paginas para Acceso de Nivel Medio
acl paginasdesbloqueadasnivelmedio url_regex -i "/usr/local/squid/etc/reglas/paginas_desbloqueadas_nivelmedio"
# Navegacion Libre para fines de semana S - Domingo : M - Lunes : T - Martes : W - Miércoles : H - Jueves : F - Viernes : A - Sábado
acl horariolibrerecepcion time MTWHF 18:00-23:59
acl horariolibrerecepcion1 time MTWHF 00:00-6:00
# Mac Libres Fin de Semana
acl macfindsemana arp "/usr/local/squid/etc/reglas/mac_findsemana"
acl macrecepcion arp "/etc/squid/reglas/mac_recepcion"
# Paginas permitidas para Recepcion
acl paginasdesbloqueadasrecepcion url_regex -i "/etc/squid/reglas/paginas_desbloqueadas_recepcion"
####################################
acl iexplorer browser MSIE
#acl EXE urlpath_regex \.[eE][xX][eE]
acl ISO urlpath_regex \.[iI][sS][oO]
acl MP3 urlpath_regex \.[mM][pP][3]
# Recommended minimum Access Permission configuration:
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
# 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
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
# Denegar Acceso de MacAddress Bloqueadas a la Red
http_access deny red macbloqueadas
http_access allow mactemporales paginastemporales
http_access allow macmedios paginasmedios
# Permitir Acceso a maclibres a bloqueados
http_access allow maclibres paginasbloqueadas
http_access allow maclibres palabrasbloqueadas
http_access allow maclibres paginasmedios
#http_access allow maclibres EXE
http_access allow maclibres ISO
http_access allow maclibres MP3
http_access allow maclibres iexplorer
# Permitir acceso a ciertas paginas TODOS
http_access allow red paginasdesbloqueadas
# Permitir Acceso a Nivel Medio las MacAddess descritas a las Paginas determinadas
http_access allow maclibresnivelmedio paginasdesbloqueadasnivelmedio
http_access allow maclibresnivelmedio paginasmedios
#http_access allow maclibresnivelmedio EXE
http_access allow maclibresnivelmedio ISO
http_access allow maclibresnivelmedio MP3
http_access allow macrecepcion horariolibrerecepcion paginasmedios
http_access allow macrecepcion horariolibrerecepcion1 paginasmedios
http_access allow macrecepcion horariolibrerecepcion1 paginasdesbloqueadasrecepcion
# Denegar Acceso a bloqueados
http_access deny paginasbloqueadas
# Denegar frasesbloqueadas para Usuari@s
http_access deny palabrasbloqueadas
http_access deny iexplorer
#http_access deny EXE
http_access deny ISO
http_access deny MP3
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow red
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
# icp_access deny all
icp_access deny all
htcp_access deny all
http_port 3128 transparent
cache_mem 384 MB
maximum_object_size_in_memory 512 KB
cache_dir diskd /usr/local/squid/var/cache/squid 10000 16 256
maximum_object_size 4 MB
cache_swap_low 90
cache_swap_high 95
access_log daemon:/usr/local/squid/var/logs/squid/access.log squid
cache_store_log /usr/local/squid/var/logs/squid/store.log
logfile_rotate 10
cache_log /usr/local/squid/var/logs/squid/cache.log
coredump_dir /var/cache/squid
# Add any of your own refresh_pattern entries above these.
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
# Si el objeto no expiró, se pasa a la siguiente etapa.
# Si el objeto tiene más de 28800 minutos (20 dias)en caché, es VIEJO, por lo que se descarga nuevamente. Sino...
# Si el factor de última modificación es mayor que 80%, se descarga nuevamente. Sino...
# Si el objeto tiene menos de 10 días (14400) en caché, NO se descarga, se usa el que está cacheado. Sino, se descarga.
# Imagenes
refresh_pattern -i \.gif$ 14400 80% 28800
refresh_pattern -i \.tiff?$ 14400 80% 28800
refresh_pattern -i \.bmp$ 14400 80% 28800
refresh_pattern -i \.jpe?g$ 14400 80% 28800
refresh_pattern -i \.xbm$ 14400 80% 28800
refresh_pattern -i \.png$ 14400 80% 28800
refresh_pattern -i \.wrl$ 14400 80% 28800
refresh_pattern -i \.ico$ 14400 80% 28800
refresh_pattern -i \.pnm$ 14400 80% 28800
refresh_pattern -i \.pbm$ 14400 80% 28800
refresh_pattern -i \.pgm$ 14400 80% 28800
refresh_pattern -i \.ppm$ 14400 80% 28800
refresh_pattern -i \.rgb$ 14400 80% 28800
refresh_pattern -i \.ppm$ 14400 80% 28800
refresh_pattern -i \.rgb$ 14400 80% 28800
refresh_pattern -i \.xpm$ 14400 80% 28800
refresh_pattern -i \.xwd$ 14400 80% 28800
refresh_pattern -i \.pict?$ 14400 80% 28800
# Videos
refresh_pattern -i \.mov$ 14400 80% 28800
refresh_pattern -i \.mpe?g?$ 14400 80% 28800
refresh_pattern -i \.avi$ 14400 80% 28800
refresh_pattern -i \.qtm?$ 14400 80% 28800
refresh_pattern -i \.viv$ 14400 80% 28800
refresh_pattern -i \.swf$ 14400 80% 28800
# Sonido
refresh_pattern -i \.wav$ 14400 80% 28800
refresh_pattern -i \.aiff?$ 14400 80% 28800
refresh_pattern -i \.au$ 14400 80% 28800
refresh_pattern -i \.ram?$ 14400 80% 28800
refresh_pattern -i \.snd$ 14400 80% 28800
refresh_pattern -i \.mid$ 14400 80% 28800
refresh_pattern -i \.mp2$ 14400 80% 28800
refresh_pattern -i \.mp3$ 14400 80% 28800
# archivos varios
refresh_pattern -i \.sit$ 14400 80% 28800
refresh_pattern -i \.zip$ 14400 80% 28800
refresh_pattern -i \.hqx$ 14400 80% 28800
refresh_pattern -i \.exe$ 14400 80% 28800
refresh_pattern -i \.arj$ 14400 80% 28800
refresh_pattern -i \.lzh$ 14400 80% 28800
refresh_pattern -i \.lha$ 14400 80% 28800
refresh_pattern -i \.cab$ 14400 80% 28800
refresh_pattern -i \.rar$ 14400 80% 28800
refresh_pattern -i \.tar$ 14400 80% 28800
refresh_pattern -i \.gz$ 14400 80% 28800
refresh_pattern -i \.z$ 14400 80% 28800
refresh_pattern -i \.a[0-9][0-9]$ 14400 80% 28800
refresh_pattern -i \.r[0-9][0-9]$ 14400 80% 28800
# Archivos de documentacion
refresh_pattern -i \.txt$ 14400 80% 28800
refresh_pattern -i \.pdf$ 14400 80% 28800
refresh_pattern -i \.doc$ 14400 80% 28800
refresh_pattern -i \.xls$ 14400 80% 28800
refresh_pattern -i \.ppt$ 14400 80% 28800
refresh_pattern -i \.odt$ 14400 80% 28800
refresh_pattern -i \.ods$ 14400 80% 28800
refresh_pattern -i \.odp$ 14400 80% 28800
refresh_pattern -i \.rtf$ 14400 80% 28800
refresh_pattern -i \.tex$ 14400 80% 28800
refresh_pattern -i \.latex$ 14400 80% 28800
# Java-type objects
refresh_pattern -i \.class$ 14400 80% 28800
refresh_pattern -i \.js$ 14400 80% 28800
refresh_pattern -i \.class$ 14400 80% 28800
# Web-type objects
refresh_pattern -i \.css$ 10 20% 4320
refresh_pattern -i \.html?$ 10 20% 4320
refresh_pattern \/$ 10 20% 4320
cache_mgr informatica@xxxx.xx.xx
cache_effective_user proxy
visible_hostname Proxy Empresa
error_directory /usr/local/squid/share/errors/es-es/
nonhierarchical_direct off
dns_nameservers xx.xx.xx.xx xx.xx.xx.xx
hosts_file /etc/hosts
ipcache_size 1024
ipcache_low 90
ipcache_high 95
fqdncache_size 1024
memory_pools off
workers 3
Logs de Squid
Lectura Log de Squid
Los logs (access.log, store.log, cache.log) de Squid se alojan en la siguiente ruta:
/var/log/squid/*.log
Los datos que guarda son, por orden:
# Fecha y hora en formato Unix UTC.
# Duración de la transacción, tiempo de respuesta.
# Dirección IP del cliente (equipo que hace la petición web).
# Resultado de la transacción.
# Tamaño de la descarga del objeto solicitado.
# Método de solicitud para obtener un objeto.
# URL solicitada.
# Por defecto en esta columna no aparece nada, pues mostrará información sólo si el parámetro ident_loookups está activado. Está desactivado por defecto porque afecta al rendimiento. Si está desactivado en esta columna aparecerá un guión "-".
# Código de jerarquía de la información, se compone de tres elementos: '''a.''' TIMEOUT_. '''b.''' Código que indica cómo ha sido manejada la solicitud: NONE, DIRECT, SIBLING_HIT, PARENT_HIT, DEFAULT_PARENT, SINGLE_PARENT, FIRST_UP_PARENT, NO_PARENT_DIRECT, FIRST_PARENT_MISS, CLOSEST_PARENT_MISS, CLOSEST_PARENT, CLOSEST_DIRECT, NO_DIRECT_FAIL, SOURCE_FASTEST, ROUNDROBIN_PARENT, CACHE_DIGEST_HIT, CD_PARENT_HIT, CD_SIBLING_HIT, NO_CACHE_DIGEST_DIRECT, CARP, ANY_PARENT. '''c.''' IP o hostname del equipo que hace la solicitud.
# Tipo de objeto descargado, tal y como indica el encabezado HTTP.
Tipos de Mensajes en Log de Squid
* '''TCP_HIT:''' copia válida en la caché de squid del objeto solicitado.
* '''TCP_MISS:''' el objeto solicitado no existe en la caché.
* '''TCP_MISS/200''' Se verá esta entrada en el log cuando se esté intentando descargar algún archivo que no esté en el Cache del Servidor. Lo que siginifica que sera descargado desde el servidor web. Tomar en cuenta que los scripts no se pueden almacenar en cache, esto aplica para los archivos con terminacion .pl o .php entre otros.
* '''TCP_MISS/304''' Al igual que el anterior significa que el archivo que se intenta descargar no está en el cache del servidor proxy, pero si esta almacenado en el cache de tu navegador de internet. En este caso el navegador enviará una solicitud de descarga solo si el archivo en el servidor web es mas reciente que el del cache de Navegador.
* '''TCP_REFRESH_HIT:''' el objeto solicitado estaba en la caché, pero es "antiguo". Se hace una petición para descargar el objeto reciente actual.
* '''TCP_REFRESH_FAIL_HIT:''' el objeto solicitado estaba en la caché, pero era viejo. La petición de validación del objeto falló. Por lo tanto se servirá el objeto de la caché.
* '''TCP_REFRESH_MISS:''' el objeto solicitado estaba en la caché, pero era viejo. Se hizo una petición de traer un objeto más reciente y se descargó correctamente.
* '''TCP_CLIENT_REFRESH_MISS:''' el cliente solicita el refresco de una web determinada, pidiendo una nueva versión.
* '''TCP_IMS_HIT:''' el cliente ha solicitado una nueva versión de un objeto que estaba cacheado, pero se encuentra que el objeto de la caché aún no estaba caducado, es decir, que ya era lo más nuevo posible.
* '''TCP_IMS_MISS:''' el cliente solicita nueva copia acerca de un objeto viejo.
* '''TCP_SWAPFAIL:''' falla la petición del objeto a la caché.
* '''TCP_SWAPFAIL_MISS:''' el objeto solicitado está en la caché pero no se puede acceder a él.
* '''TCP_NEGATIVE_HIT:''' solicitud negativa de objeto en caché, ejemplo "404 no encontrado".
* '''TCP_MEM_HIT A:''' una copia válida del objeto solicitado estaba en la caché y fue puesta en memoria, evitando así accesos al disco.
* '''TCP_DENIED:''' acceso denegado para esta petición.
* '''TCP_DENIED/400:''' indica que la petición tenía una mala sintaxis. El usuario (o un link a una página web) hizo algo mal.
* '''TCP_DENIED/401:''' indica que la página requiere autorización.
* '''TCP_DENIED/403:''' lo más probable es que sea un sitio bloqueado por una de las listas de control de acceso del Squid.
* '''TCP_DENIED/407:''' indica que el proxy está configurado para usar alguna forma de autenticación y esta autenticación está fallando.
Códigos de Estado de Squid
'''CÓDIGO DESCRIPCIÓN'''
000 Respuesta no recibida (puede que tenga un problema con el enlace de Internet)
- 1xx Una serie de respuestas informativas
100 Continuar
101 Protocolos de intercambio
- 2xx Número de respuestas satisfactorias a las solicitudes
200 Bueno
201 Creado
202 Aceptado
203 Información no autorizada
204 Sin contenido
205 Contenido eliminado
206 Contenido parcial
- 3xx Redirecciones
300 Múltiples opciones
301 Movido permanentemente
302 Encontrado
303 Ver más
304 Sin modificar
305 Utilice el proxy
306 No se utiliza
307 Redirección temporal
- 4xx Número de errores en el cliente
400 Mala respuesta
401 No autorizado
402 Pago solicitado
403 Denegado / prohibido
404 No se ha encontrado
405 Método no encontrado
406 No estoy de acuerdo
407 Autenticación de solicitud para el proxy
408 Tiempo de espera
409 Conflicto
410 Hecho
411 Tamaño requerido
412 No se pudo pre-condicional
413 Entrada amplia solicitud de
414 URL solicitada demasiado tiempo
415 Tipo de medio no es compatible
416 Rango requerido insatisfactoria
417 Esperanzas fallidas
- 5xx Número de errores en el servidor
500 Error interno del servidor
501 No se ha aplicado
502 Puerta de enlace incorrecta
503 Servicio no disponible
504 Tiempo de espera de puerta de enlace
505 HTTP versión no es compatible
- 6xx Una serie de errores de proxy
600 Cabecera de la respuesta incorrecta
Visualizar Log de Squid
1. De la siguiente manera se visualizan los últimos diez (10) registros del log
# tail -l /var/log/squid/access.log
2. Con la ésta línea de Comandos se puede observar el log con colores que hacen un poco fácil su lectura. Para ejecutarlo se debe instalar el Paquete multitail.
# aptitude install multitail
# multitail -cS squid -i /var/log/squid/access.log
3. Otra opción es squidview, el cual debe ser instalado y leugo de ejecutarlo mostrará línea a línea las conexiones a través del proxy, éste no muestra mayores detalles en cuanto a las peticiones.
# aptitude install squidview
# squidview
Reportes
sarg
Optimización de Squid
Algunas Opciones a Revisar
# Añadir las opciones "cache_swap_low"(90) y "cache_swap_high"(95) que ayudan a determinar cuando Squid empezará a vaciar la caché. Esto es importante para mantener la caché dentro de unos límites razonables y accesibles rápidamente.
# Ajustar la opción "memory_pools" en "off" para que Squid libere la RAM que no está usando el servidor y la coloque en la fuente de memoria.
# Indicar sus servidores de nombres DNS usando la opción "dns_nameserves". Esto es importante puesto que Squid se queda atascado cuando hace búsquedas de DNS.
# Añadir la opción "half_closed_clients" para ponerla en "off" en el archivo de configuración. Además, cambia la opción "maximum_object_size" por "1024KB" para mejoras menores.
# Cambiar la opción "cache_mem" de 8MB, el predeterminado, a 32 MB. Si la máquina tiene memoria disponible, aumentar esta opción de memoria caché puede mejorar mucho el rendimiento. Algunas personas ponen esto a 100 MB o más.
Restricción de Acceso por Horarios
Denegar el acceso en ciertos horarios permite hacer un uso más racional del ancho de banda del que se dispone.
Los días de la semana se definen con letras, las cuales corresponden a la primera letra del nombre en inglés, de modo que se utilizarán del siguiente modo:
S - Domingo : M - Lunes : T - Martes : W - Miércoles : H - Jueves : F - Viernes : A - Sábado
Ejemplo:
acl laboral time MTWHF 08:00-15:00
Esta regla define a la lista laboral, la cual comprende un horario de 08:00 a 15:00 horas desde el Lunes hasta el Viernes.
La definición de la Regla de Control de Acceso sería:
http_access deny !laboral red_lan
Lo anterior, significa que quienes conformen red_lan solo podrán acceder a Internet de Lunes a Viernes de 08:00-15:00 horas.
Patrones de Refresco
Los patrones de refresco es la parte fundamental para hacer eficiente a Squid. Esto sucede porque su función es determinar que archivos se consideran frescos (y no deben volver a solicitarse a la url), separándolos de los que no cumplen dicha condición (y sí deben volver a solicitarse).
El mecanismo es complejo, porque la función de esta etiqueta es compleja. Por eso es que incluímos una buena cantidad de sugerencias que podrán servir de ejemplo.
La sinopsis de la etiqueta es la siguiente:
refresh_pattern [-i] regex min porcentaje max [opciones]
Como vemos ''-i'' es opcional (porque está entre corchetes). Lo que hace es activar la opción "case-insensitive", o sea, que no distinga mayúsculas de minúsculas. Si no ponemos esta opción, por defecto, es case-sensitive, como todo en Linux.
''regex'' se refiere a una expresión regular que define a que tipo de objeto apuntamos con este patrón.
''min'' es el tiempo (en minutos) que un objeto, sin tiempo explísito de expiración, debe considerarse fresco.
''porcentaje'' es (valga la redundancia) el porcentaje de vida promedio de un objeto, en el que éste debe considerarse fresco.
''max'' es el tiempo máximo (en minutos) que un objeto, sin tiempo explícito de expiración, debe considerarse fresco.
Lógica de Implementación
Squid irá planteandose la siguiente lógica en este orden:
Un objeto es FRESCO sí: Su fecha de expiración es menor que la actual. Sino es VIEJO. Y se solicita a la url.
Un objeto es VIEJO sí: Su edad es mayor que max. Y se solicita a la url.
Un objeto es FRESCO sí: El factor de última modificación (lm-factor) es menor a porcentaje, sino es VIEJO. Y se solicita a la url.
Un objeto es FRESCO sí: Su edad es menor que min. Sino es VIEJO. Y se solicita a la url.
'''Ejemplo:'''
# Debian
refresh_pattern -i \.deb$ 129600 100% 129600
En este grupo se tienen los archivos terminados en ''.deb''.
Si el objeto no expiró, se pasa a la siguiente etapa.
Si el objeto tiene más de 129600 minutos (3 meses)en caché, es VIEJO, por lo que se descarga nuevamente. Sino...
Si el factor de última modificación es mayor que 100% (eso es imposible para este caso), se descarga nuevamente. Sino...
Si el objeto tiene menos de 3 meses en caché, NO se descarga, se usa el que está cacheado. Sino, se descarga.
'''Aclaratoria:''' Estos objetos se mantendrán frescos el 100% de su tiempo de vida promedio (el tiempo promedio que pasa entre una solicitud y otra).
# Imagenes
refresh_pattern -i \.gif$ 14400 80% 28800
refresh_pattern -i \.tiff?$ 14400 80% 28800
refresh_pattern -i \.bmp$ 14400 80% 28800
refresh_pattern -i \.jpe?g$ 14400 80% 28800
Si el objeto no expiró, se pasa a la siguiente etapa.
Si el objeto tiene más de 28800 minutos (20 dias)en caché, es VIEJO, por lo que se descarga nuevamente. Sino...
Si el factor de última modificación es mayor que 80%, se descarga nuevamente. Sino...
Si el objeto tiene menos de 10 días (14400) en caché, NO se descarga, se usa el que está cacheado. Sino, se descarga.
Verificar Archivo squid.conf
Para chequear las reglas y/o parámetros en squid.conf, y de esta manera ver los errores que existen en el Archivo de Configuración squid.conf antes de reiniciar el Servicio del mismo, se utiliza el siguiente Comando:
# squid -k parse
Referencias
http://www.tutoriales-ubuntu.com/archives/configurar-un-proxy-transparente-con-squid
http://www.esdebian.org/foro/46455/iptables-squid-3-transparente
http://www.ubuntu-es.org/node/165928
http://www.tuxjm.net/docs/Manual_de_Instalacion_de_Servidor_Proxy_Web_con_Ubuntu_Server_y_Squid/html-multiples/index.html
http://www.alcancelibre.org/staticpages/index.php?page=19-4-como-squid-tiempo
http://www.redesymas.org/2011/07/configuracion-de-iptables-firewall-en.html
http://www.pello.info/filez/firewall/iptables.html
http://www.adslayuda.com/Linux-iptables_lan.html
http://www.linuxparatodos.net//web/comunidad/base-de-conocimiento/-/wiki/Base%20de%20Conocimiento/Servidor+Proxy
http://servidordebian.wikidot.com/squeeze-es:intranet-ssl-cert-self-signed
http://www.visolve.com/system_services/opensource/squid/squid30/network.php#sslproxy_client_key
http://www.rahulpahade.com/content/squid-transparent-proxy-over-ssl-https
http://www.sebest.com.ar/?q=node/55
http://thebitdeveloper.com/2010/02/12/instalacion-y-configuracion-de-squid3/
http://www.akadia.com/services/ssh_test_certificate.html
http://wiki.cayu.com.ar/doku.php?id=manuales:servidor_squid
http://www.taringa.net/posts/linux/8448270.R/Servidor-Firewall-en-Linux-_IPTABLES_.html
https://www.arin.net/
http://www.ecualug.org/2008/07/24/comos/optimizar_squid_delays_pools_squish?page=1
http://www.esdebian.org/foro/42775/configurarar-optimamente-squid
http://www.taringa.net/posts/linux/15866058/Squid-a-fondo---editado.html
http://octavio.gnu.org.ve/squid-3-2-4-smp-en-debian-squeeze/
http://wiki.xtech.com.ar/index.php/Proxy
http://eduangi.com/2009/04/04/limpiar-memoria-en-linux/
@jomarore
Comentarios
Publicar un comentario