Leggendo i log ho scoperto...

... che molti SPAM-bot che inviano commenti e trackback di SPAM si affidano alla libreria Jakarta.
Con qualche riga nell'.htaccess è possibile alleggerire notevolmente il carico della vostra installazione di MovableType, impedendo l'accesso ai crawler.

# Block some user agents from posting TBs and CMs
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^(Jakarta\sCommons\-HttpClient) [NC]
RewriteCond %{REQUEST_METHOD} ^POST$
RewriteRule (.*) - [F,L]

... il bot di BlogBabel continua a macinare post, con una frequenza di almeno 1 volta ogni 3 ore.

[weppos]$ grep 'blogbabel' access.log
212.35.215.114 - - [26/May/2008:02:28:12 -0700] "GET /blog/index.xml HTTP/1.1" 302 546 "-" "BlogBabel +http://it.blogbabel.com/"
212.35.215.114 - - [26/May/2008:04:25:07 -0700] "GET /blog/index.xml HTTP/1.1" 302 546 "-" "BlogBabel +http://it.blogbabel.com/"
212.35.215.114 - - [26/May/2008:06:28:52 -0700] "GET /blog/index.xml HTTP/1.1" 302 546 "-" "BlogBabel +http://it.blogbabel.com/"
212.35.215.114 - - [26/May/2008:08:32:02 -0700] "GET /blog/index.xml HTTP/1.1" 302 546 "-" "BlogBabel +http://it.blogbabel.com/"
212.35.215.114 - - [26/May/2008:12:28:26 -0700] "GET /blog/index.xml HTTP/1.1" 302 546 "-" "BlogBabel +http://it.blogbabel.com/"

... che mentre pensavo a questo post, in meno di due ore, l'idea numero 1 ha fermato 1399 commenti/trackback di SPAM.

[weppos]$ grep 'Jakarta Commons-HttpClient' -c access.log
1399

... che quando ho eseguito l'upgrade di MovableType, ho scordato di inserire un redirect 301 e quindi ho perso tutte le posizioni sui motori di ricerca acquisite grazie ai tag ed alle categorie!

82.146.52.98 - - [26/May/2008:11:59:39 -0700] "POST /mt/mt-search.cgi?tag=trackback&blog_id=1 HTTP/1.1" 404 589 "-" "-"
209.85.238.12 - - [26/May/2008:12:05:30 -0700] "GET /mt/mt-search.cgi?tag=trenitalia HTTP/1.1" 404 587 "-" "Feedfetcher-Google; (+http://www.google.com/feedfetcher.html)"
209.85.238.12 - - [26/May/2008:12:24:12 -0700] "GET /mt/mt-search.cgi?tag=chuck%20norris&Template=feed&IncludeBlogs=1 HTTP/1.1" 404 587 "-" "Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=988241075584828268)"

Meglio tardi che mai, ora c'è un bellissimo RedirectMatch.

# Old versions redirect
RedirectMatch 301 ^/mt/(.*) /mt4/$1

... la scorsa settimana è passato a trovarmi Robozilla. In totale, in un anno Robozilla ha controllato lo status del mio sito 3 volte. Dite che è un po' poco?

[weppos]$ zgrep 'Robozilla' access.log.*.gz
access.log.2007-08-11.gz:207.200.81.166 - - [11/Aug/2007:15:37:00 -0700] "GET /blog/ HTTP/1.0" 200 12292 "http://directory.mozilla.org" "Robozilla/1.0"
access.log.2007-12-13.gz:207.200.81.166 - - [13/Dec/2007:01:36:25 -0800] "GET /blog/ HTTP/1.0" 200 10733 "http://directory.mozilla.org" "Robozilla/1.0"
access.log.2008-05-14.gz:207.200.81.166 - - [14/May/2008:17:18:19 -0700] "GET /blog/ HTTP/1.0" 200 11559 "http://directory.mozilla.org" "Robozilla/1.0"

... in totale le righe di log accumulate in un anno per questo sito corrispondono a 7.229.578. Il giorno che ha generato più log è stato 2007-06-18.gz (40620), il giorno con meno log il 2007-12-25 (11400).

Volete scoprirlo anche voi? Create un file log_total_lines.rb e piazzateci dentro il seguente script Ruby

<pre <pre class="code-ruby">>#!/usr/bin/env ruby -wKU

log_pattern = ARGV.shift || (raise ‘Missing search pattern’) log_files_with_nof_lines = %x(zgrep ‘HTTP/’ -c #{log_pattern}).split(“\n”)

puts “Found #{log_files_with_nof_lines.length} log files matching pattern #{log_pattern}:”

total = log_files_with_nof_lines.inject(0) do |sum, line| log_file, nof_lines = line.split(‘:’) sum + nof_lines.to_i end puts “Total nof log lines: #{total}”</pre>

poi eseguitelo da shell

[weppos]$ ruby log_total_lines.rb "access.log.*.gz"
Found 365 log files matching pattern access.log.*.gz:
Total nof log lines: 7229578

Per conoscere invece i log con maggiore/minore righe create un file log_sort_lines.rb con il seguente script.

<pre <pre class="code-ruby">>#!/usr/bin/env ruby -wKU

log_pattern = ARGV.shift || (raise ‘Missing search pattern’) log_files_with_nof_lines = %x(zgrep ‘HTTP/’ -c #{log_pattern}).split(“\n”)

puts “Found #{log_files_with_nof_lines.length} log files matching pattern #{log_pattern}:”

log_files = log_files_with_nof_lines.collect do |line| log_file, nof_lines = line.split(‘:’) [nof_lines.to_i, log_file] end.sort { |a,b| a.first <=> b.first }

puts “Log with the lowest nof lines: #{log_files.first.inspect}” puts “Log with the highest nof lines: #{log_files.last.inspect}”</pre>

ed eseguitelo

[weppos]$ ruby log_sort_lines.rb "access.log.*.gz"
Found 365 log files matching pattern access.log.*.gz:
Log with the lowest nof lines: [11400, "access.log.2007-12-25.gz"]
Log with the highest nof lines: [40620, "access.log.2007-06-18.gz"]

Quante cose che si scoprono dai log. E voi ogni tanto li leggete?