Vollbildmodus: Seiteninhalt ohne Menus

Apache

Der Apache HTTP Server ist ein (auf vielen Plattformen verbreiteter) Webserver und im Moment der meist eingesetzte Webserver ist. Er hat eine modulare Erweiterungsmöglichkeit und ist detailliert zu konfigurieren.

Apache Foundation Homepage

BSI Apache webserver sicherheitsstudie.pdf

oft benutzte Funktionen:

Links

Installation (allgemeingültig)

kompilieren aus den Quellen: entpacken (tar), ./configure, make, make install
oder als Paket installieren:

  • rpm-Paket: rpm -i PAKETDATEI.rpm bzw.
  • deb-Paket: dpkg -i PAKETDATEI.deb

Aus Repository(Verzeichnis von Paketen,Paketquelle): yast, yum, apt

Pakete für LAMP

In Ubuntu und Debian reicht eine Zeile für die verbreitete Kombination aus Apache, php(Version 5, die alte Version 4 wird ende 2007 nicht mehr unterstützt) und MySQL.

sudo aptitude install apache2 php5 mysql-server

Dabei werden die Abhängigkeiten korrekt aufgelöst, beispielweise das Modul für Apache (mod_php5 bzw. als Paket libapache2-mod-php5).

Der Dienst (daemon) Apache

Apache läuft als eigener Benutzer unter

Distribution Benutzer Gruppe
Suse wwwrun www
Debian www-data www-data

Konfiguration

Syntax gemachter Änderungen testen:

apache2 -t

bzw. bei Apache 1.x

apache -t

Dateien

/etc/apache2/httpd.conf

dort befindet sich allerdings bei den meisten Distribution nur eine fast leere Datei, die eigentlichen Einstellungen sind dann in apache2.conf (Ubuntu, Debian?) bzw. in default-server.conf (Suse).

Direktiven

Direktiven sind Konfigurationsanweisungen die das Verhalten des Webserver beeinflussen. Sie haben entweder globale oder lokale (z.B. bei einem virtuellen Webserver oder innerhalb einer .htaccess-Datei).

Verzeichnis der Direktiven

Wichtige Direktiven sind z.B.

  • Servername (gibt den FQDN auf dem der Server antwortet)
  • Listen (überschreibt den Servername, normalerweise steht hier nur der Port 80 drin), Wenn man den Apache nur lokal aufrufbar machen will sollte man (in ports.conf bei Debian, Ubuntu) Listen 127.0.0.1:80 reinschreiben
  • ServerRoot (Basispfad des Webservers)
  • DocumentRoot (Basispfad der Webseiten)

Je nach Distribution:

  /srv/www/htdocs/  (neuere Suse)
  /var/www/ (Debian, Ubuntu)
  /usr/local/httpd/htdocs/

Auflistung wichtiger Direktiven aus mod_core (immer verfügbare Kernfunktionen)

starten / neustarten / stoppen

  • Entweder mit apachectl
apachectl restart  OR apachectl graceful
apache2ctl restart  OR  apache2ctl graceful
  • oder über Initskripte:
/etc/init.d/apache2 reload

reload ⇒ Neuladen der Konfiguration ohne große Arbeitsunterbrechung, auch graceful benannt; stattdessen sind z.B. auch start, stop oder restart möglich.

Ort der Initskripte:

Distribution Befehl
Suse /etc/rc.d/apache[2] restart
Debian /etc/init.d/apache[2] restart

Die Klammer [2] besagt natürlich nur, dass man hier entweder apache oder apache2 eingibt, je nachdem welche Version man einsetzt.

Anmerkung: Bei aktuellen OpenSuse-Distributionen ist rc.d ein Verweis auf init.d

Logdateien

Der Standard-Ort für Logdateien ist /var/log/apache2. Dort werden error.log (Fehler) und access.log (Seitenzugriffe) abgelegt.

Auswertung

piped-logs

Eine Umleitung der Logdateien ist auch über Programme von Drittherstellern oder eigene shellscripten möglich.

Dazu muss ein Eintrag der Form

CustomLog "| /pfad/zur/programmdatei" common

angelegt werden. Dies kann z. B. ein simples Shellscript sein.

#/bin/bash
cat $@ >> access.log

:!: Das angegebene Programm wird mit root-Rechten ausgeführt! Jedes Sicherheitsproblem ist hier kritisch. Auch Hintertüren lassen sich so platzieren.

:!: Bei sehr vielen virtuellen Hosts und Logdateien könnte die Anzahl der Dateihandler nicht ausreichen. Apache benutzt selbst 20-30 plus 2 pro Log. Unter Linux sind 1024 Dateihandler möglich, falls dies nicht ausreicht kann man mit

ulimit -S -n 8192

die Anzahl auf 8192 anheben.

Protokollierung auf syslog

Apache kann seine Logdateien auf über syslog oder syslog-ng ausgeben. Gerade bei Web-Server-Clustern oder wenn man (berechtigterweise) vermutet dass ein Angreifer die Logs löscht, ist diese Konfiguration von Vorteil.

  • Fehlerlogs: Durch die Einstellung ErrorLog
ErrorLog syslog:local1

local1 ist die facility (Standard: local7).

Auf dem Zielhost leitet man die facility local1 in eine eigene Datei. Beachten sollte man allerdings, dass pro Abschnitt (z. B. pro virtuellem Host) nur eine Errorlog-Direktive ausgewertet wird. D.h. wenn die Errorlog an syslog gehen, dann ist lokal nichts da. Dies lässt sich allerdings mit einem Script umgehen.

Zuerst muss müssen wir allerdings die ErrorLog-Ausgabe an ein Script schicken:

ErrorLog "|/Pfad/zum/script.sh"

Das Zielscript teilt dann die Fehlerausgabe auf:

#/bin/sh
cat $@ | tee -a /var/log/apache2/error.log | logger -p local7.warn -t Apache2

Erklärung:

  1. Das Programme cat nimmt die Ausgabe von Apache entgegen
  2. tee hängt die Ausgabe an die Datei /var/log/apache2/error.log an
  3. und letztendlich bekommt logger die Ausgabe von Apache durchgereicht und sendet diese an syslog/syslog-ng.

So hat man übrigens auch allgemein das Problem mehrerer ErrorLogs in Apache2 gelöst.

:!: syslog-ng verändert das Format der Logs was die Auswertung schwieriger macht. Deshalb muss über ein Template das Format von syslog-ng verändert werden.

  • Transferlogs: Die Einstellung Transferlog bietet leider keinen direkten Weg zu syslog. Über eine Pipe geht es dennoch. Dazu muss man ein Skript schreiben, dass das lokale Protokoll beschreibt und zusätzlich mittels dem Programm logger zusätzlich an syslog(-ng) sendet.

Beispiel Quellcode:

#!/bin/sh
cat $@ | logger -p local7.notice -t Apache2

Da ein (virtueller) Host mehrere Transfer/CustomLog-Direktiven haben darf gibt man eine für die lokale Speicherung und eins für syslog(-ng) an.

Links

Module

Wichtige Module sind

mount volumes for a user session

geladene Module anzeigen

Module (de)aktivieren

Apache bindet auch Module von anderen Programmierern ein, dazu muss man einen symbolischen Links (Erzeugung mit ln -s [Ziel] [Linkname]) von dem gewünschten Modul aus /etc/apache2/mods_available in /etc/apache2/mods-enabled anlegen (die Pfade können varrieren, aber seine Apache-Konfigurationsdateien sollte man schon suchen können).

Befehl Beispielaufruf Zweck des Programms
a2enmod / a2dismod sudo a2enmod mod_python (de-) aktiviert Module für Apache (Debian)
a2ensite / a2dissite sudo a2ensite Konf1 (de-) aktiviert Sites für Apache (Debian)

URL-Rewriting (mod_rewrite)

mit mod_rewrite kann man nur schwer lesbare URLs in angenehmere umwandeln und auch Suchmaschinen eine bessere Indizierung ermöglichen.

permanente Umzüge

Wenn man eine Domain oder eine Seite auf eine neue URL umziehen lässt, sollte man korrekt den HTTP-Status 301 (moved permanently) senden. Dann werden sich auch Suchmaschinen die neue URL merken und man bleibt im Suchindex.

Die folgendene Konfiguration kann man global in der Apache-Konfiguration einstellen oder in einer .htaccess-Datei im Stammverzeichnis hinterlegen.

RewriteEngine On
RewriteRule ^(.*)$ http://www.NEUE-SEITE.de/$1 [R=301,L]
RewriteRule .+ http://www.NEUE-SEITE.de/ [R=301,L]

Wenn rigeros alle (alten) URLs auf die neue Startseite gehen sollen:

RewriteEngine On
RedirectMatch (.*) http://www.NEUE-SEITE.de [R=301,L]

Security

mod_security

CGI und Perl

Apache(2) Tools

  1. dbench (disk) and tbench (TCP) benchmarks

Im Paket apache2-utils sind einige sehr nützliche Programme enthalten:

  1. ab (Apache benchmark tool)
  2. logresolve (Resolve IP addresses to hostname in logfiles)
  3. htpasswd (Manipulate basic authentication files)
  4. htdigest (Manipulate digest authentication files)
  5. dbmmanage (Manipulate basic authentication files in DBM format, using perl)
  6. htdbm (Manipulate basic authentication files in DBM format, using APR)
  7. rotatelogs (Periodically stop writing to a logfile and open a new one)
  8. split-logfile (Split a single log including multiple vhosts)
  9. checkgid (Checks whether the caller can setgid to the specified group)
  10. check_forensic (Extract mod_log_forensic output from apache log files)

Windows

 
apache/apache.txt · Zuletzt geändert: 2010/03/29 00:02 von st
 
Backlinks: [[apache:apache]]

News