GoAccess ist ein quelloffener Echtzeit-Web-Log-Analysator und interaktiver Betrachter, der im Browser oder in einem Terminal auf Linux und Unix-Systemen läuft.
Er eignet sich sehr gut für eine schnelle Umsetzung einer Log-Dateien-Ansicht und ersetzt nicht die Empfehlung, alle Ereignisse zentral zu erfassen und dort automatisiert zum Beispiel Anomalien finden zu lassen. GoAccess lässt sich jedoch schnell einsetzen, da es (fast) alle Log-Datei-Arten der üblichen Webserver unterstützt und es ganz ohne weitere Abhängigkeiten gebaut werden kann, wenn man will.
GoAccess, vor allem wenn es nur Zugangslogs und keine Fehlerlogs anzeigt und das auch nur zur händischen Auswertung, ist eine Insellösung. Um wirklich zu wissen, was unternehmensweit vorgeht, sollte es eine zentral erfasste Auswertung mit automatisch ausgelösten Warnungen geben. So lässt sich auch über eine Anomaliedetektion erkennen (naja, im Idealfall), ob zum Beispiel das Unternehmen gerade ausgespäht wird.
Subdomains und Unterzeichnisse mit kryptischen Namen sind kein starkes Sicherheitsmerkmal. Sie können aber eine automatisierte Erkundungsphase erschweren, auf die ein Angriff folgen könnte. Viele Spähtools fragen einfach nach einer Wortliste die Namensserver und Webserver ab, um Subdomains und Unterverzeichnisse zu erraten.
logs.example.com data
).Unter https://goaccess.io/download den aktuellen Quellcode (auf den Webserver) herunterladen und bauen (x.x.x ersetzen mit der aktuellen Version):
wget https://tar.goaccess.io/goaccess-x.x.x.tar.gz
tar -xzf goaccess-x.x.x.tar.gz
cd goaccess-x.x.x/
./configure --enable-utf8 --enable-geoip=legacy
make
mv goaccess ~/bin/ga-x.x.x
cp config/goaccess.conf ~/etc
cd ~/bin
ln -s ga-x.x.x goaccess
Ich verzichte bewusst auf ein make install.
Nun noch mit dem Editor der Wahl die ~/etc/goaccess.conf
bearbeiten: Nach “log-format VCOMBINED” suchen und ent-kommentieren ("#" entfernen) und den Titel ändern.
Damit alles sauber getrennt ist, bietet es sich an, einen eigenen Ordner anzulegen für die Logs. Eine Subdomain logs.example.com könnte dann auf diesem Ordner laufen.
cd ~/domains/logs.example.com
htpasswd -cB .logs.pass logs
<sicheres Passwort eingeben>
# gegebenfalls chmod, chown o.ä.
Pfade lassen sich mit pwd -P
herausfinden.
~/domains/logs.example.com/.htaccess:
AuthType Basic
AuthName "restricted login"
AuthUserFile /pfad/zu/.logs.pass
Require valid-user
~/domains/logs.example.com/logs/.htaccess:
AuthType Basic
AuthName "restricted login"
AuthUserFile /pfad/zu/.logs.pass
Require user logs
# Das ist optional:
Options +Indexes
IndexOptions FancyIndexing
IndexOptions FoldersFirst
IndexOptions NameWidth=*
Je nach Konfiguration werden die Logs auf eine bestimmte Art und Weise rotiert und gelöscht. Ich gehe hier jetzt von 7 Tagen aus mit einer Logdatei für jeden Tag. Sollte es eine Logdatei für alle 7 Tage geben, muss diese Datei in –log-file stehen.
Die Datei ~/bin/generate_statistics.sh erstellen:
#!/usr/bin/sh
outdir_base=/Ausgabepfad/zu/den/logs
date_str_dir=$(date "+%Y")
outdir=$outdir_base/$date_str_dir
date_str_file=$(date "+%Y-%W--%Y-%m-%d")
out_file=$outdir/$date_str_file.html
mailto=mail@example.com
web_base=https://logs.example.com/logs
if [ ! -d $outdir ]; then
echo Creating $outdir...
mkdir $outdir
fi
$HOME/bin/gaaccess --agent-list --config-file $HOME/etc/goaccess.conf --log-file <(cat $/Pfad/zu/den/webserver/logs/webserver/access_log*) --output $out_file
echo "Neues Log: $web_base/$date_str_dir/$date_str_file.html" | mail -s "example.com Log: $date_str_file" $mailto
Immer sonntags nachts die Datei erstellen und den Link versenden:
crontab -e
50 23 * * 0 $HOME/bin/generate_statistics.sh >/dev/null 2>&1