{"id":22272,"date":"2026-02-03T21:58:18","date_gmt":"2026-02-03T20:58:18","guid":{"rendered":"https:\/\/linux-bibel.at\/?p=22272"},"modified":"2026-02-03T21:58:18","modified_gmt":"2026-02-03T20:58:18","slug":"das-web-log","status":"publish","type":"post","link":"https:\/\/linux-bibel.at\/index.php\/2026\/02\/03\/das-web-log\/","title":{"rendered":"Das Web-log"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\">Heute wollen wir uns ein bisschen mit dem WWW-Servern befassen. Man m\u00f6chte doch wissen, wer greift auf den Server zu und welche Seiten sind von besonderem Interesse.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nun jeder WWW-Server speichert alle Zugriffe und diese kann man auswerten. Ich nehme jetzt den Apache-Server als Beispiel heraus.Alle anderen speichern diese Daten \u00e4hnlich, selbst der MS-IIS.<\/p>\r\n\r\n\r\n\r\n<h1 class=\"wp-block-heading\">Und damit sollten wir ein paar Begriffe kennen.<\/h1>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Der Hit<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Jedes Element das vom Server geladen wir, wird als Hit bezeichnet. Eine HTML-Seite ist ein HIT, ein Bild ist auch ein Hit und auch eine Javascript-Datei oder CSS-Datei wird als Hit gespeichert. Auch Hintergrund-Musik wird als Hit bewertet. Man kann ihn also mit einem URL gleichsetzen. Jeder Hit bedingt auch einen URL.\u00a0 Auch die Bilder einer Webseite sind wiederum Hits.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Die Page<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Damit wird eine zusammengeh\u00f6rige Menge an Hits bezeichnet. Also das, was man so salopp gesagt lesen kann.\u00a0<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Der Request-Typ<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Hier wird angegeben, wie dieser Request abgearbeitet werden soll. Die bekanntesten sind GET und POST. Daneben gibt es noch PUT, DELETE und HEAD und noch ein paar weitere. Wer diese\u00a0 genau wissen will, der muss den RFC lesen. Ich m\u00f6chte an der Stelle nicht ins HTTP-Protokoll tiefer eingehen.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Der Referer\u00a0<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">In diesem Feld wird der Quell-Url gespeichert. Also jene Adresse von der aus der Hit auffordert wurde. Das kann durchaus ein anderer sein.\u00a0<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Das response-code<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Hier ist der Status, wie dieser Request abgehandelt wurde. wichtig sind die 2xx, 3xx, 4xx und 5xx Codes. <br \/>5xx Codes deuten auf einen Serverfehler hin (z.B. zu wenige Resourcen) . 4xx auf einen Handlingsfehler (Seite nicht gefunden, Anmeldug erforderlich). 2xx und 3xx sind Statusmeldungen.<\/p>\r\n<p>&nbsp;<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<h1 class=\"wp-block-heading\">Die Zeile in der Logdatei<\/h1>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">Eine solche Zeile schaut jetzt folgenderma\u00dfen aus.<\/p>\r\n<p>::1 &#8211; &#8211; [11\/Jan\/2026:18:17:08 +0100] &#8222;GET \/cgi-bin\/awstats.pl?databasebreak=hour&amp;month=01&amp;year=2026&amp;config=localhost&amp;framename=mainright HTTP\/1.1&#8220; 200 5689 &#8222;http:\/\/localhost\/cgi-bin\/awstats.pl?databasebreak=hour&amp;month=01&amp;year=2026&amp;output=osdetail&amp;config=localhost&amp;framename=mainleft&#8220; &#8222;Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/143.0.0.0 Safari\/537.36&#8220;<\/p>\r\n<p>&nbsp;<\/p>\r\n<p>Ihr findet die Beschreibung der einzelnen Felder und ihre Bedeutung unter diesem Link https:\/\/httpd.apache.org\/docs\/2.4\/logs.html\u00a0 Ich m\u00f6chte auf die Besonderheiten der Informationen eingehen und was man beim Auswerten beachten sollte.\u00a0<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<h1 class=\"wp-block-heading\">Wer viel misst, misst viel Mist.<\/h1>\r\n<p>\r\n\r\n<\/p>\r\n<p><span style=\"color: initial;font-size: revert\">Die IP-Adresse <\/span><span style=\"color: revert;font-size: revert;font-weight: revert\"> &#8222;<\/span><span style=\"font-size: revert;color: revert;font-weight: revert\">::1&#8243;<\/span><\/p>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">Die IP-Adresse oder der DNS-Name der hier gespeichert wird, ist die des letzten Absenders. Das muss nicht der Client sein. Es kann auch eine Firewall, ein Router oder ein NAT sein. Mit . getrennt deuten auf eine IPv4 Adresse. Ein : ist ein Zeichen f\u00fcr eine IPv6 Adresse. Dieses Feld wird gerne in den Auswertungen f\u00fcr &#8222;unterschiedliche Benutzer&#8220; herangezogen. Bedenkt, dass es nur bedingt richtig sein kann. Ihr alle habt wahrscheinlich einen Router\/Access Point zu Hause. Wenn Ihr \u00fcber diesen Access-Point ins Internet geht, dann sieht der Server nur die IP-Adresse des Routers nicht aber die eigentliche des Endger\u00e4tes. Der Server kann damit nicht unterscheiden ob, ihr vom Handy oder vom PC surft. Dies gilt sinngem\u00e4\u00df auch f\u00fcr SSL-Verbindungen. Allerdings in einem kleinerem Umfeld.\u00a0\u00a0<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<h2 class=\"wp-block-heading\">der User<\/h2>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">Diese n\u00e4chsten 2 Felder sind f\u00fcr die Identifizierung des Benutzers vorgesehen. Wobei das Feld 3 f\u00fcr die HTML-Identifizierung genutzt wird. Wir kommen sp\u00e4ter noch auf das Feld bei der &#8222;Anmeldung&#8220; zu sprechen.<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<h2 class=\"wp-block-heading\">der Request URL &#8222;GET \/cgi-bin &#8222;<\/h2>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">im URL Feld findest ihr neben den Typ auch den eigentlichem Url\u00a0 &#8222;\/cgi-bin\/awstats.pl&#8220; dann ein ? und diverse Begriff-Wert Paare getrennt durch ein &amp;. Den Abschluss macht die Version des HTTP-Protokolls. In meinem Fall 1.1. M\u00f6glich w\u00e4ren noch 1,0 und 2.0.\u00a0 Der URL \/cgi-bin sagt nichts \u00fcber den wirklichen Platz auf der Platte aus. Wer ein Verzeichnis \/cgi-bin bei mir sucht, wird entt\u00e4uscht sein. Es ist ein Konfigurationsparameter des Apache.\u00a0 Ich k\u00f6nnte jetzt eine zweite Seite nennen wir sie index.html auf den gleichen Path legen. und den Apache anweisen index.html meldest du mit \/cgi-bin\/index.html.\u00a0 \u00a0<br \/><br \/>In meinem Fall wird ein Programm aufgerufen das Programm awstats.pl.\u00a0 Awstats.pl ist ein Web-Logdateien Auswertungsprogramm; in Perl geschrieben.\u00a0 Das Programm soll den J\u00e4nner 2026\u00a0 auswerten.<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<h2 class=\"wp-block-heading\">Der Response Code\u00a0<\/h2>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">sagt aus wie der Request abgearbeitet wurde. 200 ist der OK Status. 303 w\u00e4re nicht ver\u00e4ndert oder 404 Datei nicht gefunden. Die 5xx w\u00e4re ein Server-Problem. Auch diese sind im RFC beschrieben.\u00a0<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<h2 class=\"wp-block-heading\">der User-Agent<\/h2>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">dieses Feld ist vorgesehen um Browser spezifische Unterscheidungen, durch zuf\u00fchren. Zu Beginn des WWW haben sich die Firmen Netscape und Microsoft eine Schlacht um die Marktanteile geliefert. Irgendwann gab Netscape auf und machte ein Open-Source-Projekt daraus. Heute findet man den Netscape-Nachfolger und die gebr\u00e4uchlichsten Browser . Ggf sind hier auch Informationen \u00fcber das Betriebssystem gespeichert. In meinem Bespiel X11 und Linux auf 64Bit x86 \ud83d\ude09<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<h2 class=\"wp-block-heading\">der Benutzer<\/h2>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">Diese Informationen stehen uns zur Verf\u00fcgung. Zus\u00e4tzlich, KANN uns noch ein User(name) mitgespeichert werden. Defaultm\u00e4\u00dfig wird nur der HTTP-User im Log gespeichert. Loginverfahren die \u00fcber Cookies, Request-ID oder \u00e4hnlichem arbeiten, werden nicht protokolliert. Weil somit nur die IP-Adresse als Unterscheidungsmerkmal zur Verf\u00fcgung steht, sind die Werte \u00fcber die Benutzeranzahl mit Vorsicht zu behandeln. <br \/><br \/>So wird das Log aufgebaut und diese Daten sind gespeichert. Nun geht es an das Auswerten.<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<h1 class=\"wp-block-heading\">Das Log-File<\/h1>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">Bei den beiden wichtigsten Servern Apache und NGINX wird eine Textdatei angelegt. Wir bleiben bei Apache und Debian und finden unser Log unter \/var\/log\/apache\/access.log. Dort wird es standardm\u00e4\u00dfig angelegt und in regelm\u00e4\u00dfigen Abst\u00e4nden getauscht und gezipped.<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<h1>Die Anmeldung\u00a0<\/h1>\r\n<p class=\"wp-block-paragraph\">Es gibt mehrere M\u00f6glichkeiten, wie ich einen User identifizieren kann. Die Einfachste ist \u00fcber eine &#8222;passwd&#8220;- Datei und eine Rule in der Apache-Config, dass ein bestimmter Bereich nur von einer Gruppe oder einzelnen User gelesen werden darf. Dabei wird bei jedem Request der User und das Passwort gesendet. Das Ganze wird noch mit dem alten Befehl md5 Verfahren gesichert. Einfach und schnell aber knackbar in Sekunden.\u00a0<\/p>\r\n<p>Ein bisschen besser wird es wenn man auf &#8222;digit&#8220; umstellt. <br \/>Aber wenn ich diesen Teil des Frame habe, kann ich ihn von einem anderem Ger\u00e4t senden und bin angemeldet. Bei diesem Verfahren \u00e4ndern sich die Werte nur wenn sich das Passwort \u00e4ndert, also nie.\u00a0\u00a0<\/p>\r\n<p>Dazu kommt, das gro\u00dfe Sites, die \u00fcber viele Server gehen, immer den gesamten Uservorrat speichern m\u00fcssen.\u00a0<\/p>\r\n<p>Also hat man sich eine andere Anmeldeform \u00fcberlegt. Und da kamen cookies und SessionID ins Spiel, ein Server erzeugt aus User und Passwort eine Pr\u00fcfsumme den Token oder SessionID und sendet diese an den Client. Bei jedem weiteren Request wird dieser Wert mitgesendet und der\/die Server k\u00f6nnen, es abpr\u00fcfen und entsprechend reagieren.\u00a0 Cookies haben den Nachteil, dass sie nur auf eine bestimmte Gruppe von Servern funktionen (Domain-Cookie).\u00a0<\/p>\r\n<p>Wenn man Kerberos mit der L\u00f6sung dieses Problems vertraut, dann kommt die SessionID zum Tragen. Bei der Anmeldung wird ein Token erstellt, der als SessionID gespeichert wird. Diese ID kann auch an andere Server weitergegeben werden und wird gegengecheckt. Nachteil: Ich brauche eine vern\u00fcnftige Infrastruktur.\u00a0 \u00a0 Sicherungsmechanismen wie &#8222;Salt and Pepper&#8220; sind implementierbar und auch Zertifikate kann ich verwenden.\u00a0<\/p>\r\n<p>Was ich noch kurz mitteilen m\u00f6chte ist, dass diese Daten im verschl\u00fcsseltem HTML-Teil \u00fcbertragen werden, Also bei HTTPS nicht einsehbar sind.\u00a0<\/p>\r\n<p>&nbsp;<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<h1 class=\"wp-block-heading\">WWW-Auswertungsprogramme<\/h1>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">\r\n\r\n<\/p>\r\n<h2 class=\"wp-block-heading\">Das Auswertungsprogramm AWSTAT<\/h2>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"1697\" height=\"966\" class=\"wp-image-22300\" style=\"width: 1024px\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2026\/01\/Statistics-for-localhost-2026-01-main-Brave_a001.png\" alt=\"\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2026\/01\/Statistics-for-localhost-2026-01-main-Brave_a001.png 1697w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2026\/01\/Statistics-for-localhost-2026-01-main-Brave_a001-1536x874.png 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2026\/01\/Statistics-for-localhost-2026-01-main-Brave_a001-150x85.png 150w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2026\/01\/Statistics-for-localhost-2026-01-main-Brave_a001-300x171.png 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2026\/01\/Statistics-for-localhost-2026-01-main-Brave_a001-768x437.png 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2026\/01\/Statistics-for-localhost-2026-01-main-Brave_a001-1024x583.png 1024w\" sizes=\"auto, (max-width: 1697px) 100vw, 1697px\" \/><\/p>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">Die Auswertung umfasst neben Tage, Monate, Besuche, Einstiegseiten, Ipadressen und Ausstiegsseiten auch Pages und Hits. Besonders die Auswertung auf Fehlercodes bringt so einiges an Versuchen von b\u00f6sen Jungs zum Vorschein.\u00a0\u00a0<\/p>\r\n<p>Das 2. Programm, dass ich euch vorstellen m\u00f6chte hei\u00dft<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<h2 class=\"wp-block-heading\">Das Programm webalizer<\/h2>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">und ist ein C-Programm. Es liegt in lauff\u00e4higer Form und im C-Code vor und kann von Heise geladen werden. <a href=\"https:\/\/www.heise.de\/download\/product\/webalizer-2038\">https:\/\/www.heise.de\/download\/product\/webalizer-2038<\/a> . Das Programm wird nicht mehr weiterentwickelt. Es gibt allerdings 2 Nachfolge-Projekte, die auch im Stocken sind. Der Leistungsumfang ist \u00e4hnlich.\u00a0<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"864\" height=\"796\" class=\"wp-image-22302\" style=\"width: 150px\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2026\/01\/Auswahl_009.png\" alt=\"\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2026\/01\/Auswahl_009.png 864w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2026\/01\/Auswahl_009-150x138.png 150w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2026\/01\/Auswahl_009-300x276.png 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2026\/01\/Auswahl_009-768x708.png 768w\" sizes=\"auto, (max-width: 864px) 100vw, 864px\" \/><\/p>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">Trotzdem sind beide Programme noch benutzbar und liefern wichtige Informationen \u00fcber die Nutzung eures Servers.\u00a0<\/p>\r\n<p>Webalizer wird entpackt und liegt dann kompiliert vor. Es empfiehlt sich, vor dem ersten Start nochmals in die Config-Datei zu schauen. Und die Verzeichnisse bzw den Leistungsumfang anzupassen.\u00a0\u00a0<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n<p>\r\n\r\n<\/p>\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n<p><\/p><div class=\"pld-like-dislike-wrap pld-custom\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir\" data-post-id=\"22272\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Hoch.png\" alt=\"Gef\u00e4llt mir\" \/>\r\n            <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">3    <\/span>\r\n<\/div><div class=\"pld-dislike-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-dislike-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir nicht\" data-post-id=\"22272\" data-trigger-type=\"dislike\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Runter.png\" alt=\"Gef\u00e4llt mir nicht\" \/>\r\n            <\/a>\r\n    <span class=\"pld-dislike-count-wrap pld-count-wrap\"><\/span>\r\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Heute wollen wir uns ein bisschen mit dem WWW-Servern befassen. Man m\u00f6chte doch wissen, wer greift auf den Server zu und welche Seiten sind von besonderem Interesse. Nun jeder WWW-Server speichert alle Zugriffe und diese kann man auswerten. Ich nehme jetzt den Apache-Server als Beispiel heraus.Alle anderen speichern diese Daten \u00e4hnlich, selbst der MS-IIS. Und [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":22458,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,1443,38],"tags":[],"class_list":["post-22272","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein","category-grundlagen","category-netzwerk"],"_links":{"self":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/22272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/comments?post=22272"}],"version-history":[{"count":22,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/22272\/revisions"}],"predecessor-version":[{"id":22459,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/22272\/revisions\/22459"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media\/22458"}],"wp:attachment":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media?parent=22272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/categories?post=22272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/tags?post=22272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}