Heute möchte ich Euch ein Script vorstellen um IP Adressen in Apache logfiles zu anonymisieren. Ich habe es Mitte 2018 zur Einführung der DSGVO auf Kundenanfrage hin geschrieben, und es ist seitdem produktiv im Einsatz.
Name
Script name: anonymize_log_ip.sh
Author: Anton Daudrich
Company: ADMIN INTELLIGENCE GmbH
Version: v1.0
Release date: 2018-06-13
Hilfe
*********************************
anonymize_log_ip
*********************************
Script for anonymizing IPs in logfiles
Usage: anonymize_log_ip.sh -f {logfile} -age {days} (-e {exclude})
arguments:
-f --file {logfile}
(default: /var/log/apache2/*.log*)
-age {days} to keep IPs in logfiles
(default: 7)
Note: set to 0 to disable age check
optional arguments:
-e {string} exclude one or more strings from search
Note: use -e before each string
-h --help shows this help message
-V --version prints version and release info
--debug verbose debug infos on console
***********************************************************************
Thank you for using this script!
Changelog
v1.0 2018-06-13 initial release
Paketabhängigkeiten / Voraussetzungen
gzip gunzip bc grep find sed
Dokumentation
Arbeitsweise
- Das Script sucht mit
find
die angegebenen logfiles, und checkt ihr Alter mitstat -c %Y
- Falls die Logfiles komprimiert sind, entpackt das Script sie mit
gunzip
. - Mit
sed
werden alle IP-Adressen mit xxx.xxx.xxx ersetzt. - Falls das Logfile komprimiert war, wird es nachher wieder mit
gzip
komprimiert. - Dieses Script beeinflusst die Funktionalität von
logrotate
nicht, und wird zusätzlich dazu eingesetzt, z.B. alscronjob
Scriptausgabe wird protokolliert nach LOG="/tmp/${PROGNAME}.log"
Fehler werden protokolliert nach ERR_LOG="/tmp/${PROGNAME}.error.log"
mit Timestamp timestamp_log=$(date "+%F %T")
(kann im Quellcode angepasst werden)
Kommandozeilenparameter
-f {filename}
logfile name (default: /var/log/apache2/*.log*
)
Dieser Parameter wird an find
übergeben, und benutzt dieselbe Syntax für Wildcards bzw regex. Siehe man find
.
--age {number}
Alter in Tagen, nachdem die Logfiles anonymisiert werden. (default: 7)
Wert 0 benutzen, um den age-Check zu deaktivieren und alle Logfiles zu anonymisieren.
-e {exclude_string}
Einen bestimmten String (logfile name, folder, etc) von der Suche ausschließen.
Auche mehrere -e
Parameter möglich.
Exit Codes
Nagios-kompatible exit codes: 0=OK;1=WARNING;2=CRITICAL;3=UNKNOWN
default exit code: 3=UNKNOWN
- Bei erfolgreichem Durchlauf wird das Script immer mit
exit_code=0
beendet, unabhängig davon ob Logfiles anonymisiert wurden oder nicht. - Falls das Script keine Logfiles mit den angegebenen Parametern findet, ist der
exit_code=1
- Wenn das Script vorzeitig beendet oder abgebrochen wird, oder interne Fehler entstehen, ist der
default_exit_code=3
Perfdata
Dieses Script generiert keine Perfdaten.
Beispielausgabe
LOG="/tmp/anonymize_log_ip.log"
2018-06-13 16:18:26 START anonymize_log_ip.sh
2018-06-13 16:18:26 search for logfiles: /admin-box/tmp/*.log*
2018-06-13 16:18:26 anonymizing IPs in files older than 7 days:
2018-06-13 16:18:26 processed file: /admin-box/tmp/access.log.10.gz
2018-06-13 16:18:26 processed file: /admin-box/tmp/access.log.11.gz
2018-06-13 16:18:26 processed file: /admin-box/tmp/access.log.12.gz
2018-06-13 16:18:27 processed file: /admin-box/tmp/access.log.9.gz
2018-06-13 16:18:27 processed file: /admin-box/tmp/error.log.10.gz
2018-06-13 16:18:27 processed file: /admin-box/tmp/error.log.11.gz
2018-06-13 16:18:27 processed file: /admin-box/tmp/error.log.12.gz
2018-06-13 16:18:28 processed file: /admin-box/tmp/error.log.9.gz
2018-06-13 16:18:28 processed file: /admin-box/tmp/other_vhosts_access.log.10.gz
2018-06-13 16:18:28 processed file: /admin-box/tmp/other_vhosts_access.log.11.gz
2018-06-13 16:18:29 processed file: /admin-box/tmp/other_vhosts_access.log.12.gz
2018-06-13 16:18:31 processed file: /admin-box/tmp/other_vhosts_access.log.9.gz
2018-06-13 16:18:31 END anonymize_log_ip.sh with exit_code 0
Anwendungsbeispiele
Um DSGVO-Anforderungen zu erfüllen, hat uns ein Kunde gebeten dieses Script zu entwickeln. Man hätte es alternativ auch in der prerotate
-Anweisung im logrotate
lösen können, jedoch wollte der Kunde die rotation
weiterhin auf daily
belassen, aber erst nach 7 Tagen die IPs anonymisieren.
Download
#############################
### Copyright and License ###
#############################
#
# Copyright (C) 2018 Anton Daudrich
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with this program.
# If not, see http://www.gnu.org/licenses/.
#
#############################
Ähnliche Themen:
Wie Ihr einen Apache Webserver gegen 404 Angriffe absichern könnt, erfahrt Ihr in diesem Blogeintrag.
- Postfix Email relay über Office 365 - 6. März 2020
- Mehrere VMs automatisch zurücksetzen - 11. Oktober 2019
- Hurra, die ADMIN INTELLIGENCE App ist da! - 11. September 2019