Tips und Tricks

Anonymisierung von Access Log Files

Standardmäßig werden die Access Logs des Apaches folgende Informationen gespeichert:

  • Hostname des VirtualHosts, auf den der Zugriff erfolgt.
  • IP-Adresse des Clients
  • Timestamp des Zugriffs
  • Abgerufene URI
  • HTTP-Status-Code
  • Übertragene Datenmenge in Byte
  • UserAgent-Information
  • Referer

Man kann in pd-admin unter „Einstellungen“ -> „Serverkonfiguration“ die Anonymisierung sämtlicher Nutzer Log Files aktivieren.

Sofern dies nur bei einzelnen Nutzer aktiviert werden soll, kann dies in der Endkundenansicht unter „Statistiken“ -> „Einstellungen“ vorgenommen werden.

Einrichten eines Verzeichnisschutzes

Ein Verzeichnisschutz kann über eine .htaccess Datei eingerichtet werden. Der einzelnen Nutzer sind in einer .htusers Datei einzutragen. Damit dies nicht alles von Hand durchgeführt werden muss, kann dies über den Dateimanager in pd-admin durchgeführt werden. Gehen Sie dazu im Endkundenbereich auf den Dateimanager und dann in das gewünschte Verzeichnis.

../../_images/verzeichnisschutz_1.png

Über den Button „Schützen“ können Sie nun einen Verzeichnisschutz einrichten. Geben Sie dazu zuerst einen Namen für den Verzeichnisschutz und eine Mail-Adresse an. Bestätigen Sie mit Klick auf „OK“.

../../_images/verzeichnisschutz_2.png

Nun ist der Verzeichnisschutz eingerichtet und man die Benutzer anlegen und verwalten. Dazu gibt man einen User, eine Mail-Adresse und ein Passwort an. Hat man den Haken bei „Info“ gesetzt wird eine Mail an die Mail-Adresse des Nutzers geschickt.

../../_images/verzeichnisschutz_3.png

Hat man alle Nutzer angelegt kommt man mit Klick auf „OK“ zurück zum Dateimanager. Dort sieht man nun, dass eine .htaccess und .htusers Datei angelegt wurden. Diese kann man auch direkt aus dem Dateimanager heraus öffnen und direkt editieren.

../../_images/verzeichnisschutz_4.png

Expire Header für Browser Caching

Um Browser Caching besser zu nutzen, können Sie auf Ihrem Managed Server Expire Header für die jeweiligen Webseite setzen. Expire Header werden in der .htaccess Datei im Webroot gesetzt. Nachfolgend eine Übersicht an möglichen Expire Header:

# Aktivierung des Expire Controls
ExpiresActive On

# Standardwert setzen: 1 Stunde nach Abruf
ExpiresDefault "now plus 1 hour"

# CSS and JS:
ExpiresByType text/css "now plus 1 week"
ExpiresByType application/javascript "now plus 1 week"
ExpiresByType application/x-javascript "now plus 1 week"

# Bilddaten:
ExpiresByType image/bmp "now plus 1 month"
ExpiresByType image/gif "now plus 1 month"
ExpiresByType image/jpeg "now plus 1 month"
ExpiresByType image/jp2 "now plus 1 month"
ExpiresByType image/pipeg "now plus 1 month"
ExpiresByType image/png "now plus 1 month"
ExpiresByType image/svg+xml "now plus 1 month"
ExpiresByType image/tiff "now plus 1 month"
ExpiresByType image/vnd.microsoft.icon "now plus 1 month"
ExpiresByType image/x-icon "now plus 1 month"
ExpiresByType image/ico "now plus 1 month"
ExpiresByType image/icon "now plus 1 month"
ExpiresByType text/ico "now plus 1 month"
ExpiresByType application/ico "now plus 1 month"
ExpiresByType image/vnd.wap.wbmp "now plus 1 month"
ExpiresByType application/vnd.wap.wbxml "now plus 1 month"
ExpiresByType application/smil "now plus 1 month"

# Audiodaten:
ExpiresByType audio/basic "now plus 1 month"
ExpiresByType audio/mid "now plus 1 month"
ExpiresByType audio/midi "now plus 1 month"
ExpiresByType audio/mpeg "now plus 1 month"
ExpiresByType audio/x-aiff "now plus 1 month"
ExpiresByType audio/x-mpegurl "now plus 1 month"
ExpiresByType audio/x-pn-realaudio "now plus 1 month"
ExpiresByType audio/x-wav "now plus 1 month"

# Filmdaten:
ExpiresByType application/x-shockwave-flash "now plus 1 month"
ExpiresByType x-world/x-vrml "now plus 1 month"
ExpiresByType video/x-msvideo "now plus 1 month"
ExpiresByType video/mpeg "now plus 1 month"
ExpiresByType video/mp4 "now plus 1 month"
ExpiresByType video/quicktime "now plus 1 month"
ExpiresByType video/x-la-asf "now plus 1 month"
ExpiresByType video/x-ms-asf "now plus 1 month"

Gzip Komprimierung

Auf allen Managed Server von Providerdienste.de ist mod_deflate im Apache aktiviert. Somit kann man für seine Webseite die Gzip Komprimierung aktivieren.

.htaccess Eintrag

Fügen Sie folgenden Eintrag in Ihrer .htaccess Datei im Webroot ein:

AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript

Nun ist die Gzip Komprimierung aktiviert.

Für PHP per php.ini

Wenn Seiten per PHP ausgegeben werden, muss die GZIP Kompression in der php.ini aktiviert werden:

output_handler = Off
zlib.output_compression = On
zlib.output_handler = ob_gzhandler

Sperren von Bots / Crawler per htaccess Datei

Das Sperren von „bösen“ oder unerwünschten Bots / Crawler kann mittels Rewrite Rule in einer htaccess Datei realisiert werden:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (BöserBot|BöserCrawler|IrgendwasAgent) [NC]
RewriteRule (.*) - [F,L]

In den runden Klammern werden die User Agents eingetragen und durch senkrechte Striche getrennt. Die User Agents können durch Analyse der Access Logfiles identifiziert werden. Zum Beispiel so:

cat /Pfad/zum/access.log | awk -F\" '{print $6}' | sort -u

Testen von Webseiten mittels Hosts Datei

Man kann Webseiten vor der eigentlichen Umstellung im DNS bereits testen. Dazu muss man Einträge in die Hosts Datei vornehmen. Dies gelingt sowohl unter Linux, als auch Windows.

Linux

Öffnen Sie mit root-Berechtigungen die Datei /etc/hosts. Meist ist die Datei leer oder es befinden sich Einträge wie

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 www.rt.local test01.example.local www.otrs.local
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

darin. Möchte man nun seine Domain testen trägt man die IP des neuen Servers und dahinter die Domain ein. Als Beispiel nehmen wir 1.2.3.4 als IP und domain.de als Domain.

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 www.rt.local test01.example.local www.otrs.local
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
1.2.3.4     domain.de

Nachdem die Änderungen abgespeichert wurden, wird bei Verwendung von domain.de auf die IP 1.2.3.4 aufgelöst.

Windows 10

Unter Windows 10 befindet sich die Hosts Datei unter %windir%\system32\drivers\etc. Diesen Pfad können Sie so in der Adresszeile des Dateibrowsers eingeben, um zu dem Pfad zu gelangen. Ähnlich wie unter Linux kann die Datei leer sein oder bereits einzelne Einträge enthalten.

Auch hier nehmen wir als Beispiel 1.2.3.4 als IP und domain.de als Domain. Der Eintrag in der Datei sieht identisch zu dem unter Linux aus

127.0.0.1   localhost
1.2.3.4     domain.de

Der einzige Unterschied ist, dass unter Windows je IP/Domain eine Zeile verwendet wird. Auch hier wird nach dem Abspeichern der Datei domain.de zur IP 1.2.3.4 aufgelöst.

Weiterleitung auf HTTPS

Wenn Sie ein TLS-Zertifikat eingebunden haben, ist es empfehlenswert, alle HTTP-Anfragen auf HTTPS weiterzuleiten. Das können Sie mit der folgenden .htaccess-Datei erreichen:

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [NC,L]

Wie deaktiviere ich den Versand von Mails bei Cronjobs?

Für die Deaktivierung sämtlicher Mails, setzt man

> /dev/null 2>&1

hinter seinen Befehl. Ein Beispiel:

/usr/local/pd-admin2/bin/php-7.3-cli phpScript.php > /dev/null 2>&1

Möchte man die Ausgabe von STDERR erhalten, muss reicht

> /dev/null

hinter dem Befehl. Damit wird lediglich STDOUT nach /dev/null umgeleitet.

Wie verhindere ich die Mehrfachausführung von Cronjobs?

Oft ist die Mehrfachausführung von Cronjobs ein Problem für Anwendungen. Dies kann auf Ihrem Managed Server zu einer hohen Last, Störungen in Skripten oder gar Ausfällen von Diensten führen. Doch wie verhindert man die mehrfache Ausführung von Cronjobs auf Managed Servern?

Dazu gibt es verschiedene Lösungsansätze. Einer davon ist mittels des Befehls flock. Dieser setzt sogenannte Locks (Sperren) für Shell Skripte. Nachfolgend finden Sie jeweils ein Beispiel zur Ausführung eines Shell-Skripts und eines PHP-Skripts:

# Ausführung eines Shell Skripts
flock -n /tmp/cronSkript.lock -c "/home/einNutzer/cronSkript.sh"

# Ausführung eines PHP Skripts
flock -n /tmp/cronSkript.lock -c "/usr/local/pd-admin/bin/php-7.2-cli -c /home/einNutzer/php.ini /pfad/zum/phpSkript.php"

Bei erstmaliger Ausführung des Cronjobs wird nun eine Datei unter /tmp angelegt und gesperrt (file lock). Die Datei bleibt auch nach der Ausführung bestehen. Bei Ausführung des Cronjobs prüft flock, ob diese Datei gesperrt ist.

Dabei gibt man mit -n an, dass flock nicht warten soll bis der die Datei unter /tmp entsperrt wird. Dies könnte dazu führen, dass sich Prozesse anstauen. Stattdessen wird der Befehl direkt beendet.

Mit dem Parameter -c gibt man den auszuführenden Befehl an. Die Anführungszeichen sind in jedem Fall notwendig, wenn der Befehl Leerzeichen enthält.

Wichtiger Hinweis:

Bei mehreren Cronjobs muss darauf geachtet werden unterschiedliche Namen der Lock Files anzugeben:

# Cronjob A:
flock -n /tmp/cronSkript_A.lock -c "/home/einNutzer/cronSkript.sh"

# Cronjob B:
flock -n /tmp/cronSkript_B.lock -c "/home/einNutzer/WeiteresCronSkript.sh"