Categoría: Webmasters > 3

Es importante saber cómo bloquear el acceso a determinados usuarios o robots, ya que muchos de estos pueden intentar atacar tu servidor, sobrecargándolo con peticiones (Ataque DOS), o usando tus formularios de contacto o de envío de comentarios, para llenarte el correo o la web de spam.


Crawler robot, bot

Existe un archivo de configuración de apache, llamado .htaccess, donde puedes emitir una serie de ordenes determinadas al servidor. Entre ellas está la posibilidad de permitir o no permitir el acceso a tu web.

Usarlo es muy sencillo, tan solo crea un archivo nuevo, sin extensión, ponle de nombre .htaccess y sitúalo en el lugar donde se encuentra el index o la página principal de tu web.

Existen varias formas de denegar el acceso, dependiendo de la situación:



Bloquear IP


Si estás seguro que una dirección IP está "molestando" debes añadir en el fichero .htaccess las siguientes líneas, sustituyendo evidentemente, 64.56.65.44 por la IP que quieras bloquear.


#Bloquear IP
order allow,deny
deny from 64.56.65.44
allow from all

Para bloquear más de una IP, tan solo añade otra línea con deny from y una nueva IP:


#Bloquear IP
order allow,deny
deny from 64.56.65.44
deny from 38.100.41.113
allow from all

Nota: Ten mucho cuidado al bloquear una IP, muchas veces robots como googlebot u otros buscadores, llegan a realizar bastantes peticiones en nuestro servidor por lo que puedes llegar a confundirlos con bots maliciosos y bloquearlos por error.

Asegúrate antes, siempre puedes comprobar una IP en Whois para ver de donde proviene.




Bloquear Agente


Existen determinadas situaciones donde un robot malicioso puede acceder desde diferentes IPs, pero siempre usa el mismo agente de conexión.

En mi caso, por poner un ejemplo, me di cuenta de que un bot que se identificaba como larbin, realizaba un numero elevadísimo de peticiones (Llamadas al servidor) en apenas unos segundos, por lo que lo bloqueé de la siguiente manera:


#Bloquear Agente
rewriteEngine on
rewriteCond %{HTTP_USER_AGENT} ^larbin
rewriteRule .* - [F]

De este modo cada vez que el bot larbin intente acceder a mi web, le aparecerá un error 403 (Prohibido).

Para bloquear más de uno, escribe [OR] detrás del nombre del último agente y otra línea con el nombre del nuevo agente:


#Bloquear Agente
rewriteEngine on
rewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
rewriteCond %{HTTP_USER_AGENT} ^shelob
rewriteRule .* - [F]



Bloquear Referer


Del mismo modo, es posible denegar el acceso a bots que proceden desde un determinado sitio web:


#Bloquear Referer
rewriteEngine on
rewriteCond %{HTTP_REFERER} ^http(s)?://(www.)?webmaliciosa.com*$
rewriteRule .* - [F]

En este caso, todas las visitas que vengan desde webmaliciosa.com, por poner un ejemplo, se les prohibirá el acceso.

Nota: Para bloquear más de un referer, haz exactamente lo mismo que al bloquear un agente.




Bloquear por Paises


Imaginemos la posibilidad de que estés recibiendo bastantes visitas de un determinado país, por ejemplo "España" y no te interese, ya que tu web o tu negocio no está orientado España.

Existe una solución para esto y es bloquear todas las IPs, o rangos de IP, posibles en el país que quieres denegar el acceso. Como evidentemente no conocemos cuáles son esos rangos, podemos hacer uso de una web que facilita la labor, Country IP Blocks.

Tan facil como acceder a la web, dirigirte a la parte derecha, elegir la opción .htaccess deny y seleccionar el país o los países (manteniendo pulsada la tecla Ctrl) que quieres bloquear. Ahora pulsa en "Choose Countries" y te generará las líneas que debes incluir en tu fichero .htaccess.

Por ejemplo, si indicas que quieres bloquear el acceso a usuarios españoles, aparecerá lo siguiente:


<Limit GET HEAD POST>
order allow,deny
# Country: SPAIN
# ISO Code: ES
# Total Networks: 531
# Total Subnets: 22,058,656
deny from 62.13.224.0/19
deny from 62.14.0.0/16
deny from 62.15.0.0/16
deny from 62.22.0.0/19
.
.
.
#
allow from all
</Limit>

En realidad aparece una lista de 531 rangos de IP, obviamente solo he puesto los 4 primeros para que se vea el ejemplo.

Nota: Eligiendo la opción .htaccess allow, haces lo contrario, permitir el acceso a un determinado país y bloquear todos los demás, ten cuidado con esto, ya que podrías llegar a bloquear también los bots de buscadores como Google, que accede a tu web desde EEUU.

Sitemap google

Como imagino que ya sabéis, Google hace uso de un protocolo sitemap en XML para poder informar a su robot de búsqueda a cerca de las paginas que se pueden rastrear en tu web, con qué frecuencia y la importancia que tiene para ti cada una de esas páginas.

Google nos indica como debe ser el formato del sitemap y nos explica para que sirve cada etiqueta.

Ejemplo de sitemap en XML:


<?xml version="1.0" encoding="UTF-8"?>

<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
<url>
<loc>http://www.example.com/</loc>
<lastmod>2005-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>

Tu sitemap debe ser algo parecido a este, solo debes adaptar a tu web las siguientes etiquetas:

  • loc: Url de la pagina que deseas añadir al sitemap.
  • lastmod: Fecha de la última modificación en formato W3C de fecha y hora o simplemente en formato: YYYY-MM-DD.
  • changefreq: Información acerca de cada cuanto tiempo cambia la pagina que indicaste en la etiqueta loc. (always, hourly, daily, weekly, monthly, yearly, never).
  • priority: Importancia para ti de esta página respecto a las demás de tu web, no afecta a tus paginas con respecto a otras webs. (los valores van desde 0,0 hasta 1,0).

Nota: En php, puedes obtener la fecha en ese formato con el siguiente código.

$lastmod = date ("Y-m-d");

Para cada url nueva que añadas al sitemap solo debes una colocar una nueva etiqueta URL y escribir el link y sus características en las etiquetas loc, lastmod, cangefreq y priority, tal como indiqué anteriormente.

Personalmente, antes usaba la página web xml-sitemap para generar mi sitemap, es una buena opción si no sabes usar PHP ni una base de datos para poder generar uno dinámico.




Sitemap Dinámico en PHP


Si tienes una web o un blog que actualizas con frecuencia, lo mejor es hacer un sitemap dinámico en PHP haciendo uso de una base de datos (en este caso MySql), a continuación pongo el código en PHP y XML y lo explicare brevemente:


<?
header
("Content-Type: text/xml; charset=UTF-8");

echo
'<?xml version="1.0" encoding="utf-8"?>';
?>

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<?
//Conexion Base de Datos
mysql_connect('localhost','Usuario','Password');
//Base de Datos Seleccionada
mysql_select_db('BaseDeDatos');

$result = mysql_query ("SELECT url, lastmod
FROM articulos ORDER BY fecha DESC"
);

while (
$row = mysql_fetch_array($result))
{
?>
<url>
<loc><? echo $row ['url']; ?></loc>
<lastmod><? echo $row ['lastmod']; ?></lastmod>
<changefreq>daily</changefreq>
<priority>0.50</priority>
</url>
<?
}

?>
</urlset>



La primera línea envía una cabecera que sirve para generar una página implementada en PHP como si fuera XML:

header("Content-Type: text/xml; charset=UTF-8");

Importante: Para poder llamar al archivo que contiene el sitemap con el nombre de sitemap.xml en lugar de sitemap.php debes añadir la siguiente línea en el archivo .htaccess, así el servidor lo que haría es interpretar .xml como si fuera .php.

AddType application/x-httpd-php .xml

Por si alguien no lo sabe, .htaccess es un archivo de configuración del servidor web apache. Y lo único que debes hacer es crearlo, escribir la línea anterior y colocarlo en tu web justo donde coloques sitemap.xml.




En las siguientes líneas se establece la conexión con la base de datos, sustituye Usuario, Contraseña y BaseDeDatos por tus datos.

Después se realiza una consulta en la base de datos que devuelve todas las Urls de la tabla articulos y su última modificación. Obviamente debes haber guardado estos datos anteriormente en una tabla de tu base de datos con campos similares.

Por último con un bucle while recorremos todas las Urls e imprimimos mediante XML las etiquetas correspondientes.

Nota: Las etiquetas changefreq y priority las puedes dejar todas tal cual o añadirle una condición que dependa, por ejemplo, de la fecha del artículo, cuanto más viejo sea el articulo menor valor le asignas a priority, y en ese caso changefreq en vez de daily podría ser weekly o monthly.

Si todo ah salido bien, ya tienes tu sitemap dinámico funcionando, deberia reflejar algo parecido a esto: Sitemap, si tienes alguna duda puedes dejar un comentario.




Subir el sitemap a Google


Si no lo has hecho ya, regístrate en herramientas para webmasters de google o entra con tu cuenta de gmail. Una vez en tu cuenta de webmaster ve al apartado sitemap, escribe la url donde se encuentra tu sitemap y pulsa en enviar, ahora solo espera unas horas hasta que google lo descargue.