LogWatch Apache / HTTP avec Virtual Host

De Wiki de Romain RUDIGER
Aller à : navigation, rechercher

Introduction

Après y avoir passé un petit moment le temps de comprendre comment fonctionne le logiciel, je suis arrivé à mes fins.

Logwatch 7.3.6 (05/19/07)


Le problème est au niveau du rapport http de logwatch qui ne contient pas le virtualhost pour lequel nous avons eu une erreur :

 Requests with error response codes
    400 Bad Request
       /w00tw00t.at.ISC.SANS.DFind:): 10 Time(s)
    403 Forbidden
       /: 9 Time(s)
       /DeviceDescription.xml: 1 Time(s)
    404 Not Found
       /robots.txt: 3 Time(s)
    408 Request Timeout
       null: 5 Time(s)

Modification

Voici mon format de log Apache :

 LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined

Le champ contenant le virtual host sera donc le premier.

Il faut modifier le script du service http, on le prend donc pour ensuite le modifier :

cp /usr/share/logwatch/scripts/services/http  /etc/logwatch/scripts/services/

Maintenant il suffit de modifier le code suivant :

577    if ( ($field{http_rc} >= 400) &&
578          !((defined $ignoreURLs) && ($field{url} =~ /$ignoreURLs/)) &&
579          !((defined $ignoreIPs) && ($field{client_ip} =~ /$ignoreIPs/)) ) {
580       my $fmt_url = $field{url};
581       if (length($field{url}) > 60) {
582          $fmt_url = substr($field{url},0,42) . " ... " .
583                     substr($field{url},-15,15);
584       }
585       $needs_exam{$field{http_rc}}{$fmt_url}++;
586    }

Pour :

577    if ( ($field{http_rc} >= 400) &&
578          !((defined $ignoreURLs) && ($field{url} =~ /$ignoreURLs/)) &&
579          !((defined $ignoreIPs) && ($field{client_ip} =~ /$ignoreIPs/)) ) {
580       my $fmt_url = $field{url};
581       if (length($field{url}) > 60) {
582          $fmt_url = substr($field{url},0,42) . " ... " .
583                     substr($field{url},-15,15);
584       }
585       my $vhost = $field{$log_fields[0]};
586       $vhost =~ s/\s+$//;
587       $fmt_url =~ s/^[[:alnum:]]/\ $&/;
588       $needs_exam{$field{http_rc}}{$vhost . $fmt_url}++;
589    }

Il faut également modifier le fichier de configuration du service http. On le copie :

cp /usr/share/logwatch/default.conf/services/http.conf /etc/logwatch/conf/services/

Modification de la variable LogFormat :

$LogFormat = "%{v} %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

Résultat / test

Voici le résultat qui est bien plus pratique :

 Requests with error response codes
    400 Bad Request
       default.novalan.fr:80/w00tw00t.at.ISC.SANS.DFind:): 10 Time(s)
    403 Forbidden
       default.novalan.fr:80/: 9 Time(s)
       default.novalan.fr:80/DeviceDescription.xml: 1 Time(s)
    404 Not Found
       bugs.novalan.fr:80/robots.txt: 3 Time(s)
    408 Request Timeout
       cryolithe.novalan.fr:3389 null: 5 Time(s)