Spam en el access log de Apache?

Desde hace un tiempo estoy viendo en el log de apache unas entradas que no entiendo. Son de este tipo:

XXX.XXX.XXX.XXX – – [13/Mar/2010:14:22:21 +0100] “GET /http://www.gothic-jewellery.co.uk/articles/http://www.gothic-jewellery.co.uk/fring-v3-voip-in-your-mobil/http://www.gothic-jewellery.co.uk/ HTTP/1.1” 302 511 “-” “-”
XXX.XXX.XXX.XXX – – [13/Mar/2010:14:49:56 +0100] “GET /thewill2diet.infoarticles/thewill2diet.infofring-v3-voip-in-your-mobil/thewill2diet.info HTTP/1.1” 302 511 “-” “-”
XXX.XXX.XXX.XXX – – [13/Mar/2010:15:31:26 +0100] “GET /ebookfile.infoarticles/ebookfile.infofring-v3-voip-in-your-mobil/ebookfile.info HTTP/1.1” 302 511 “-” “-”
XXX.XXX.XXX.XXX – – [13/Mar/2010:16:27:00 +0100] “GET /wrestlemania26.infoarticles/wrestlemania26.infofring-v3-voip-in-your-mobil/wrestlemania26.info HTTP/1.1” 302 511 “-” “-”

Si limpiamos la basura, queda algo como:

XXX.XXX.XXX.XXX – – [13/Mar/2010:14:22:21 +0100] “GET /articles/fring-v3-voip-in-your-mobil/ HTTP/1.1” 302 511 “-” “-”
XXX.XXX.XXX.XXX – – [13/Mar/2010:14:49:56 +0100] “GET /articles/fring-v3-voip-in-your-mobil/ HTTP/1.1” 302 511 “-” “-”
XXX.XXX.XXX.XXX – – [13/Mar/2010:15:31:26 +0100] “GET /articles/fring-v3-voip-in-your-mobil/ HTTP/1.1” 302 511 “-” “-”
XXX.XXX.XXX.XXX – – [13/Mar/2010:16:27:00 +0100] “GET /articles/fring-v3-voip-in-your-mobil/ HTTP/1.1” 302 511 “-” “-”

Que sí son entradas legítimas del blog.Me imagino que será una especie de spam. No dejan user-agent ni referer. Las ips están incluidas en algunas listas de spam pero no en todas. Y parece que es lo que hace Moreoverbot o Radia6 Crawler. No sé cuál es el efecto de recibir este tipo de peticiones y no sé que criterio usar en google para encontrar más información. Podría ir bloqueando en el firewall cada ip pero como no son muchas por el momento seguiré investigando.

Etags

Los Etags son un mecanismo para que los servidores webs y los navegadores determinen si la copia del compomente que reside en la cache del navegador coincide con la original en el servidor ( con componentes nos referimos a componentes de una página web: imágenes, scripts, hojas de estilo, etc.) Los Etags fueron añadidos como herramienta más flexible para validar elementos que la fecha de last-modified (ultima modificación). El servidor especifica el Etag del componente usando la cabecera de respuesta ETAg.

HTTP/1.1 200 OK
Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
ETag: “10c24bc-4ab-457e1c1f”
Content-Length: 12195

Después, si el navegador tiene que validar el componente, usa la cabecera If-None-Match para responder al servidor. Si los ETags concuerdan un codigo 304 es devuelto, reduciendo por ejemplo en este caso la respuesta en 12195 bytes.

GET /i/yahoo.gif HTTP/1.1
Host: us.yimg.com
If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
If-None-Match: “10c24bc-4ab-457e1c1f”
HTTP/1.1 304 Not Modified

El problema de los ETags es que normalmente se definen a partir de atributos que los hacen únicos para el servidor específico que aloja la página. Los Etags no concordarán cuando el navegador descarga el componente original de un servidor y luego intenta validarlo contra otro, como puede ocurrir en entornos en los que se balancea la carga entre varios servidores. Por defecto, tanto Apache como IIS incrustan datos in el Etag que reducen dramáticamente las probabilidades de que los Etags coincidan en entornos multiservidor.

El formato de ETag para Apache 1.3 y 2.x is inode-size-timestamp. Aunque un fichero pueda residir en el mismo directorio en múltiples servidores, y tengan el mismo tamaño, permisos, timestamp,etc., su número de iniod es diferente de un servidor a otro.

IIS 5.0 y 6.0 tienen un problema parecido con los ETags. El formato de los ETags en IIS es Filetimestamp. ChangeNumber. Un ChangeNumber is un contador usado para registrar cambios de configuración en IIS. Es muy poco probable que el ChangeNumber sea el mismo en varios servidores que sirvan la misma página.

El resultado final es que los Etags generados por Apache o IIS para el mismo componente no concordará de un servidor a otro. Si los Etags no concuerdan, el usuario no recibirá la rápida respuesta 304, que es para lo que los ETags están diseñados. En lugar de esto, recibirán un código de respuesta 200 junto con todo el componente. Si estás alojando tu web en sólo un servidor no es un problema. Pero si tienes varios servidores sirviendo el contenido tendrán un mayor consumo de ancho de banda, los proxies no cachearan tu contenido y el usuario final notará las páginas más lentas. Incluso si los compomentes tienen una cabecera Expires mucho tiempo adelante (futuro) un GET condicional se hará cada vez que se pulse Reload o Refresh.

Si no estás obteniendo ninguna mejora por el uso de los Etags lo mejor es desactivar completamente su uso. La cabecera Last-Modified validará en base al timestamp del componente. Eliminando los Etags se reducirá el tamaño de las cabeceras HTTP tanto en la respuestas como en las peticiones. Para desactivarlas en IIS puedes mirar este artículo . En Apache, simplemente añadiendo esta línea al httpd.conf.

FileETag none

Traducción del artículo High Perfomance Web Sites: Rule 13 – Configure Etags .
Documentación apache Etags

Apache LogFormat

Este es un ejemplo de cómo configurar el  formato de los logs de apache ( definidos en la directiva LogFormat ). Proporciona mucha información extra e incluso en servidores con un gran volumen de tráfico sólo añade un poco de overhead, pero para la información que proporciona, merece la pena.

%V The server name according to the UseCanonicalName setting. Useful for virtual hosting servers.
# %h Remote host
# %l Remote logname (from identd, if supplied). This will return a dash unless mod_ident is
# present and IdentityCheck is set On.
# %u Remote user (from auth; may be bogus if return status (%s) is 401)
# %t Time the request was received (standard english format)
# %r First line of request
# %>s status. For requests that got internally redirected, this is the status of the *original*
# request --- %>s  for the last.
# %b Size of response in bytes, excluding HTTP headers. In CLF format, i.e.  a '-' rather than
# a 0 when no bytes are sent.
# %{Referer}i The contents of Foobar: header line(s) in the request sent to the server.
# %{User-Agent}i
# %{Foorbar}C The contents of cookie Foobar in the request sent to the server.
# %P The process ID of the child that serviced the request.
# %D The time taken to serve the request, in microseconds.
LogFormat "%V %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %P %D" vcombinedwithPD

SetEnvIf Request_URI "^/favicon.ico$" dontlog
SetEnvIf User-Agent ".*internal dummy connection.*" dontlog
CustomLog logs/access_log vcombinedwithPD env=!dontlog

He resaltado en negrita una opción que me parece muy interesante, %D, con la que puedes ver el tiempo que tarda Apache en servir cada petición.