Lieber E-Mail-benutzer;

Geschrieben von everflux am Januar 6th, 2014

Das ist das original Subject der wohl miesestens Phishing Mail, die ich je bekommen habe. Aber da darf sich jeder selbst ein Bild machen:

 

 

From: "HypoVereinsbank" <comfortaircon@bluestarchannel.com>
Subject: Lieber E-Mail-benutzer;

Lieber E-Mail-benutzer;

UNS HABEN SIE ZUGRIFF 23,432 Boxen überschritten your List setzen
Web-Service-/ Admin, und SIE Werden problème Haben, Das Senden und
E-Mails EMPFANGEN, Bis SIE wieder zu überprüfen. Wann & SIE DURCH Sich
einen Klick Markt auf Upgrade-
unten stehenden Link-und filling SIE sterben Details zu Ihrem Konto
überprüfen
Bitte Markt auf Musikersuche Höhle untenstehenden Link-oder KOPIEREN
Einfügen in Ihrem Browser, ähm Den Inhalt der Zwischenablage zu
überprüfen.

//LINK entfernt//

Achtung!
Andernfalls Werden Nur begrenzten zugang zu E-Mail-posteingang. WENN
Nicht Markt auf Ihr Konto Innerhalb von Drei Tagen Über Aktuelles zu
aktualisieren
Benachrichtigung, WIRD Ihr Konto Dauerhaft geschlossen Werden.
Mit freundlichen Grüßen,
System Administrator ®

Dazu gibt es dann auch eine “Webseite”, diese sieht dann so aus:

webmail-update

Wenn das mal nicht …. das Webmail der HypoVereinsbank ist!

Vagrant + Nginx/Apache: Korrupte Daten bei statischen Dateien

Geschrieben von everflux am Dezember 7th, 2013

Das hat echt eine Weile gedauert dieses Yak zu shaven: Dank Vagrant und VirtualBox habe ich ein Web-Projekt mit einer leicht zu startenden Entwicklungsumgebung versehen.

Das hat vorher auch schon prima geklappt, und das Verfahren hat sich bewährt – besonders, wenn das Setup etwas komplexer ist, oder es Entwickler gibt die nicht mit Linux/Debian/Ubuntu arbeiten. Jedoch hat mich heute ein Bug gequält den ich wirklich einige Stunden suchen durfte. Alles fing damit an, dass es JavaScript Fehler hagelte.

Uncaught SyntaxError: Unexpected token ILLEGAL

Jedoch nur, wenn die Datei aus Vagrant per nginx ausgeliefert wurde. Mit Netbeans und dem eingebauten mini-Webserver für HTML5 Projekte lief alles super.

Eine Google Suche brachte unglaublich viele Ergebnisse – jedoch keine Lösung. Man solle nach bösen Zeichen schauen, am besten nach Whitespace das komisch ist. Eine super Chance auf den Holzweg abzubiegen und da eine Weile unterwegs zu sein.

Die Quellcode-Ansicht von Firefox brachte dann erstaunliches zu Tage:

Screenshot from 2013-12-07 21:30:49

Das sieht in der Tat kaputt aus. Mal schnell im Editor schauen – nein da ist alles gut. Auf der Vagrant Maschine nachschauen, auch da alles in Ordnung. (Sowas in der Art hatte ich schonmal wenn die Guest-Additions von VirtualBox nicht mehr so recht zur Umgebung passen. Aber das war hier nicht der Fall.)

Auch das Einfügen von dummy-Text änderte weder etwas an dem Muell am Ende der Datei, noch wurde der Text angezeigt. Nanu, was kann das sein? Schnell noch einen Holzweg her! “Ist bestimmt Caching.”

Das Rätsels Lösung ist dann ein 5 Jahre alter Bug in VirtualBox, wohl auch bei Apache oder sogar Versionsverwaltungssoftware zuschlagen kann: VirtualBox hat Probleme mit direktem mmap zwischen zwei Filehandles, wenn es sich dabei um per vboxfs gemountete Verzeichnisse handelt.

Hier das Ticket dazu: https://www.virtualbox.org/ticket/819

Bei nginx kann man sendfile sehr einfach ausschalten:

sendfile off;

Danach klappt alles wie erwartet.

CorpusResponseInformationArrayException

Geschrieben von everflux am August 7th, 2013

So gesehen bei T-Online…

exception

Multi-Core vs. Single-Core: Load Testing unter Linux

Geschrieben von everflux am Juni 29th, 2013

Inzwischen sind multi-core oder sogar multi-CPU Maschinen weit verbreitet. Um etwas besser abschätzen zu können, wie gut eine Anwendung mit steigender Anzahl von CPU (Kernen) skaliert, möchte man manchmal eine Anwendung auf einzelne Kerne oder sogar einen einzigen beschränken.
Auch fuer den Fall, dass man den selben Rechner als Test-Agent und zur Ausführung des Tests (also client und server) verwenden möchte, kann es sich lohnen die zu testende Anwendung und den Test-Agenten mit beschränkten Ressourcen zu starten, damit diese nicht so stark miteinander konkurrieren.
Unter Linux (Ubuntu, Debian, Arch…) gibt es das Utility “taskset”. Damit kann die CPU Affinität eines Prozesses beim start oder sogar nachträglich eingestellt werden.
Beispielsweise kann man damit dann eine Java Webanwendung folgendermaßen auf einen Core begrenzen:

taskset 1 [start-kommando]

In meinem Fall nutze ich jmeter um gegen eine so gestartete Anwendung zu testen:

env MAVEN_OPTS="$MAVEN_OPTS -noverify" taskset 1 mvn -Dspring.profiles.active=dev jetty:run

Schon beim Start bemerkt man recht deutlich, wie gut Java von Mehrprozessorarchitekturen profitiert. Selbst wenn die eigene Anwendung nicht stark parallelisert ist.

nginx: SSL mit Perfect-Forward-Secrecy und SPDY unter Ubuntu

Geschrieben von everflux am Juni 27th, 2013

Es gibt SSL und es gibt SSL mit Perfect-Forward-Secrecy (PFS). Der Unterschied: Bei perfect forward secrecy kann durch den Verlust des privaten Schlüssels nicht im Nachhinein aufgezeichnete Kommunikation der Vergangenheit entschlüsselt werden. Der Grund liegt darin, dass der zufällige Sitzungsschlüssel nicht zwischen den Parteien mittels public-key-cryptography versendet wird, sondern mit einem speziellen Verfahren berechnet wird. Bei diesem Diffie-Hellmann-Schlüsselaustausch berechnen beide Parteien gemeinsam einen Sitzungsschlüssel. Der private Schlüssel hilft später nicht den Sitzungsschlüssel zu erlangen, jeder Sitzungsschlüssel muss einzeln mit speziellen Verfahren gebrochen werden, was aufwendig ist.

Damit Besucher einer Webseite keine Warnung des Browsers erhalten, weil dem Zertifikat der Webseite nicht vertraut wird, empfiehlt es sich, das Zertifikat von einer CA signieren zu lassen, die von den Browserherstellern unterstützt wird.
Ein Anbieter kostenloser Zertifikate ist “StartSSL”: http://www.startssl.com/

Wenn man lediglich SSL und perfect-forward-security mit nginx konfigurieren moechte, funktioniert dich bereits mit Ubuntu 12.04 Precise (LTS). Fuer SPDY reicht das alleine nicht: Die OpenSSL Version ist nicht aktuell genug und nginx ist nicht mit dem Modul kompiliert worden. Aber dazu gibt es ein PPA :-)

Erster Schritt: SSL Zertifikat besorgen. Mit diesem Aufruf (www.server.com durch die korrekte Domain ersetzen) erzeugt man die nötigen Dateien (private key und certificate signing request).

openssl req -nodes -newkey rsa:4096 -nodes -keyout myserver.key -out server.csr \
-subj "/C=DE/ST=State/L=City/O=Company/OU=IT/CN=www.server.com"

Zweiter Schritt: Bei StartSSL signieren lassen. Das Ergebnis speichert man in der Datei “www.example.com.pem”.

Dritter Schritt: CA Zertifikat herunterladen

wget http://www.startssl.com/certs/sub.class1.server.ca.pem
wget http://www.startssl.com/certs/ca.pem

Vierter Schritt: Wir erzeugen eine Datei mit den Diffie-Hellmann-Parametern

openssl dhparam -rand - 1024 > dhparam.pem

Fünfter Schritt: Alles zu einer certificate-chain vereinigen.

cat ww*.pem dhparam.pem sub.class1.server.ca.pem ca.pem > www.example.com.chain.pem

Sechster Schritt: Konfiguration von nginx mit SSL – die IP 1.2.3.4 ersetzt man durch die korrekte.

server {
#your IP here
listen 1.2.3.4:443;
server_name www.example.com;
#ssl
ssl on;
ssl_certificate /etc/nginx/ssl/example.com.chain.pem;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
#PFS
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers On;
ssl_ciphers ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH;
...
}

Fertig bis auf SPDY Support. Das ganze kann man mit dem SSL Check Tool von https://www.ssllabs.com/ssltest/ zusätzlich auf korrekte Konfiguration prüfen.

Für SPDY Support geht es so weiter:
Installation einer nginx Version mit SPDY Support die statisch gegen OpenSSL gelinkt ist, so dass NPN Support (Next protocol negotiation) funktioniert, auch wenn Ubuntu 12.04 eigentlich mit einem älteren OpenSSL kommt.

sudo add-apt-repository ppa:chris-lea/nginx-devel
sudo apt-get update
sudo apt-get install nginx-full

nginx Konfiguration anpassen:

server {
...
listen 443 ssl spdy default_server;
...
}

Damit auch User, die nicht per SSL auf die Seite zugreifen SPDY erkennen und umschalten, kann man noch diesen Header setzen:


add_header Alternate-Protocol 443:npn-spdy/2;

Als Performance Verbesserung kann noch diese Option zur Aktivierung von OCSP Stapling verwendet werden:

#google public dns
resolver 8.8.8.8;
ssl_stapling on;
ssl_trusted_certificate ssl/www.example.com.chain.pem;

Leider ist mit der Apache Version, die derzeit mit Ubuntu ausgeliefert wird, kein performantes perfect forward secrecy möglich. Der Apache http in der (uralt) Version hat keine Unterstützung für elliptic curve cryptography mit der die gemeinsame Berechnung eines Sitzungsschlüssels schnell und ressourcenschonend möglich ist.
Es gibt zwar andere Algorithmen die mittels Diffie-Hellmann PFS realisieren und auch mit dem Apache httpd funktionieren, jedoch sind diese für größere Webseiten nicht ohne zusätzliche Hardware praktikabel.

Openfire User Service Plugin: NoClassDefFoundError

Geschrieben von everflux am Mai 24th, 2013

Fuer den OpenFire XMPP/Jabber Server gibt es ein ganz praktisches Plugin, dass es einem erlaubt per HTTP Schnittstelle User zu administrieren (anlegen/loeschen/editieren), ohne dass man sich in das Admin UI einloggen muss.

Vor allem zur Integration mit anderen Systemen eignet sich das, wenn man nicht ueber LDAP oder Datenbankintegration arbeiten kann, sondern die User Daten replizieren muss.

Das Plugin laesst sich ueber den OpenFire Plugin Manager sehr einfach installieren, jedoch resultiert dies dann bei Verwendung in unangenehmen Meldungen.

HTTP ERROR: 500

gnu/inet/encoding/Stringprep

RequestURI=/plugins/userService/userservice
Caused by:

java.lang.NoClassDefFoundError: gnu/inet/encoding/Stringprep
     at org.jivesoftware.openfire.plugin.userService.UserServiceServlet.doGet(UserServiceServlet.java:130)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)

Es gibt dazu in der ignite realtime Community gibt es dazu auch einen Thread: http://community.igniterealtime.org/thread/44326

Die dort vorgeschlagene Lösung ist das User Service Plugin neu zu bauen, nachdem man die Sourcen vom Openfire User Service Plugin lokal ausgecheckt hat.

Praktischer kann dabei die Lösung sein, die notwendige Dependency dem Openfire direkt mitzugeben:

Dazu lädt man libidn, z.B. von hier http://ftp.gnu.org/gnu/libidn/libidn-1.26.tar.gz, packt das Archiv aus und kopiert die Date libidn-1.26.jar in das lib Verzeichnis von Openfire. Danach einfach den Openfire Jabber Server neu starten.

Java Memory-Leaks mit plumbr finden

Geschrieben von everflux am April 2nd, 2013

Java hat einen schlechten Ruf, auch heute noch: Langsam, braucht zu viel Speicher, umständlich und und und. Das mit dem Speicher ist bei Java gerade bei Webanwendungen (oder Enterprise-Anwendungen) wirklich so eine Sache. Bei nicht wenigen Projekten habe ich gesehen, dass Java Server (Tomcat, Websphere, …) Nachts regelmäßig durchgestartet werden, um dafür zu sorgen, dass es keine Speicherprobleme gibt.
Die Speicherprobleme kommen jedoch nicht von Java selbst, sondern es handelt sich in der Regel um Memory-Leaks. Diese können auch bei manueller Speicherverwaltung (malloc/free vs. Garbage Collection bei Java) auftreten. Eine ganz besondere Form von Speicherlecks sind sogenannte “Permgen-Leaks”. Permgen ist der Speicherbereich der Sun/Oracle Hotspot VM in der z.B. Java Klassen gehalten werden. Solange diese gebraucht werden, bleiben die Klassen geladen. Klassen gehören zu einem Classloader, eine Klasse, die von verschiedenen Classloadern geladen wurde, stellt sich der Anwendung in der Regel als verschiedene Klassen dar. Die damit einhergehenden Probleme wenn das innerhalb der selben Anwendung passiert können nochmal ganz andere sein.
Bei Web-Anwendungen gibt es einen Classloader, der für eine deployte (oder deutsch “verteilte”, “zur Verfügung gestellte”) zuständig ist. Wird die Anwendung undeployt, jedoch der Container (Tomcat z.B.) nicht heruntergefahren sollte dennoch der Speicher der Anwendung, insbesondere auch der Permgen Speicher, wieder freigegeben werden.
Passiert das nicht, führt das unweigerlich nach mehreren Re-Deployments zu einem “Out of Memory: Permgen” Problem.
Aus diesem Grund werden dann oft die Server zusammen mit dem Deployment neu gestartet. Das kann Zeit kosten und ist in meinen Augen die Garantie dafür, dass die Speicherlecks auch dauerhaft nicht behoben werden: Die Entwickler spüren die Schmerzen nicht, das senkt die Motivation etwas zu tun. Bewegt man sich in Richtung Continuous-Integration oder gar Continuous-Deployment kommt ständiges Neustarten von Servern nicht in Frage: Es dauert lange, Caches sind danach kalt.
Bisher habe ich Speicherlecks daher stets gejagt: VisualVM (Sun/Oracle, Teil des JDK), Eclipse MAT (SAP Entwicklung, OpenSource) oder auch YourKit (Profiler, kommerziell) und findbugs (OpenSource) haben mir gute Dienste geleistet. Kommt man ohne EAR aus, hilft auch der in Tomcat integrierte Memory-Leaks-Prevention-Listener, ähnliches bietet auch Jetty. Nicht immer hat man reines WAR deployment oder nur Java Servlets, und die manuelle Suche kann sehr zeitintensiv werden.
Weiterlesen »

Netbeans + git = merge commit bei pull?

Geschrieben von everflux am März 16th, 2013

Netbeans unterstützt derzeit keine interaktive Auswahl der Optionen “merge commit” oder “rebase” wenn bei einem git pull kein fast-forward möglich ist. Dazu gibt es diesen Netbeans bug: http://netbeans.org/bugzilla/show_bug.cgi?id=213855

Als kleiner Work-Around ist es jedoch mit git Bordmitteln möglich, das Default-Verhalten von git selbst anzupassen. Dazu kann man auf einem Branch das Verhalten konfigurieren, z.B. dem master branch:

git config branch.master.rebase true

Ich hoffe dieser kleine Netbeans Tipp hilft auch anderen Usern :)

James Bond – nicht gezahlt?

Geschrieben von everflux am Oktober 30th, 2012

Der neue James Bond ist (wieder einmal) ein Meisterwerk an Product-Placement. Heineken hat einen mittleren zweistelligen Millionenbetrag investiert, habe ich gelesen.

Doch wie ist das eigentlich, wenn nicht bezahlt wird. Insbesondere wenn eine dramatische Szene “versehentlich” ein Produkt eines Nichtzahlers, womöglich sogar eines Konkurrenten zu sehr ins Bild rückt?

Da gibt es eine ganz pragmatische Lösung in guter alter James Bond Manier: Dafür sorgen, dass es keiner sieht.

Weiterlesen »

Ubuntu boot partition voll

Geschrieben von everflux am September 14th, 2012

Wenn Ubuntu sich beklagt, dass die boot Partion bald voll ist, dann muss man etwas unternehmen.

Das ist eigentlich sogar sehr einfach!

Die boot Partition beinhaltet den Kernel (das Betriebssystem) und eine RAM-Disk, auf der Treiber und minimale Start-Scripte liegen. Diese werden benötigt, um Treiber und spezielle Geräte wie eine verschlüsselte Startpartion einzurichten.

Nun kann der Speicher, der für diese Dinge benötigt wird, sehr stark wachsen. Vor allem wenn viele Kernel-Updates herausgegeben werden, oder man Virtualbox oder NVIDIA Treiber installiert hat, die viel Speicherplatz benötigen. Wenn man sicher ist, dass mit dem aktuellen Kernel alles funktionier, dann kann man getrost alte Linux Kernel Installationen entfernen um Speicherplatz auf der boot Partition zu sparen.

Ich mache das folgendermaßen:

Termial öffnen

sudo apt-get purge linux-image<tab><tab>

Nun erhält man verschiedene Versionen zur Auswahl.  Ich nehme dann immer alle bis auf die neuesten drei. So kann man bei Problemen nochmal eine Version zurück gehen.

Zum Beispiel entferne ich dann folgende Kernel um auf der boot Partition mehr freien Speicherplatz zu schaffen:


sudo apt-get purge linux-image-3.2.0-23-generic linux-image-3.2.0-24-generic linux-image-3.2.0-25-generic linux-image-3.2.0-26-generic linux-image-3.2.0-27-generic

Analog für die “headers” und andere Image Pakete.

Schon ist Platz für neue Ubuntu Updates, Kernel Updates und Module wie Virtualbox oder proprietäre Grafiktreiber wie NVIDIA.


http://everflux.de/
Copyright © 2007, 2008 everflux. Alle Rechte vorbehalten. All rights reserved.