Posts Tagged ‘Cyon’

Samstag, 23. Mai 2020

Zwei Cyon IMAP-INBOXen innerhalb von drei Wochen zerschossen

Seit 2012 bin ich glücklicher Kunde von Cyon, eines schweizerischen Hosting-Anbieters. In den letzten drei Wochen hat sich das Erlebnis etwas getrübt.

Wichtig: Die unten beschriebene Problematik hatte ich in den letzten acht Jahren nie, und schon gar nicht innerhalb von drei Wochen zwei Mal. imapfilter hat bisher auch immer reibungslos funktioniert.

Das erste Problem

Am Morgen des Samstag, 9. Mai 2020 konnte ich plötzlich nicht mehr auf meine E-Mails in der INBOX von Konto A zugreifen. Weder in Apple Mail (meinem hauptsächlichen E-Mail-Client), noch über RainLoop (Webmail), noch mit imapfilter, welches ich verwende, um E-Mails automatisiert in Unterordner zu verschieben (oder im Falle von Spam: zu löschen).

Das alle 5 Minuten laufende imapfilter, gepaart mit Healthchecks, ist übrigens auch ein optimales „Frühwarnsystem“, welches mir meldet, wenn mit dem Mailserver etwas nicht stimmt.

Das Log von RainLoop (unter RAINLOOPROOT/data/_data_/_default_/logs) zeigte den Fehler schön auf:

...
[08:55:36.698][1c50d1ff] IMAP[DATA]: > TAG3 SELECT "INBOX"\r\n
[08:55:36.960][1c50d1ff] IMAP[ERROR]: Stream Meta: Array
...
[08:55:36.961][1c50d1ff] IMAP[ERROR]: MailSo\Net\Exceptions\SocketReadException: MailSo-Net-Exceptions-SocketReadException (NetClient.php ~ 523) in %PATH%/rainloop/v/0.0.0/app/libraries/MailSo/Net/NetClient.php:523
Stack trace:
...

Und so sah das Symptom bei imapfilter aus:

...
Sat May  9 10:41:38 2020: reading data through SSL; the connection has been closed cleanly
...

Diese Meldung wurde in einer Schleife ausgegeben, und zwar bei jedem Befehl, der E-Mails filtern und — falls vorhanden — verschieben sollte.

Als ich imapfilter im Debug-Modus laufen liess …

$ imapfilter -v -l log.txt -d debug.txt recipe.imapfilter

… tauchte folgende erhellende Nachricht im Debug Log (debug.txt) auf:

IMAP (5): 107C NO [UNAVAILABLE] Maximum number of connections from user+IP exceeded (mail_max_userip_connections=75)

Weil die IMAP-INBOX nicht abrufbar war, steckten meine Scripts in Endlosschleifen fest, welche die Zahl der Verbindungen pro E-Mail-Konto und IP voll ausschöpfte. Es waren also keine Verbindungen mehr möglich.

Als erstes schaltete ich deshalb den imapfilter-Cronjob ab, um dem IMAP-Server eine Verschnaufspause zu gönnen. Dann wurde rasch klar, dass die E-Mails in der INBOX aus irgendeinem Grund nicht aufgelistet werden konnten. Ich hatte in den zwei Tagen zuvor einige Anpassungen am imapfilter-Konfiguration vorgenommen; eine Möglichkeit war, dass die Verschiebeaktionen dabei zu einer korrupten INBOX-Datei geführt haben könnten.

Obwohl das Problem an einem Wochenende auftrat, schrieb ich dem Support — wohlwissentlich, dass ich erst am Montag eine Antwort erhalten würde. Vielleicht würde ja trotzdem eine gute Seele reinschauen … leider nein, The Computer Says No.

Ich kämpfte deshalb auf eigener Faust weiter: Nach viel Pröbeln wählte ich die Holzhammer-Methode: Nach einem lokalen Backup des kaputten Dovecot-Verzeichnisses löschte ich via SSH alle Dateien im INBOX-Verzeichnis (Pfad: siehe unten), ein frischer Start, sozusagen. Seither funktioniert die INBOX wieder.

Glück im Unglück: Da ich bei Konto A versuche, Inbox Zero anzuwenden, waren nur vier E-Mails von der Löschaktion betroffen, von denen ich die von Apple Mail lokal gespeicherten .emlx an einen sicheren Ort kopieren konnte.

Das zweite Problem

Kurz nach Mitternacht in der Nacht von Donnerstag auf Freitag, 22. Mai 2020 traten gemäss imapfilter Probleme mit Konto B auf. Ich merkte dieses am späteren Freitag-Morgen, als ich mit meinen Mail-Clients nicht mehr auf meine E-Mails in der INBOX von Konto B zugreifen konnte. Dieses Mal gab es aber keine Überlastung der erlaubten Verbindungen. imapfilter meldete bei Abfragen auf die INBOX:

...
Fri May 22 14:47:16 2020: IMAP (5): 127C NO [SERVERBUG] Internal error occurred. Refer to server log for more information. [2020-05-22 14:47:16] (0.040 + 0.000 + 0.039 secs).
...

Ohne Zugriff auf die Logs konnte ich „SERVERBUG“ nicht weiter eingrenzen. Erneut schrieb ich eine E-Mail an den Support (Versand um 15:19 Uhr), und erhielt um 16:57 Uhr eine Antwort. Leider in der Form „Have you tried turning it off and on again?“. Die Hoffnung war verloren, dass mir Cyon noch vor dem Wochenende beim Debugging helfen konnte — somit sah ich ca. 56 Stunden ohne E-Mail entgegen.

Hilfreich war in der ersten Antwort des Supporters einzig der Tipp, anstelle von RainLoop doch bitte das „offizielle“ Webmail von Cyon zu verwenden: webmail.cyon.ch, welches auf RoundCube basiert. Gesagt, getan. So konnte ich dem Supporter klipp und klar belegen, dass das Problem auf der Serverseite lag. Wenn ich die INBOX anwählte, erschien am unteren Bildschirmrand ganz in rot folgende Fehlermeldung:

Serverfehler: UID SORT: Internal error occurred. Refer to server log for more information. [2020-05-22 17:59:38] (0.041 + 0.000 + 0.040 secs)

Leider gab es seither keine Antwort mehr, weshalb ich mir erneut selber helfen musste (wieso passieren diese Fehler immer auf’s Wochnenende hin?!)

Das Problem war dieses Mal etwas anderer Natur — Apple Mail und imapfilter zeigten partout keine E-Mails mehr in der INBOX an; die Unterordner konnten hingegen abgerufen werden. RoundCube hingegen zeigte die INBOX etwas erratisch manchmal an, manchmal nicht.

Die schlussendliche Lösung:

  • Per SSH auf den Shared Hosting-Server einloggen
  • Alle dovecot-Prozesse abschiessen mittels
    $ ps ax | grep -i dovecot | grep -v grep | awk '{print $1}' | xargs kill
  • Die (möglicherweise korrupte?) dovecot.index Datei löschen
  • In Cyons RainLoop Webmail einloggen
  • Die E-Mails der letzten Tage im problematischen Mail-Ordner von Hand durchgehen; solche, die nicht angezeigt werden konnten, habe ich kurzerhand gelöscht
  • Einen neuen Unterordner erstellen; bspw. BACKUPYYYYMMDD
  • Alle verbleibenden E-Mails im problematischen Ordner auswählen und in den Backup-Ordner verschieben (ich hatte Angst, dass der Verschiebeprozess nicht funktionieren würde, klappte in dem Fall aber problemlos)
  • Zurück auf SSH wechseln
  • Im Verzeichnis des problematischen Emailordners rm -rf * ausführen, um alle vorhandenen Dateien zu löschen (ACHTUNG: Wer diesen Befehl am falschen Ort ausführt, löscht sich sein gesamtes Benutzerverzeichnis)
  • RoundCube, RainLoop Apple Mail und imapfilter wieder starten resp. öffnen — der problematische Ordner ist jetzt zwar leer, aber kann immerhin wieder ohne Fehlermeldungen abgefragt werden. Im Hintergrund erstellt Dovecot alle benötigten Dateien wieder.
  • Falls gewünscht die E-Mails aus dem Backup-Ordner zurück in den (neu erstellten) ehemals problematischen Ordner verschieben oder kopieren (ACHTUNG: Es könnte sein, dass eine ganz bestimmte E-Mail im Backup Dovecot zum Straucheln bringt; in dem Fall würde man mit der Rückkopieraktion das Problem wieder von vorne starten … bei mir war das glücklicherweise nicht der Fall)

Epilog

Ohne Zugriff auf die IMAP-Logs ist mir aber weiterhin nicht möglich herauszufinden, was denn nun wirklich genau das Problem war. Und so besteht zu befürchten, dass das Problem jede Minute erneut auftreten kann.

Und nein, ich gebe nicht Cyon die Schuld: Es könnte sein, dass mein spezielles Setup mit 5-minütigen imapfilter-Verbindungen die Ursache hinter den Problemen ist. Bspw. eine Anpassung, welche tausende E-Mails verschiebt und der Mailserver noch am kopieren ist, wenn der nächste imapfilter-Prozess bereits wieder startet und gerade in Kopie befindliche E-Mails irgendwohin kopiert. Oder ein Software-Update meiner Debian-Systeme in den letzten drei Wochen.

Es könnte aber auch sein, dass der Fehler bei Cyon zu suchen ist — d.h. ein kaputter RAM-Baustein, der beim Schreiben IMAP-Ordnerdateien korrumpiert, oder das Storage-System, welches zu schreibende Daten verfälscht, oder ein Update von Dovecot, nach welchem sich die Software nicht mehr wie gewohnt verhält. Oder eine Inkompatibilität zwischen der neuen Dovecot-Version mit dem bisherigen imapfilter; oder mit dem neuen imapfilter und der bisherigen Dovecot-Version.

Cyons E-Mail-Infrastruktur

Was ich bei diesen Problemen über Cyons E-Mail-Infrastruktur gelernt habe:

  • Cyon verwendet Dovecot als IMAP-Server
  • Ist man per SSH auf dem Cyon-Server eingeloggt, kann man sich die (eigenen) laufenden IMAP-Server-Prozesse mit folgendem Befehl anzeigen lassen. Die Zahl der Prozesse ist meines Erachtens proportional zur Anzahl der Clients, die gerade per IMAP E-Mails abfragen (mindestens 1 Prozess, es können aber durchaus auch mehrere pro Client sein).
    $ ps ax | grep -i dovecot
    3662642 ?        S      0:00 dovecot/imap
    3662645 ?        S      0:01 dovecot/imap
    3662646 ?        S      0:00 dovecot/imap
    3662706 ?        S      0:00 dovecot/imap
    3663038 ?        S      0:00 dovecot/imap
    3664246 ?        S      0:00 dovecot/imap
    3674314 ?        S      0:00 dovecot/imap
    3674316 ?        S      0:00 dovecot/imap
    3674317 ?        S      0:00 dovecot/imap
    3674449 ?        S      0:00 dovecot/imap
  • Die Mail-Daten eines Benutzers liegen in einer Ordnerstruktur unter /userdata01/%CYONUSER%/mail
  • Die Mail-Ordner einer E-Mailadresse %EMAILUSER%@%DOMAIN% finden sich unter /userdata01/%CYONUSER%/mail/%DOMAIN%/%EMAILUSER%/mailboxes
  • In einem Mail-Ordner finden sich normalerweise folgende Dateien:
    drwxr-x--x 2 user user    158 May 23 17:02 ./
    drwxr-x--x 3 user user     32 May 23 16:43 ../
    -rw-r----- 1 user user  15024 May 23 16:41 dovecot.index
    -rw-r----- 1 user user  15024 May 23 16:41 dovecot.index.backup
    -rw-r----- 1 user user 391208 May 23 17:34 dovecot.index.cache
    -rw-r----- 1 user user   2144 May 23 17:02 dovecot.index.log
    -rw-r----- 1 user user  32928 May 23 16:41 dovecot.index.log.2
  • Löscht man die Cache-Datei dovecot.cache in einem Mailordner (kann mehrere hundert Megabytes oder sogar Gigabytes gross sein), wird diese von Dovecot nicht automatisch neu generiert. Nichts geht mehr; d.h. der Ordner wird als leer angezeigt.
  • Löscht man die Index-Datei dovecot.index, wird diese von Dovecot automatisch neu generiert. Beim zweiten Problem half dies tatsächlich, dass ich wieder Zugriff auf E-Mails erhielt.

Tags: , , , , , , ,
Labels: IT, Schweiz, Web

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 19. Juli 2018

SPF für ein Cyon-Hosting aktivieren

Da ich mich auf der Arbeit gerade mit dem Thema E-Mail-Sicherheit und -Authentizität befasse, war es nun an der höchsten Zeit, auch meinen privaten Mailverkehr sicherer zu machen.

Begonnen habe ich mit der Konfiguration des sogenannten Sender Policy Frameworks SPF. Der Besitzer einer Domain gibt mit einem TXT-Eintrag in einem bestimmten Format auf dem Nameserver der Domain bekannt, von welchen IPs aus überall legitime E-Mails versendet werden können.

Mailserver, welche von einer mit SPF ausgerüsteten Domain E-Mails erhalten, können — müssen aber nicht — diese Information abfragen und mit den Informationen im Header des E-Mails vergleichen. Basierend auf dem Resultat dieser Auswertung kann der Mail-Server oder der Mail-Client des Empfänger Aktionen ergreifen. Beispielsweise E-Mails markieren oder in einen Unterordner verschieben, welche von keiner der freigegebenen IP versendet wurden. Oder E-Mails von einer offiziellen Mail-Server-IP eine höhere Authentizitätspunktzahl geben und so von der Spam-Score abziehen.

Mein Hoster der Wahl, Cyon, hat im Support-Artikel Was ist ein SPF-Record? festgehalten, wie ein solcher SPF-Record aussehen könnte und wie man diesen über das Controlpanel my.cyon einrichtet. Obwohl der Autor des Support-Artikels festhält, dass alle Kundendomains bereits einen Eintrag besitzen …

Der Standardeintrag bei cyon sieht folgendermassen aus: […] Sie können diesen im my.cyon unter «Webhosting» > «DNS-Editor» mit dem DNS-Editor anpassen. Wichtig ist, dass man den bestehenden Eintrag ergänzt, da nur jeweils ein SPF-Eintrag gültig ist.

… hatten meine Domains keinen solchen Eintrag. Wahrscheinlich, weil ich bereits langjähriger Kunde bin und nur neue Hostingkunden diesen Eintrag automatisch erhalten.

Cyon schlägt folgenden Eintrag vor:

v=spf1 +a +mx +ip4:194.126.200.0/24 +ip4:149.126.0.0/21 -all

Ich empfand diese zwei Ranges viel zu weitläufig und habe mich entschieden, stattdessen folgende Konfiguration einzuspeisen:

v=spf1 +a +mx +ip4:194.126.200.18 +ip4:194.126.200.19 +ip4:194.126.200.20 +ip4:194.126.200.22 +ip4:149.126.4.65 -all

Die IPs fand ich folgendermassen heraus:

$ host mail.cyon.ch
mail.cyon.ch has address 194.126.200.18
mail.cyon.ch has address 194.126.200.22
mail.cyon.ch has address 194.126.200.20
mail.cyon.ch has address 194.126.200.19
$ host s056.cyon.net
s056.cyon.net has address 149.126.4.65

Dahinter verstecken sich einerseits alle vier Server, auf welche mail.cyon.ch auflöst, andererseits der physische Server, auf welchem meine Web-Site gehostet wird: s056.cyon.net.

Die TTL habe ich auf 15 Minuten gesetzt, damit ich in Notfällen Anpassungen vornehmen kann und diese sich dann rasch propagieren.

Existenz des Eintrags verifizieren

$ dig @ns1.cyon.ch emeidi.com txt
...
;; ANSWER SECTION:
emeidi.com.		900	IN	TXT	"v=spf1 +a +mx +ip4:194.126.200.18 +ip4:194.126.200.19 +ip4:194.126.200.20 +ip4:194.126.200.22 +ip4:149.126.4.65 -all"
...

Via: Using dig to search for SPF records
und Force dig to resolve without using cache

Warnung

Auf der Arbeit musste ich realisieren, dass man als Besitzer einer Domain den SPF-Record stets aktuell halten muss. Bisher sah ich folgende Probleme:

  • E-Mails werden im Namen des Dienstleister über den Services eines Dritten versendet (bspw. SaaS), der Dienstleister vergisst aber, die IP(s) resp. die Domain mit den SPF-Einträgen des Mail-Servers in die Konfiguration aufzunehmen.
  • Man macht einen Flüchtigkeitsfehler und schreibt bspw. Anstelle +ip4:1.2.3.4 folgende syntaktisch falsche Konfiguration: +ipv4:1.2.3.4

Validität prüfen

Es empfiehlt sich deshalb, zumindest die Validität eines SPF-Records zu testen. Hierfür hat sich bei mir das Tool MxToolbox Supertool bewährt:

Wird der SPF-Record grün hinterlegt, ist alles bestens. Erscheint er rot, ist etwas an der Syntax nicht korrekt. Übrigens: Bei mit +include: verschachtelten Einträgen empfiehlt es sich, die Domains im Include-Statement auch noch gleich abzufragen, indem man in der Resultate-Tabelle darauf klickt. In einem Fall fand sich die Fehlkonfiguration dort.

Zusätzlich gibt es noch eine andere Variante — lasst uns doch einfach ein Mail senden! Und zwar an diese Mail-Adresse: check-auth@verifier.port25.com. Man erhält automatisch eine Antwort zurück, die sich etwa so liest:

==========================================================
Summary of Results
==========================================================
SPF check:          pass
"iprev" check:      pass
DKIM check:         permerror
SpamAssassin check: ham

==========================================================
Details:
==========================================================

HELO hostname:  s056.cyon.net
Source IP:      149.126.4.65
mail-from:      xyz@eMeidi.com

----------------------------------------------------------
SPF check details:
----------------------------------------------------------
Result:         pass
ID(s) verified: smtp.mailfrom=xyz@eMeidi.com

DNS record(s):
   eMeidi.com. 60 IN TXT "v=spf1 +a +mx +ip4:194.126.200.18 +ip4:194.126.200.19 +ip4:194.126.200.20 +ip4:194.126.200.22 +ip4:149.126.4.65 -all"
   eMeidi.com. 60 IN A 149.126.4.65


----------------------------------------------------------
"iprev" check details:
----------------------------------------------------------
Result:         pass (matches s056.cyon.net)
ID(s) verified: policy.iprev=149.126.4.65

DNS record(s):
   65.4.126.149.in-addr.arpa. 60 IN PTR s056.cyon.net.
   s056.cyon.net. 60 IN A 149.126.4.65

Produktiver Test

Um das funktionieren des SPF-Records vollends zu testen, sendete ich mir ein Mail an eine Gmail-Adresse und guckte mir dann den Mail-Header an, wie er bei Google ankommt:

...
Received-SPF: pass (google.com: domain of xyz@emeidi.com designates 149.126.4.65 as permitted sender) client-ip=149.126.4.65;
Authentication-Results: mx.google.com;
       dkim=temperror (no key for signature) header.i=@emeidi.com header.s=default header.b=LchLhMBS;
       spf=pass (google.com: domain of xyz@emeidi.com designates 149.126.4.65 as permitted sender) smtp.mailfrom=xyz@emeidi.com
...

Ist SPF gar nicht konfiguriert, sieht der E-Mail-Header stattdessen folgendermassen aus:

...
Received-SPF: neutral (google.com: 149.126.4.65 is neither permitted nor denied by best guess record for domain of xyz@emeidi.com) client-ip=149.126.4.65;
Authentication-Results: mx.google.com;
       dkim=temperror (no key for signature) header.i=@emeidi.com header.s=default header.b=cbFM4Bn7;
       spf=neutral (google.com: 149.126.4.65 is neither permitted nor denied by best guess record for domain of xyz@emeidi.com) smtp.mailfrom=xyz@emeidi.com
...

Tags: , , , ,
Labels: Web

1 Kommentar | neuen Kommentar verfassen

Montag, 8. Mai 2017

Die nervende WAF von Cyon deaktivieren

Gut gemeint, funktioniert aber nicht: Die Cyon WAF (Web Application Firewall).

Gerade eben kämpfte ich massiv mit meinem Server bei Cyon, deren WAF und meiner WordPress-Installation: Den Artikel tftp funktioniert über NAT nicht wollte der Server partout nicht speichern und gab stattdessen einen HTTP 403 zurück. Wahrscheinlich enthielt das Web-Formular zu viele „gefährlich“ tönende Befehle.

Das Problem behebt man ganz einfach, indem man die .htaccess der WordPress-Installation um folgende Zeilen ergänzt:

...
<IfModule mod_security2.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
...

Tags: , , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Freitag, 28. April 2017

Unterstützt mein Hoster DNSSEC?

Verisign liefert ein Tool, mit welchem man unter Eingabe eines Domain-Namens testen kann, ob der Betreiber des Nameservers der Domain DNSSEC unterstützt:

DNSSEC Analyzer

Antwort in meinem Fall für Cyon (April 2017): Leider nein.

Tags: , , ,
Labels: Web

1 Kommentar | neuen Kommentar verfassen

Samstag, 6. Juni 2015

Ctrl-l bei Cyon SSH-Zugängen wieder zum Laufen bringen (sowie: Kritik an Cyon)

Vor Jahren war der Shared Hosting-Anbieter Cyon ein Lichtlein am Horizont — klasse Design, einfach zu bedienende Admin-Oberfläche ohne irgendwelchen Schnick-Schnack.

In den letzten Monaten hat der Anbieter bei mir leider viel Goodwill eingebüsst; es scheint, als passe Cyon bald im Monatsrhythmus seine Infrastruktur an, und der Leidtragende ist der Kunde:

  • Web Application Firewall. Unter dem Motto „Wir machen Web-Hosting noch sicherer!“ wurde primär einfach mal mein auf PHP und MySQL basierendes Site Management Tool zerschossen, welches seit bald 15 Jahren bei unzähligen Hostern produktiv läuft (und von mir auch regelmässig angepasst wird). PHP-Code darf nun nicht mehr per HTTP POST übermittelt werden, denn das sei grundsätzlich einmal ein Sicherheitsrisiko. Und überhaupt. Was zur Folge hat, dass meine Daten sowie diejenigen meiner betroffenen Kunden auf einen anderen Web-Server gezügelt werden mussten, welcher von einer nicht so paranoiden WAF abgeschirmt wird.
  • Lüpfen ohne Vorwarnung oder Testsystem. Ungefähr jedes halbes Jahr lüpft der Anbieter über Nacht die PHP-Standardversion. Finde ich im Grunde Klasse und äusserst fürsorglich. Wenn dann die Sysadmins dort wenigstens ein wenig Hirn walten lassen würden und meine für Cyon adaptierte php.ini ebenfalls von Version zu Version portieren würden. Aber nein, bei jedem PHP-Upgrade kriegt man eine liebevoll von Cyon vorbereite php.ini vorgesetzt, welche natürlich alle selber vorgenommenen Spezialeinstellungen nicht enthält. Ohne irgendwelche Vorwarnung, teilweise um 10 Uhr morgens. Dann heisst es auf der Arbeit, alles liegen und stehen lassen, irgendwie per SSH Verbindung zum Web-Server aufnehmen und die zerschossene php.ini mit einer Sicherheitskopie überschreiben. Dasselbe passierte übrigens mit oben genannter Problematik: Von einem Tag auf den anderen waren alle meine Web-Sites plötzlich wieder hinter einer amoklaufenden WAF aufgeschaltet und funktionierten wieder einmal nicht mehr. Nach Interventionen und langer Wartezeit bequemte sich ein System Engineer dort, den althergebrachten Zustand wieder herzustellen.
  • Kommunikation? Vergesst es. In der heutigen Zeit wäre es mittels E-Mail, Blog und RSS-Feeds ja echt keine Sache, die professionellen und semi-professionellen Kunden über geplante Änderungen zu informieren. Mit genügend Vorlaufzeit, damit das Datum im Kalender markiert werden kann und allenfalls bereits Anpassungen am Code vorgenommen werden können. Aber bei Cyon lebt man nach dem Grundsatz „Was der Kunde nicht weiss, macht ihn nicht heiss.“ Was halt leider dazu führt, dass der Kunde immer wieder aus heiterem Himmel eine grundlegende Anpassung vorgesetzt erhält.

Was mich zu meinem eigentlichen Problem führt: Es scheint, als hätte Cyon kürzlich den Web-Server von LiteSpeed auf Apache gewechselt (ich kämpfe derzeit mit Zeichensatzproblemen, weil AddDefaultCharset utf-8 in .htaccess nicht mehr beachtet werden). Nun gut und recht. Zusammen mit diesem Wechsel kommt auch die SSH-Shell komisch daher.

Insbesondere nervte mich tödlich, dass ich neuerdings das aktuelle Terminal-Fenster nicht mehr mittels Ctrl-l löschen konnte (analog zum Befehl clear, halt simpler und schneller). Wenn ich die Tastenkombination betätigte, erschien einfach eine neue Zeile mit der Befehlseingabe.

Nach einigen längeren Nachforschungen und Pröbeleien (wohl so eine Eigenheit von bash mit .bash_profile und .bashrc) löste folgender Eintrag in .bashrc mein Problem.

...
# User specific aliases and functions
bind -x $'"\C-l":clear;'

Quelle: To bind clear to ^l in Bash

Tags: , , , , , , , , , , , , ,
Labels: IT

5 Kommentare | neuen Kommentar verfassen

Freitag, 27. Juni 2014

Spam-Mails mit imapfilter in einen Unterordner verschieben

Der falsche Weg, wie ich ihn bis heute angewendet hatte:

...
-- SPAM
messages = mbox.INBOX:contain_subject('[SPAM]')
messages:move_messages(mbox['Spam'])
...

Das führte in diesem einen speziellen Fall dazu, dass ein legitimes E-Mail eines Kollegen mit „[SPAM]“ im Subject gekennzeichnet wurde. Da das elektronische Gespräch hin- und herging, landeten alle Antworten des Empfängers immer wieder in meinem Spam-Ordner.

Der richtige Weg — jedenfalls für Mail-Accounts, die bei Cyon GmbH gehostet werden — ist:

...
-- SPAM
messages = mbox.INBOX:contain_field('X-Spam-Status','Yes')
messages:move_messages(mbox['Spam'])
...

Tags: , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Freitag, 27. Juni 2014

.ch-Domains zu cyon transferieren

Heute schreckte mich Blogging Tom auf Facebook mit der Meldung auf, dass SWITCH/nic.ch per 1. Januar 2015 keine .ch-Domains mehr verwaltet. Bis spätestens zu diesem Stichdatum müssen .ch-Domains zu privaten schweizerischen Anbietern gezügelt werden.

Ich besitze ein halbes Dutzend .ch-Domains und lasse diese bereits alle auf meinen Shared Server bei der Cyon GmbH in Basel zeigen. Zum Glück hat der dortige Support in seiner Knowledgebase bereits eine bebilderte und „dubelisichere“ Anleitung aufgeschaltet, an Hand derer ich den Transfer innert 5 Minuten hingekriegt habe:

Wie kann ich meine Domain von SWITCH zu cyon transferieren?

ACHTUNG: Die ursprüngliche Google-Suche leitete mich auf folgenden Artikel, welcher diesen Spezialfall leider nicht behandelt:

Wie kann ich meine Domains transferieren?

Tags: , , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Montag, 13. Januar 2014

Das PHP Error-Log von einem Cyon-Server täglich per E-Mail zusenden

Ein guter Web-Entwickler hält das PHP Error-Log seiner Web-Sites und -Applikationen stets im Auge. Ich persönlich habe mir zum Ziel gesetzt, dass nur ein leeres Log ein gutes Log ist. Dies bedeutet demzufolge, dass man auf Produktivsystemen sauberen Code ausliefert. Und sollten doch einmal Fehlermeldungen, Warnungen und Infos im PHP Error-Log auftauchen, gilt es diese zeitnah zu beheben.

Damit man eine Web-Präsenz, welche auf einem Cyon-Server mit SSH-Zugang läuft, überwachen kann, sind folgende Anpassungen nötig:

php.ini

Bei meinen Hostings befindet sich diese Konfigurationsdatei unter ~/etc/php_settings/default/php.ini. In dieser Datei sollten die folgenden Parameter gesetzt sein:

...
error_log = /home/%CYON-ACCOUNT%/var/log/php.err
...
error_reporting = E_ALL # Allenfalls auch & ~E_DEPRECATED
...

Dabei sollte man sicherstellen, dass das Verzeichnis /home/>benutzernamen>/var/log/ existiert und schreibbar ist.

mail-php-error-log.sh

Nachfolgendes Script sorgt dafür, dass der Inhalt der heutigen php.err per E-Mail an eine frei definierbare E-Mail-Adresse gesendet wird. Nach dem Versand wird die php.err kopiert und das Original danach gelöscht. Dem Dateinamen der Kopie wird dabei der aktuelle Tag des Jahres (1 bis 365) angehängt, womit wir eine Art automatisiertes logrotate durchführen:

#!/bin/sh

LOG="/home/%CYON-ACCOUNT%/var/log/php.err"

if [ ! -f "$LOG" ]
then
        echo "File '$LOG' not found"
        exit 1
fi

LINES=`cat "$LOG" | wc -l`

if [ $LINES -lt 1 ]
then
        exit 0
fi

#echo "Since log file is not empty ($LINES lines) I'm now posting its content to the webmaster"
cat "$LOG" | mail -s "php.err" logger@domain.tld
#echo "Would now be sending mail"

# Secret Sauce
DAYOFYEAR=$(date +%j)
cp "$LOG" "$LOG.$DAYOFYEAR"
rm "$LOG"

exit 0

Dieses Script habe ich in meinem Home-Folder abgelegt und mittels chmod 700 für meinen Benutzer ausführbar gemacht.

crontab

Schlussendlich richtet man sich noch einen Eintrag in crontab ein, damit das Script automatisiert einmal im Tag aufgerufen wird:

$ crontab -e

Der Inhalt dieser Datei lautet:

MAILTO="logger@domain.tld"
...
12 23 * * * /home/%CYON-ACCOUNT%/mail-php-error-log.sh

Tags: , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 18. Dezember 2013

Den Netatmo PHP API-Client mit weniger strikten SSL-Anforderungen patchen

Vor einigen Tagen hörte mein Raspberry Pi-Dashboard auf, die Werte meiner Netatmo NWS01 Wetterstation für Apple iPhone und Android anzuzeigen.

Auf meinem lokalen Mac funktionierte das Dashboard hingegen problemlos; d.h. ich konnte mittels dem Netatmo PHP API-Client die JSON-Datei mit den aktuellen Messwerten wie Temperatur, Luftdruck und -feuchtigkeit abrufen.

Die genaue Ursache hinter dem Problem kenne ich bis heute nicht, doch ich vermute mit dem jetzigen Wissensstand, dass die Cyon-Ingenieure an der Konfiguration ihrer Server herumgewerkelt haben und dabei unter anderem das Root-Zertifikat entfernt haben, welches der Netatmo API-Client zur HTTPS-verschlüsselten Kommunikation mit den Netatmo-Servern verwendet.

Nachdem ich nämlich die Exception mittels vardump() genauer betrachtete, welche NACurlErrorType zurücklieferte, war der Fall schnell sonnenklar:

...
[message:protected] => SSL peer certificate or SSH remote key was not OK
...

Nun … gut! Was macht man da? Ich habe die Datei NAApiClient.php gepatcht, indem ich cURL mit der auf false gesetzten Option CURLOPT_SSL_VERIFYHOST sage, unverifizierte SSL-Zertifikate kommentarlos zu akzeptieren:

...
        else 
        {
            $opts[CURLOPT_HTTPHEADER] = array('Expect:');
        }
        
        $opts[CURLOPT_SSL_VERIFYHOST] = false;
        
        curl_setopt_array($ch, $opts);
...

Bei einer API wie Netatmo ist diese manuell herbeigeführte Schwachstelle zu verantworten. Ginge es um Mailverkehr oder Online-Banking, würde ich eine solche Option definitiv nicht aktivieren.

Tags: , , , , , , , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 18. September 2013

Hostpoint: Immer mal wieder zickt die Datenbank …

Irgendwann ab den frühen 2000ern habe ich alle meine Web-Projekte über das Shared Hosting von Hostpoint AG im Internet bereitgestellt, und dort sind sie in den meisten Fällen noch heute.

Spätestens seit ich diese mit eMeidi.smt laufenden Web-Sites jede Minute mit Pingdom überwache, realisiere ich, wie instabil Hostpoints Hosting ist. Verglichen mit einem an der Uni Bern gehosteten virtualisierten Root-Server (Debian und VMware ESX) und eMeidi.com, welches beim Hoster meines Vertrauens Cyon GmbH in Basel läuft, haben wir es bei Hostpoint mit einem hostingmässigen Drittwelt-Land zu tun.

Dank den vom eMeidi.smt im Dateisystem abgelegten Fehlermeldungen lässt sich rückwirkend jeweils rasch eruieren, wo denn das Problem des Pingdom-Alarms lag. Als Beispiel sei hier der Ausfall vom 13. September 2013 zwischen 8:47 und 9:23 erwähnt:

#2003: Can't connect to MySQL server on 'sekneueg.mysql.db.internal' (13) in /home/sekneueg/public_html/irgendwo/mysql.class.php:240 for URI </> with referer <unknown>

Tjach, dumm gelaufen, ne? In den letzten 30 Tagen betrug die Uptime für diese spezifische Web-Site nur 99.68%, was Ausfällen von insgesamt 2 Stunden und 21 Minuten entspricht. Die längsten Ausfälle fanden am 26. August (57 Minuten), 13. September (36 Minuten) und am 22. August (11 Minuten) statt. Erbärmlich, zumal es sich dabei nicht etwa um Wartungsarbeiten mitten in der Nacht gehandelt hat, sondern um Ausfälle während Bürozeiten.

Der Fall ist klar: Die Profis von heute hosten bei der Cyon GmbH. Da hilft es auch nichts, wenn der Ausfall-anfällige Konkurrenzhoster aus Rapperswil-Jona den bloggenden Tom anheuert – dessen Lohn (sorry, Tom!) würde man lieber in bessere und stabilere Hard- und Software stecken als unnütze Gutfühl-PR.

Tags: , ,
Labels: Web

3 Kommentare | neuen Kommentar verfassen