Linux Januar 2012/apache log

From Teknologisk videncenter
Jump to: navigation, search

Der ønskes oversigter over hvem der anvender/misbruger adgangen til en Apache WEB-server. Log filen vi anvender under udvikling af opgaven er en lille kopi af den rigtige logfil og hedder /var/log/httpd-access.log

Der er to sites installeret på serveren hvor denne logfil kommer fra. mediawiki og mrbs. Det er kun opslag til mediawiki sitet der skal rapporteres.

Rapporten skal ende med at indeholde

  • En liste over de 50 mest anvendte IP adresser (Hvor mange gange IP adressen optræder i filen) - Sorteret med mest flittige IP adresser øverst. Så er rapporten nemmere at læse.
  • Domænenavnet til IP adressen.

Eksempel på Rapport

HTTP Access rapport fra mars.tekkom.dk
======================================

Rapporten genereret: Fri Aug 28 07:09:13 CEST 2009

------------------------------------------------------------------------------------
Data opsamlet er fra perioden den 26 Aug 2009 22:21:13 til den 28 Aug 2009 06:40:07
------------------------------------------------------------------------------------
 806 192.168.146.155 ()
 508 87.56.15.130 (0x57380f82.vgnqu2.dynamic.dsl.tele.dk.)
 306 77.212.13.52 (0x4dd40d34.adsl.cybercity.dk.)
 301 195.181.54.128 (pixuv.eucmidt.dk.)
 .......

At komme igang

Det drejer sig om at tænke projektet igennem og bryde det ned til mange små overskuelige opgaver. Se på rapportens oplysninger og arbejd med en lille del af gangen. Lav et kommentarområde i dit script hvor du skriver de fejl og mangler der er. Brug ikke for meget tid på at løse et lille problem. For eksempel fjernelse af mellemrum, karakterer i rapporten. Det kan man altid gøre senere.

interessante utilities

  • dig DNS opslag. Her er flaget -x interessant da det laver reverse DNS opslag.
    • Prøv evt dig -x 213.174.68.45 | grep PTR | grep -v -E '^;' | tr ' \t' ' '|cut -d' ' -f5
  • sort - sortere linier
  • uniq - finde ens linier efter hinanden. Se evt flaget -c
  • head - Se første linier en fil fx. head -n 1 FILNAVN viser den første linie i en fil
  • tail - Se sidste linier i en fil fx. tail -n 1 FILNAVN viser sidste linie i en fil

Hjælp hinanden

At programmere er meget nemmere hvis man arbejder sammen. Så skriv dine spørgsmål, forslag og ideer her i artiklen. Good Luck Henrik Thomsen Mail evt Henrik Thomsen

Løsnings forslag

Smid jeres løsnings forslag her under

Forslag #1

  • Lavet af Kristian (mr)Andersen og Kris Simonsen
#!/bin/bash
FILE=/var/log/apache2/access.log; 
extip=`wget -q -O - checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`

daystart=`head -n 1 $FILE |cut -d ' ' -f 4  | cut -c2-12 | tr '/' ' '`;
timestart=`head -n 1 $FILE |cut -d ' ' -f 4  | cut -c14-21 | tr '/' ' '`;
dayend=`tail -n 1 $FILE |cut -d ' ' -f 4  | cut -c2-12 | tr '/' ' '`;
timeend=`tail -n 1 $FILE |cut -d ' ' -f 4  | cut -c14-21 | tr '/' ' '`;

echo "==============================================="
echo -e "[ HTTP Access rapport for $extip Granat ]"
echo "==============================================="
echo -e " \t`date`\n"

echo "==============================================="
echo -e "\tDate collecting period"
echo "==============================================="

echo -e "\t[ Start Time/Date ] \t[ Untill ]"
echo -e "\t$daystart\t\t$dayend"
echo -e "\t$timestart\t\t$timeend\n"

for ip in `cat $FILE |cut -d ' ' -f 1 | sort |uniq -c | sort -rn`;
        do { COUNT=`grep ^$ip $FILE |wc -l`; HOST=`dig -x $ip | grep  PTR | grep -v -E '^;' | tr ' \t' ' '|cut -d' ' -f5`;
                if [[ "$COUNT" -gt "1" ]];then echo -e "$COUNT: \t$ip \t($HOST)";
fi };
done
echo -e "\n"