anonymize_log_ip.sh

Quellcode herunterladen

Name

Script name: anonymize_log_ip
Author: Anton Daudrich
Company: ADMIN INTELLIGENCE GmbH
Version: v1.0
Release date: 2018-06-13

Beschreibung

Script um IPs in logfiles zu anonymisieren.

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!
For more infos on our services please visit www.admin-box.de
    
  

Changelog

    
v1.0 2018-06-13 initial release
    
  

Installation/Voraussetzungen

Abhängigkeiten

gzip gunzip
bc grep find sed

Dokumentation

Arbeitsweise

  • Das Script sucht mit find die angegebenen logfiles, und checkt ihr Alter mit stat -c %Y
  • Falls die Logfiles komprimiert sind, entpackt das Script sie mit gunzip
  • Mittels 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. als cronjob.

Scriptausgabe wird gelogt nach LOG="/tmp/${PROGNAME}.log"

Fehler werden gelogt 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 WARNING
  • Wenn das Script vorzeitig beendet oder abgebrochen wird, oder interne Fehler entstehen, ist der default_exit_code=3 UNKNOWN

Perfdata

Dieses Script generiert keine Perfdaten.


Beispielausgabe

LOG="/tmp/${PROGNAME}.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/.
#
#############################
    
  
Quellcode herunterladen

Feedback

Haben Sie Fragen zu diesem Script oder Plugin?
Sie möchten Verbesserungsvorschläge einbringen oder haben Fehler gefunden?
Kontaktieren Sie uns gerne!

Kontaktformular