Wie man PHPMyAdmin beschleunigen kann

Habt Ihr auch einen „modernen“ PHPMyAdmin installiert, der bei einigen Anzeigen gefühlte Äonen braucht, um den banalen Inhalt der Datenbank anzuzeigen ?

Ja ? Habt Ihr auch schon gedacht, daß es an der DNS Auflösung liegen könnte ?
Ja ? und es hat so gar nichts gebracht ein schnelleres Cache  einzustellen ?
Ja ? Na dann schaltet doch mal auf ENGLISCH als PMA Sprache um, Ihr werdet Euch wundern !

Es ist einen :facepalm: wert, denn für jede popplige Seite, sei es per AJAX oder per URL Link, lädt PHP die komplette, wirklich MB große Übersetzung, wenn man Deutsch eingestellt hat. Da hilft auch kein Filecache mehr um das zu beschleunigen!

Wie man sowas findet

Sehen tut man das erst, wenn man mit STRACE den Apachen und die ausgeführten PHP Programme traced.

strace -e open,read -f -p `pidof httpd | sed -e "s/ /,/g"`

Es folgt so etwas, in einer schieren Unzahl von Zugriffen, weil PHP echt groß ist und ne Menge einlesen muß.

[pid 10052] open(„/usr/lib/php/modules/intl.so“, O_RDONLY|O_CLOEXEC) = 3
[pid 10052] read(3, „…………………………….jede Menge Text ………………“, 512) = 512

Das oben ist keiner der verdächtigen Zugriffe, zeigt aber, wie man die READs den Dateien zuordnet. Das Orangerote ist der FILEDESCRIPTOR, kurz FD.  Jede Datei die man öffnet als Programm, bekommt einen eindeutigen FD, damit man das als Programm zuordnen kann.

Typisch für PHP und die Übersetzungen sind diese Zeilen :

[pid  9436] lseek(4, 93205, SEEK_SET)   = 93205
[pid  9436] lseek(4, 93205, SEEK_SET)   = 93205
[pid  9436] read(4, „Database %s has been dropped.\0Database Log\0Database client version:\0Database comment\0Database for user account\0Database level tabs\0Database name\0Database name template\0Database operations\0Database seems to be empty!\0Database server\0Database structure\0Database system or older MySQL server to maximize output compatibility with:\0Database tree separator\0Database used for relations, bookmarks, and PDF features. See [a@http://wiki.phpmyadmin.net/pma/pmadb]pmadb[/a] for complete information. Leave blank for no support. Suggested: [kbd]phpmyadmin[/kbd].\0Database-level tabs\0Database-specific privileges\0Database:\0Databases\0Databases display options.\0Databases statistics\0Databases:\0Date\0Deactivate now\0Deactivate tracking for %s\0Debug SQL\0Dec\0December\0Default\0Default database tab\0Default format; be aware that this list depends on location (database, table) and only SQL is always available.\0Default language\0Default server\0Default server tab\0Default sort order for tables with a primary key.\0Default sorting order\0Default ta“…, 8192) = 8192

Warum PHP 8KB Blöcke einliest, statt min. 64KB wird ewig ein Geheimnis bleiben, scheint aber ein Relikt aus den Anfängen zu sein 🙂

Es gilt, wenn der einzulesende Datenblock, der Blockgröße auf im Filesystem entspricht, dann kann das OS den Datenstrom am effizientesten einlesen. Der Datenzugriff sollte nicht größer als die Blockgröße sein, wobei ganze Mehrfache der Blockgröße ok wären. Wenn jetzt wie bei PHP 8KB eingelesen werden, die Datenblockgröße aber 64 KB ist, braucht das OS schon 8x soviele Filezugriffe nebst Performanceoverhead durch die Lesefunktionen, um den gleichen Inhalt eines Blockes einzulesen. Dazu muß die Platte den Kopf 8x zu dem Datenblock fahren, falls auf einem System noch mehr los ist, als nur dieses einzige Programm. Was man getrost annehmen kann.

Sowas ist einfach ineffizient. Ganz besonders ineffizient, wenn die Datei, die man da einlesen will, mehrere MB groß ist.

Ich hoffe, es hilft Euch ein bisschen bei Euren eigenen Problemen.

 

 

Neue TLS Probleme beim BSI

Vor zwei Wochen habe ich auf Probleme beim EMailversand des BSI aufmerksam gemacht. Damals bekam ich nach 24h die Rückmeldung, daß die Probleme behoben seien.

Leider mußten wir heute feststellen, daß das BSI Mailserver benutzt, die nicht-deterministisch sind, sprich, mal gehts, mal nicht 😉  Einer unser Server, der die gleiche Konfig hat wie alle anderen mit StartTLS anbietet, bekam nun unverschlüsselt Post vom buerger-cert.de Mailserver, obwohl dieser keine Stunde vorher einem anderen Server eine TLS verschlüsselte Verbindung angeboten hat… HMMMM!

Da haben wir dann mal genauer hingesehen und fanden noch weitere Probleme beim TLS des bei der OpenIT GmbH gehosteten Servers:

A) Es fällt auf, daß buerger-cert.de als MX gar keinen eigenen Mailserver einsetzt, sondern den zentral Mailserver von Openit.de benutzt :

2016-08-23 13:18:08 1bc9iZ-0005l4-Nl => mailversand@buerger-cert.de R=dnslookup T=remote_smtp H=mx.openit.de [217.69.65.200] X=TLSv1:AES128-SHA:128 C=“250 Ok: queued as E9B4011A055″

Das wird den gleichen Sicherheitslevel haben wie mx.kundenserver.de aka 1und1 Mailserver, oder vielleicht doch nicht ? 🙂

B) Nein, haben sie nicht, denn der dort eingesetzte Postfix Mailserver (220 mx.openit.de ESMTP Postfix)  scheint „etwas“ veraltet zu sein, oder auf veralteter Software zu laufen, denn er bietet nur TLS 1.0 an. Experten kennen das auch als SSLv3 und das ist ja bekanntlich geknackt worden und sollte nicht mehr eingesetzt werden.

Jetzt muß man 1und1 bescheinigen, wenigstens konsequent zu sein und überall TLS 1.2 einzusetzen, aber dafür immer noch SSLv3 anzunehmen 😀 Was die Macher von ssl-tools.net dazu meinen, kann man hier sehen :

https://ssl-tools.net/mailservers/1und1.de    (Ja, den Gag versteht man nur, wenn man den Link aufruft 😉 )

Was ssl-tools.net vom bueger-cet.de Mailserver hält, sieht man hier :

BSI-Neue-Probleme-mit-TLS(Stand: 25.8.2016 )

C) Die Mailserver im Cluster sind unterschiedlich konfiguriert … hää ?????? Einer kann TLS 1.2 der nächste nicht ??  Da kann man nur den Kopf schütteln.

Fazit

Auch wenn das BSI ein Problem gelöst hat, es sind noch viel mehr vorhanden. Bin mal gespannt, wann das behoben wird, denn die Meldung an das BSI ging natürlich vor diesem Artikel raus 🙂

Blog auf LE HTTPS umgestellt.

Ich habe mein Blog auf HTTPS mit einem Lets Encrypt Zertifikat umgestellt.

Falls Ihr mit den RSS Feeds Probleme beim Abholen bekommt, meldet Euch bitte.

Wie man das macht : )

Als erstes bestellen wir mal das Zertifikat :

/etc/httpd/letsencrypt/letsencrypt.sh -c -d marius.bloggt-in-braunschweig.de -d www.marius.bloggt-in-braunschweig.de

Obiges geht natürlich nur, wenn Ihr den Bash Clienten von Lets Encrypt auch dort instaliert habt.

Dann legen wir im Apache eine HTTPS Site an, z.B. hier : /etc/httpd/sites/1_marius.bloggt-in-braunschweig.de

<VirtualHost *:443>
    SSLProxyEngine On
    ServerName marius.bloggt-in-braunschweig.de
    ServerAlias *.marius.bloggt-in-braunschweig.de
    ... Sachen die Euch nichts angehen :) ...    
    Header always set Strict-Transport-Security "max-age=31556926 includeSubDomains" env=HTTPS
    SSLEngine on
    SSLInsecureRenegotiation off
    SSLProtocol TLSv1.2
    SSLHonorCipherOrder on
    SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:HIGH:!MD5:!aNULL:!EDH:!RC4:!RC4
    SSLCertificateKeyFile /etc/httpd/letsencrypt/certs/marius.bloggt-in-braunschweig.de/privkey.pem
    SSLCertificateFile /etc/httpd/letsencrypt/certs/marius.bloggt-in-braunschweig.de/cert.pem
    SSLCACertificateFile /etc/httpd/letsencrypt/certs/marius.bloggt-in-braunschweig.de/chain.pem

</VirtualHost>

Und dann muß man seiner Site noch sagen, daß sie alle HTTP Zugriffe auf HTTPS umleiten soll, bevor diese stattfinden.

RewriteCond %{HTTP_HOST} ^www.marius.bloggt-in-braunschweig.de
RewriteRule (.*) https://marius.bloggt-in-braunschweig.de/$1 [R=301,L]

RewriteCond %{HTTP_HOST} .*marius\.bloggt-in-braunschweig\.de
RewriteCond %{SERVER_PORT}   !^443$
RewriteRule  (.*)  https://%{HTTP_HOST}/$1   [L]

Das meint, daß wer WWW. aufruf, auf den Hauptdomainnamen umgeleitet wird. (Am.d.R. www. braucht kein Mensch mehr)
Die zweite Anweisung leitet alles was nicht auf Port 443 ankommt, auf Port 443 um, so daß es verschlüsselt wird.

Das wars.

Jetzt bleibt nur die Frage zu klären: „Wieso hast Du auf https umgestellt, wo BIB.de doch ohnehin schon ein LE Zertifikat hatte ?“

Na weil das bei Subdomain nicht anders geht, da LE keine Wildcardzerts ausstellt und 100 Einträge im Hauptzertifikat sind auch irgendwann zu ende.