Geolocalización en tu página web o blog

3 comentarios · 716 lecturas · manuales

Geolocalización es la palabra que designa la acción de informar la posición y localización geográfica de un determinado (en el caso que hablamos) visitante de una web.

geolocalizacion localizacion nacion pais ciudad geoip

En el siguiente manual voy a escribir una guía de pasos para dotar de soporte de geolocalización (de forma totalmente gratuita) un servidor web, y así utilizar esta información de manera sencilla y eficiente.

Así podremos guardar información acerca de la localización de los usuarios que han comentado, que han subido una foto, e incluso combinarlo con mod_rewrite y realizar redirecciones dependiendo de su pais, etc.

Requisitos previos


Para preparar el sistema de geolocalización nos vamos a basar en un servidor Apache (de la rama 2.x) bajo un sistema operativo Linux, en nuestro caso un CentOS. También necesitaremos soporte PHP y herramientas de compilación, que por lo general ya vienen instaladas en todo servidor Linux.

En este manual vamos a utilizar la base de datos de MaxMind, que incorpora GeoLite City una base de información de paises y ciudades, que además provee varios métodos de uso:

  • Formato CSV: Formato de texto plano, separado por comas, que puede utilizarse para desarrollar una aplicación de búsqueda y resolución de IPs, o por otra parte, importar en una base de datos SQL, para crear un sistema de consulta.
  • Formato binario: Un formato binario generado por MaxMind, mucho más eficiente y rápido, que permite hacer consultas de manera más ligera. El formato binario permite la manipulación con una API open source para diferentes lenguajes (PHP, C, Java, Perl, Python, C#, Pascal, Ruby...).

En este manual vamos a ir un poco más allá y compilaremos el código para utilizarlo como módulo de Apache, y ganar en rapidez y eficiencia, teniendo a nuestra disposición unas variables GEOIP_COUNTRY_CODE y GEOIP_COUNTRY_NAME con la información disponibles para utilizar en nuestro código PHP directamente.

Descarga y preparación de ficheros


  1. En primer lugar, nos descargamos los fuentes del módulo mod_geoip2 para Apache (versión 1.2.1 en estos momentos). Lo desempaquetamos con un tar -xzvf mod_geoip2_1.2.1.tar.gz y accedemos a la carpeta creada.
  2. También nos descargaremos la última API de GeoIP para C (1.4.4 en estos momentos), ya que se necesita para generar el módulo mod_geoip2 para Apache. Desempaquetamos entonces, con un tar -xzvf GeoIP.tar.gz y accedemos a la carpeta creada.

Compilación de la API para C


¡Ojo! Antes de compilar el módulo de Apache, necesitaremos esta segunda API (para C) instalada en nuestro sistema. Para ello, escribimos el mantra de compilación ./configure, make y finalmente, realizamos la instalación con un make install.

Esto habrá generado unas cabeceras en nuestra carpeta /usr/local/include, entre otros que nos permitirán compilar el módulo de Apache sin problemas.

Asi pues, salimos de la carpeta actual cd .., volviendo a la carpeta de las fuentes del mod_geoip2. Aquí escribiremos apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c. La utilidad apxs (APache eXtenSion tool) se encargará de compilar el modulo e instalarlo en su ubicación correspondiente (generalmente /usr/lib/httpd/modules/). Incluso, dará los permisos adecuados e insertará la linea en el fichero de configuración de Apache.

No obstante, puedes comprobar que, ha sido insertada, en el fichero /etc/httpd/httpd.conf o similar:

LoadModule geoip_module modules/mod_geoip.so

Configuración del módulo mod_geoip2


En el anterior fichero de configuración, podemos añadir una linea Include mod_geoip.conf para crear un fichero mod_geoip.conf donde ubicar la información básica para hacer funcionar el módulo:

# mod_geoip2 configuration file

GeoIPEnable On
GeoIPDBFile /usr/local/share/GeoIP/GeoLiteCity.dat

GeoIPEnableUTF8 On
GeoIPOutput Env
#GeoIPOutput Notes
#GeoIPOutput All

Remarcar que esta configuración básica activa el módulo con nuestra base binaria GeoLiteCity.dat (~16MB) que tendremos que colocar en la ruta /usr/local/share/GeoIP. En la directiva GeoIPDBFile se pueden establecer varias bases con distinto nombre, para utilizar según necesidades de memoria, situación, etc.

Por último, existen dos formas de proporcionar información geolocalizable desde Apache, a través de variables de entorno (Environment) activando GeoIPOutput a Env o a través del comando apache_note de PHP. La primera es más cómoda, así que activamos sólo esta, y desactivamos las demás para ahorro de recursos, aunque si se desea se pueden activar las dos con All.

Ejemplo final


Finalmente, tenemos el sistema de geolocalización instalado y nos proporciona información adicional desde PHP, mediante el array asociativo SERVER, por ejemplo $_SERVER['GEOIP_CITY']:

Variable Valor
GEOIP_CONTINENT_CODEEU
GEOIP_COUNTRY_CODEES
GEOIP_COUNTRY_NAMESpain
GEOIP_REGION29
GEOIP_CITYMadrid
GEOIP_DMA_CODE0
GEOIP_AREA_CODE0
GEOIP_LATITUDE40.400002
GEOIP_LONGITUDE-3.683300

Como extra, en ip-to-country existen varios comprimidos de diferente tamaño, con un conjunto de banderas, ordenadas por su código de pais, que pueden servir para colocar imagen en nuestro código PHP.

Otros sistemas de Geolocalización


Si conoces alguno, mencionalo en los comentarios para añadirlo:


Manual para descargar con Bittorrent

12 comentarios · 11.162 lecturas · manuales

BitTorrent es un protocolo que se ha diseñado para intercambiar ficheros por internet y entra en la categoría de programas P2P. Su principal ventaja es que es una de las aplicaciones P2P más rápidas en descargar, mientras que su desventaja es que la búsqueda no viene integrada, y por lo tanto hay que utilizar buscadores o páginas webs de torrents.

bitcomet bittorrent

Si tu preferencia es descargar a alta velocidad, continua leyendo. En cambio, si lo que prefieres es buscar algo con comodidad, te recomiendo leer el manual de configuración para el emule.

Para empezar, existen muchos programas (llamados clientes) para descargar mediante el protocolo BitTorrent: Azureus, BitTornado, BitSpirit, uTorrent, etc. Este manual se va a centrar en (bajo mi criterio) uno de los mejores clientes de BitTorrent: BitComet.

Accedemos a la página oficial de BitComet y en download descargamos el instalador de BitComet (pulsando en Download now.).

Una vez finalizada la descarga, hacemos doble clic y comenzamos a instalar BitComet. Aceptamos los acuerdos y nos aparecerá una ventana para seleccionar que queremos instalar.

bitcomet bittorrent setup

BitComet trae la opción de instalar un gestor de descarga para los navegadores, que permite descargar con BitTorrent ficheros vía web, puedes instalarlo si lo crees conveniente. Para mayor simplicidad, recomiendo hacer doble clic en Browser extensions y desmarcar este complemento si no tienes mucha soltura en internet.

Finalizamos la instalación y hacemos doble clic en el icono de BitComet. Si usamos WinXP, pulsamos desbloquear para permitir conexiones a través del Firewall de Windows. Nos aparecerá una ventana similar a la siguiente, donde iremos al menú y pulsaremos Options / Language y seleccionamos Spanish.

bitcomet bittorrent app

Habremos terminado el primer paso de instalación del tutorial.

Configuración del BitComet


Vamos al menú Opciones / Preferencias.

Conexión

Si no sabes que conexión tienes, puedes probar con un test de velocidad llamado SpeakEasy. Para usarlo, cierra todos los programas que puedan estar descargando información de internet y marca una de las opciones en Choose a server. Esto te dará la velocidad de bajada (download speed) y la velocidad de subida (upload speed) de tu conexión, que tendremos en cuenta para usar en el siguiente punto.

Los resultados obtenidos los dividimos entre 8. Por ejemplo, si obtenemos 1900kbps de bajada en el test: 1900 / 8 = 237,5 y este valor (sin decimales) es el que colocaremos en Velocidad máxima de descarga (global). Hacemos lo mismo con lo obtenido en el test referente a la subida.

Hay que tener en cuenta que habría que reducir un poco el número ya que una línea telefónica rara vez va al 100% de su rendimiento teórico.

También podríamos dejar los campos en Sin limite pero es poco recomendable si ademas queremos navegar por webs, charlar por MSN, etc... Por ello, lo mejor es reducir un poco los valores.

El siguiente paso (muy importante también) es el Puerto de escucha. Al igual que pasa con la venda de emule y el lowid, en BitTorrent necesitamos preparar un puerto para agilizar las descargas.

En la zona inferior-derecha de nuestro BitComet veremos una bolita. Si está verde, es que la conexión es correcta. Si está en amarillo es que hay un problema de conexión, hay que solucionarlo, para ello recomiendo buscar tu router en la zona inferior-izquierda de ADSLZone para abrir un puerto TCP/UDP y colocarlo en Puerto de escucha.

bitcomet bittorrent puerto

Tarea

En el apartado de Descarga seleccionamos la carpeta donde vamos a guardar las descargas. BitTorrent funciona como antiguamente lo hacía KaZaA. Si ponemos a descargar algo, antes de descargarlo completamente, BitComet creará un archivo que ocupará lo mismo que el fichero descargado completamente. Por lo tanto, necesitaremos espacio libre en disco.

Marcamos la opción Iniciar tareas automáticamente al iniciar BitComet.

Avanzado / TCP-IP Limit

En nuestro Windows XP, las conexiones máximas simultaneas están restringidas. En la casilla New Half-Open Limit tendremos un 10 por defecto. Sería recomendable aumentarlo a 100 y mantener activada la casilla Disable the system file protection.

Hemos terminado el proceso de configuración. Ahora sólo queda saber como descargar torrents.

Descargar un torrent


BitTorrent tiene dos características muy especiales:

  1. No tiene buscador integrado. Para descargar algo, hay que buscarlo en alguna página desde el navegador.
  2. Necesita un torrent. BitTorrent no descarga directamente. Hay que buscar un fichero llamado torrent, y abrirlo desde el programa para comenzar a descargar.

Existen varias formas de buscar algún contenido:

  1. Mediante una web especializada en torrents. Hay muchas y muy variadas, por ejemplo Mininova.
  2. Mediante Google escribiendo lo que queremos buscar junto a filetype:torrent.

Veamos un ejemplo, queremos descargar Ubuntu linux:

  1. Accedemos a Mininova y buscamos Ubuntu.
  2. Pulsamos sobre el resultado elegido que queremos descargar. Por ejemplo Ubuntu Linux i386.
  3. Pulsamos sobre Download this torrent.

Esto descargará un fichero que podemos abrir (y a su vez se abrirá sólo desde BitComet), o desde el menú de BitComet, pulsar en Archivo / Abrir torrent... y seleccionar el fichero que acabamos de descargar.

Listo. Ya sabemos utilizar BitTorrent. Si te interesa aprender a configurar otro programa P2P, también puedes echar un ojo a este manual de emule.


Reducir uso de CPU y memoria del servidor

11 comentarios · 4.593 lecturas · manuales

¡OJO! Probablemente este artículo sólo te interese si tienes un servidor donde alojas algún blog o sitio web.

Antes de comenzar, debemos tener claros una serie de conceptos que vamos a manejar bastante en este manual. Si ya los conoces, puedes saltártelos:

  • Referer o referido: Es la página de donde procede el visitante. Te reporta sitios desde donde se accede a tu página (buscadores -con las palabras clave que buscó-, foros -donde te citaron-, blogs -que te han mencionado-, etc...).
  • Requests o peticiones. Se llama así a cada uno de los accesos a ficheros de tu página (imagenes, páginas, descargas, etc...). Es importante darse cuenta de que una petición a una página conlleva varias peticiones asociadas a todas las imagenes y otros recursos que la componen (siempre que estén dentro de tu servidor).

Sistema anti-hotlink


La primera solución en estos casos es recurrir a un sistema anti-hotlink: Evitar que usen las imágenes de nuestro servidor en otras páginas. En la mayoría de los sitios proponen un código donde bloquear todas las páginas excepto una lista blanca que crearemos. Sin embargo, esta solución no me agrada demasiado.

Armonth se acerca más a lo que considero mi sistema anti-hotlink ideal: un código donde no bloquear ninguna página salvo las de una lista negra.

# Sistema anti hotlink
RewriteCond %{HTTP_REFERER} \.wordpress\.com [OR]
RewriteCond %{HTTP_REFERER} \.myspace\.com [OR]
RewriteCond %{HTTP_REFERER} \.spaces\.live\.com [OR]
RewriteCond %{HTTP_REFERER} \.blogcindario\.com [OR]
RewriteCond %{HTTP_REFERER} \.blogspot\.com [OR]
RewriteCond %{HTTP_REFERER} youtube\.com [OR]
RewriteCond %{HTTP_REFERER} blogger\.com [OR]
RewriteCond %{HTTP_REFERER} livejournal\.com [OR]
RewriteCond %{HTTP_REFERER} miarroba\.com [OR]
RewriteCond %{HTTP_REFERER} showthread\. [OR,NC]
RewriteCond %{HTTP_REFERER} viewtopic\. [NC]
RewriteRule \.(jpg|gif|png)$ /img/hotlink.png [L]

El único defecto es el no proteger del enlazado en foros, así que le añadí showthread y viewtopic, nombre de variables bastante comunes en foros.

Es importante también que no tengamos ningún foro en nuestra página. Si lo tenemos, tendríamos que incluirlo en una lista blanca, para no bloquear imágenes en nuestro sitio.

Bots/Agentes masivos


Muchas veces existen bots o usuarios que realizan demasiadas peticiones, a veces inconscientemente, otras veces hasta con ánimo de provocar una denegación de servicio. En Robots.txt, todo lo que debería saber y .htaccess, bloqueando a la fuerza tienen dos completos manuales con información sobre como bloquear usuarios perjudiciales.

denied access bots crawlers

Verificar bots en una Lista negra


En muchas ocasiones, podemos comprobar si ciertas IPs pertenecen a bots spammers conocidos, y si estos están en algún tipo de lista negra. Por ejemplo, la IP 195.225.177.136 realizaba muchas peticiones en mi servidor. Comprobando la IP en DomainTools vemos que está incluida en la lista negra de spam. Podemos estar seguros de bloquearla.

Formularios


La mayoría de los bots spammers tienen una especial tendencia a sentirse atraídos por los formularios. Especialmente en los comentarios y trackbacks, para hacer publicidad. Muchos, incluso, pueden intentar acceder a formularios que no existen en tu sitio web (sistemas automatizados buscando vulnerabilidades):

grep "POST" access.log | cut -d" " -f6-7 | sort | uniq -c | sort -n

Esta secuencia de comandos te muestra el número de peticiones en las que se hace un POST (comentarios, envío de emails, etc...). Podemos fijarnos, y si vemos algo raro comprobar.

Bots sin/con WWW


Un truco bastante interesante es el siguiente. En mi caso, la dirección principal del blog es www.emezeta.com. Si intentamos acceder a emezeta.com seremos redireccionados al primero. Bien, podemos aprovechar esta característica para descubrir a nuestros «enemigos».

bots blocked

Muchos bots adquieren el nombre del dominio y comienzan a realizar peticiones, incluyendo en su referer la dirección de nuestra página web (en mi caso, sin www) para despistar. Si somos despiertos, nos habremos dado cuenta que es imposible que vengamos de una dirección sin www puesto que habíamos redireccionado.

SetEnvIfNoCase Referer "http://emezeta\.com" bad_bot
deny from env=bad_bot

Solo tendremos que bloquear los referer sin www, como muestra este código.

Esta técnica es bastante efectiva. A mi me ha reducido el spam en un gran porcentaje.

Anti Hotlink para Google Images


La forma en la que Google ha diseñado la búsqueda de imágenes, tiene una característica que puede perjudicar mucho a algunos servidores. No sólo está el problema del hotlink (del que hablamos antes), sino que cuando accedemos a una imagen, nos muestra un marco superior con una miniatura de la imagen, mientras que en el marco inferior se carga la página que la contiene.

La mayoría de los usuarios ni siquiera miran esa página, pero deben pasar por ahí para llegar a la imagen. En Customize Google (extensión para firefox) ya lo pensaron y modifican la página si usas la extensión.

Si a esto añadimos que nos posicionamos en la primera página y primera imagen para búsquedas como perros o Lindsay Lohan, la saturación se puede llegar a notar bastante en servidores pequeños.

Si no nos interesa la indexación de imagenes de nuestro sitio, solo tenemos que bloquear al robot en nuestro robots.txt, pero si en lugar de eso, queremos que no se cargue la página del marco, sólo tenemos que incluir esto:

SetEnvIfNoCase Referer "http://images\.google\..*start" refblock
deny from env=refblock

start es una variable contador que Google incluye sólo en la página intermedia del marco (y no en las finales) y que utilizaremos para bloquear. Luego, si queremos redireccionar a nuestra página principal, en lugar de acceder a la imagen:

RewriteCond %{HTTP_REFERER} ^http://images\.google\. [NC]
RewriteRule \.(jpg|gif|png)$ http://www.pagina.com/ [L]

O bloquearla también:

RewriteCond %{HTTP_REFERER} ^http://images\.google\. [NC]
RewriteRule .* - [F]

Reducir el número de peticiones por página


Otro sistema, también bastante efectivo es el de reducir el número de elementos a cargar en la página principal de un sitio, por ejemplo. Si la página principal de un blog, contiene 45 imagenes (aunque sean iconos) y esta página tiene 7.000 peticiones a su página principal, se van a producir ¡315.000 peticiones diarias!. Todo ello sin contar ficheros CSS, javascript y demás.

cut -d" " -f7 access.log | sort | uniq -c | sort -n

Con esta secuencia de comandos obtendremos la lista de peticiones de ficheros. Prestar mayor atención a aquellos con mayor número de peticiones. Una buena optimización puede mejorar mucho el rendimiento del servidor.

Intentar solucionar las peticiones erroneas


Finalmente, y análogo al caso anterior. Sería bueno intentar solucionar las peticiones erróneas que se producen en nuestro servidor. Una gran mayoría son debidas a problemas externos de buscadores, usuarios que enlazan mal en foros o similares. Pero también puede darse el caso de que nosotros hayamos cometido algún error.

cut -d":" -f4 error.log | cut -d"," -f1 | sort | uniq -c | sort -n

htaccess: Bloqueando a la fuerza

9 comentarios · 3.667 lecturas · manuales

El último día hablaba sobre las recomendaciones para robots y crawlers mediante el robots.txt. Este sistema es un conjunto de indicaciones para que los crawlers no se «pierdan» y sepan en todo momento por donde pueden y deben ir.

¿Qué es lo que ocurre? Que cualquier persona me puede indicar que debo y que no debo tocar en su casa, pero en todo momento yo tengo la opción de hacerlo, aunque no deba. De eso vamos a tratar en este artículo, ¿Que ocurre si llega un crawler «listillo» que pasa olímpicamente de las recomendaciones que le hemos hecho? Pues que lo echamos a patadas de nuestra casa... ;)

Existe un fichero en los servidores web Apache (la mayoría de los servidores), llamado .htaccess, en el que puedes incluir información de control para dictar al servidor que hacer con tus visitantes y otro tipo de acciones.

htaccess crawlers block

Lo primero que necesitamos es un sistema de estadísticas o mejor aún, acceso a nuestro fichero access.log, registro donde se guardan todos los accesos a nuestro servidor. En Dreamhost, el servidor donde tengo alojado mi blog (y uno de los más famosos), tiene acceso SSH/FTP y puedes ver sin ningún problema a estos registros.

Bien con un sistema de estadísticas, o con nuestro fichero access.log, nos interesa observar los accesos por petición (request), navegador o agente (user agent) o por ip. Desde una consola SSH podemos conseguir un listado de las IPs que más peticiones realizan:

tail -10000 access.log | awk '{print $1}' | sort | uniq -c |sort -n

Esta secuencia de comandos nos muestra las últimas 10.000 llamadas a nuestro servidor, agrupándolas por IPs y mostrando el número de peticiones realizado.

Esto nos servirá para tener una idea de que crawlers, robots o usuarios pueden estar sobrecargando nuestro servidor con demasiadas peticiones. Existe un programa bastante útil que yo utilizo para analizar los access.log, llamado Apache Log Viewer. La única y «minúscula» pega es que está en japonés.

  84 63.161.169.137
  85 crawl-66-249-67-236.googlebot.com
  91 81.177.8.166

Este no es un ejemplo real, pero imaginemos que esos son los resultados obtenidos. Tendríamos 84 peticiones de la IP que figura a su derecha. Si vamos a Inicio / Ejecutar / cmd y escribir nslookup IP podremos obtener el DNS inverso y saber a que compañía pertenece, o investigar un poco más con un analizador de logs o estadísticas y ver que accesos ha hecho.

¡Ojo! Que haga muchas peticiones no significa que sea un robot malvado. Puede que se trate de nuestro más fiel visitante o nuestro querido buscador de Google. Mucho cuidado con bloquear IPs sin pensarselo.

En mi caso resultó que la IP 81.177.8.166 realizaba bastantes peticiones, e investigando un poco más pude ver que eran a antiguos ficheros de un formulario que ya no existían. Probablemente un robot spam que sigue torpemente intentando enviar comentarios de SPAM, generando peticiones inútiles.

Si tenemos dudas la mejor opción es hacer un Whois y si nos parece que está realizando un ataque, enviar una queja al email de abuse del ISP que muestra en el whois.

block crawler robots

Bloqueando por IPs


Si estamos completamente seguros de que la IP que hemos encontrado en nuestros logs nos está realizando ataques DoS o algún tipo de sobrecarga de peticiones, vamos a bloquearla. Para ello tenemos que editar el fichero .htaccess en la carpeta raíz de nuestro sitio vía SSH o FTP y escribir o modificar su contenido añadiendo:

Order allow, deny
Deny from 81.177.8.166
Allow from all

Y no solo bloquear IPs, sino también rangos de IPs mediante sus clases: Deny from 81.0.0.0/8. Esto también es aplicable a crawlers que hemos añadido en el robots.txt y vemos días o semanas después (ojo, a veces no leen el robots.txt instantáneamente) que no hacen caso. Ahora toca que hagan caso a la fuerza mostrando un código de error 403 (prohibido) en lugar de lo que esperaban.

Bloqueando con SetEnvIfNoCase


Se nos plantea otra dificultad. Los robots que acceden ahora nunca tienen la misma IP, siempre son totalmente diferentes y sin relación:

  • Bot 1: Su agente de usuario no varía, es Malvadobot/2.0.
  • Bot 2: No tiene nunca el mismo agente de usuario, ni IP, pero accede siempre al fichero /sendemail.php, que no existe.
  • Bot 3: Ninguno de los anteriores criterios es fijo, salvo que viene siempre (Referer) de la página http://www.spammers.com/.

¿Cómo los bloqueamos?

SetEnvIfNoCase User-Agent "Malvadobot/" spambot
SetEnvIfNoCase Request_URI "/sendemail.php$" spambot
SetEnvIfNoCase Referer "^http://www.spammers.com/" spambot
deny from env=spambot

Con este código estamos identificando los criterios de los tres bots anteriores para asignarles una variable llamada spambot si casa con los criterios, y que si es así, bloqueará.

Bloqueando con ModRewrite


Existe otra alternativa para bloquear, que necesita el módulo mod_rewrite, y aunque se utiliza para reescribir direcciones, nos puede venir bastante bien para bloquear. Lo he dejado para el final, puesto que creo que es la alternativa más costoso en términos de computación, con respecto a los métodos anteriores.

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^Malvadobot/.* [NC]
RewriteCond %{REQUEST_FILENAME} ^/sendemail.php$ [NC]
RewriteCond %{HTTP_REFERER} ^http://www.spammers.com/.* [NC]
RewriteRule .* - [F]

En primer lugar activamos el motor del ModRewrite, y usamos los tres casos anteriores como condiciones con el RewriteCond. En caso de ser afirmativa, reescribimos mostrando un error 403, o también podemos usar un error 410 (Eliminado permanentemente) escribiendo [G] en lugar de [F]. En la página de documentación de ModRewrite hay mucha información para profundizar.

Ahora ya sabemos como bloquear. Hay que usarlo con mucho cuidado para no bloquear a usuarios legítimos y perder visitas.


Páginas: 1 ... 2 3 4 5 ... 9


Artículo de http://www.emezeta.com/

6 consultas efectuadas / Página generada en 0.212 segundos

Programado íntegramente por José Román (Manz) en XHTML y CSS estándar.

Sindicado bajo Feed RSS. Contenido bajo licencia Creative Commons

Estadísticas de visitas · Términos y condiciones · Contacto · Publicidad · Preguntas frecuentes (FAQ)