{"id":732,"date":"2015-01-06T16:11:19","date_gmt":"2015-01-06T14:11:19","guid":{"rendered":"http:\/\/www.mediamill.de\/blog\/?p=732"},"modified":"2014-12-30T02:11:47","modified_gmt":"2014-12-30T00:11:47","slug":"anonymisieren-von-ip-adressen-in-einer-apache-log-datei-mithilfe-von-sed","status":"publish","type":"post","link":"https:\/\/www.mediamill.de\/blog\/2015\/01\/06\/anonymisieren-von-ip-adressen-in-einer-apache-log-datei-mithilfe-von-sed\/","title":{"rendered":"Anonymisieren von IP-Adressen in einer Apache Log Datei mithilfe von sed"},"content":{"rendered":"<p><strong>Ziel:<\/strong> Man m\u00f6chte die IP-Adressen in einer Apache Logdatei anonymisieren, indem man das letzte Byte oder die zwei letzten Byte der IP-Adresse durch 0 ersetzt.<\/p>\n<p><strong>L\u00f6sungsm\u00f6glichkeit:<\/strong> Zeilenweises Durchsuchen der Logdatei mit dem Unix Werkzeug\u00a0<em>sed<\/em>. Suchen der IP-Adressen und Ersetzen der Fundstellen mit der anonymiserten IP-Adresse.<br \/>\nZ. B. soll die IP-Adresse 123.123.<strong>123.123<\/strong> durch die Adresse 123.123<strong>.0.0<\/strong> ersetzt werden.<\/p>\n<p>Dazu kann man folgenden Einzeiler verwenden:<\/p>\n<pre class=\"brush:shell\">sed -i -e 's\/\\([0-9]\\{1,3\\}\\)\\.\\([0-9]\\{1,3\\}\\)\\.\\([0-9]\\{1,3\\}\\)\\.\\([0-9]\\{1,3\\}\\)\/\\1\\.\\2\\.0\\.0\/' access_log_ssl.log<\/pre>\n<p>Hier der Versuch einer Erkl\u00e4rung, ohne zu tief auf die regul\u00e4ren Ausdr\u00fccke, die in dem <em>sed<\/em>-Skript verwendet werden, einzugehen.<\/p>\n<p>Vereinfacht sieht das <em>sed<\/em>-Skript wie folgt aus:<\/p>\n<pre class=\"brush:shell\">sed -i -e 's\/SUCHMUSTER\/ERSETZUNG\/g' access_log.log<\/pre>\n<p><strong>-e<\/strong> = Parameter der angibt, dass ein <em>sed<\/em>-Script folgt<br \/>\n<strong>&#8217;s\/SUCHMUSTER\/ERSETZUNG\/g&#8216;<\/strong> = <em>sed<\/em>-Skript<br \/>\n<strong>SUCHMUSTER<\/strong> = Muster, nach dem gesucht werden soll<br \/>\n<strong style=\"line-height: 1.714285714; font-size: 1rem;\">ERSETZUNG<\/strong><span style=\"line-height: 1.714285714; font-size: 1rem;\"> = Text, mit dem das Suchmuster ersetzt werden soll<br \/>\n<\/span><strong>access_log.log<\/strong> = Eingabedatei<br \/>\n<strong>-i<\/strong> = Inplace Bearbeitung &#8211; die \u00c4nderungen werden direkt an der Eingabedatei ausgef\u00fchrt<\/p>\n<p>Sollen die \u00c4nderungen in einer Kopie gespeichert werden, dann wird <em>sed<\/em> ohne den -i Parameter benutzt und die Ausgabe in eine neue Datei umgeleitet.<\/p>\n<pre class=\"brush:shell\">sed -e 's\/SUCHMUSTER\/ERSETZUNG\/g' access_log.log &gt; bearbeitet.log<\/pre>\n<p>In diesem Fall bleibt die Eingabedatei unver\u00e4ndert und die \u00c4nderungen werden in der Datei <em>bearbeitet.log<\/em> gepeichert.<\/p>\n<p>Jetzt zu dem konkreten Beispiel:<\/p>\n<p>Der besseren Lesbarkeit halber wurden die vielen Maskierungen mit dem Zeichen \\ entfernt. Diese werden aber in dem eigentlichen <em>sed<\/em>-Skript ben\u00f6tigt.<\/p>\n<p>Hier das Suchmuster in unserem <em>sed<\/em>-Skript:<\/p>\n<pre class=\"brush:shell\">([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})<\/pre>\n<p><strong>[0-9]<\/strong> = Die Zeichen 0-9, also 0123456789  werden an dieser Stelle gesucht<br \/>\n<strong>{1,3}<\/strong> = Die Zeichen [0-9] m\u00fcssen 1 bis 3 mal auftreten<br \/>\n<strong>([0-9]{1,3})<\/strong> = Die Klammern kennzeichnen eine Einheit in dem Suchmuster, auf die anschlie\u00dfend beim Ersetzten zugegriffen werden kann<br \/>\n<strong>([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})<\/strong> = Das Muster muss vier Mal, getrennt duch einen Punkt, hintereinander auftreten.<\/p>\n<p>Damit hat man aber keine hundertprozentige Sicherheit, dass nur g\u00fcltige IPv4 Adressen von dem Suchmuster gefunden werden. Ung\u00fcltige Adressen wie z.B. 999.999.999.999 w\u00fcrden duch das Suchmuster auch gefunden.<br \/>\nF\u00fcr unseren Anwendungsfall reicht das vereinfachte Suchmuster aber vollkommen aus.<\/p>\n<p>Jetzt zu dem ersetzen Teil des <em>sed<\/em>-Skripts. Auch hier sind die Maskierungen durch das Zeichen \\ weggelassen.<\/p>\n<pre class=\"brush:shell\">\\1.\\2.0.0<\/pre>\n<p><strong>\\1<\/strong> = Die erste mit Klammern definierte Einheit im Suchmuster<br \/>\n<strong>\\2<\/strong> = Die zweite mit Klammern definierte Einheit im Suchmuster; analog dazu k\u00f6nnte man noch \\3 und \\4 f\u00fcr die dritte und vierte Einheit im Suchmuster benutzen. \\1.\\2.\\3.\\4 w\u00fcrde die urspr\u00fcngliche IP unver\u00e4ndert ausgeben.<br \/>\n<strong>0<\/strong> = Die Ziffer 0<\/p>\n<p>Der Ersetzen-Teil des <em>sed<\/em>-Skripts bedeutet also, dass eine gefundene IP-Adresse mit ihren ersten zwei Bytes und mit einer Null als drittes und viertes Byte ersetzt werden sollen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ziel: Man m\u00f6chte die IP-Adressen in einer Apache Logdatei anonymisieren, indem man das letzte Byte oder die zwei letzten Byte der IP-Adresse durch 0 ersetzt. L\u00f6sungsm\u00f6glichkeit: Zeilenweises Durchsuchen der Logdatei mit dem Unix Werkzeug\u00a0sed. Suchen der IP-Adressen und Ersetzen der Fundstellen mit der anonymiserten IP-Adresse. Z. B. soll die IP-Adresse 123.123.123.123 durch die Adresse 123.123.0.0 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,10,11,52,28,17,16,29,7],"tags":[],"class_list":["post-732","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-apache","category-apache2","category-bash","category-bash-snippets","category-regex","category-regulaere-ausdruecke","category-textbearbeitung","category-unix-befehle"],"_links":{"self":[{"href":"https:\/\/www.mediamill.de\/blog\/wp-json\/wp\/v2\/posts\/732","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mediamill.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mediamill.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mediamill.de\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mediamill.de\/blog\/wp-json\/wp\/v2\/comments?post=732"}],"version-history":[{"count":8,"href":"https:\/\/www.mediamill.de\/blog\/wp-json\/wp\/v2\/posts\/732\/revisions"}],"predecessor-version":[{"id":1045,"href":"https:\/\/www.mediamill.de\/blog\/wp-json\/wp\/v2\/posts\/732\/revisions\/1045"}],"wp:attachment":[{"href":"https:\/\/www.mediamill.de\/blog\/wp-json\/wp\/v2\/media?parent=732"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mediamill.de\/blog\/wp-json\/wp\/v2\/categories?post=732"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mediamill.de\/blog\/wp-json\/wp\/v2\/tags?post=732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}