TLS und nginx

Wo ich im letzten Beitrag schon etwas über den HSTS Header geschrieben habe, habe ich die Gelegenheit genutzt
und meine TLS Einstellungen im nginx etwas zu optimieren und strikter zu konfigurieren.

Ziel: Konsquenter Einsatz von Forward Secrecy und nur noch Nutzung von starken Verschlüsselungen.
Nach etwas Recherche und herumspielen schaut der entsprechende Bereich meiner nginx Konfiguration jetzt so aus:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
            ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:
            ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
            ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:
            ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
ssl_session_cache shared:DEVHSSL:10m;

Erklärung zu den einzelnen Punkten:
Weiterlesen >>

HSTS in nginx aktivieren

Eine zunehmende Anzahl an Webseiten (so wie auch dieser Blog hier) ist mittlerweile erfreulicherweise nur
noch per SSL geschützer Verbindung zu erreichen („https://“).

Durch einige Magic ist es jedoch trotzdem möglich, einem unachtsamen Benutzer ungewollten Code unterzuschieben.
Diesem Problem nimmt sich der RFC 6797 an, welcher eine Funktion namens „HTTP Strict Transport Security“ oder
kurz „HSTS“ beschreibt. In aller Kürze erklärt sorgt dieser Header dafür, das der Browser weiß, das eine Webseite
ausschließlich per HTTPS besucht werden möchte. Wer mehr über HSTS erfahren möchte sollte sich einige der Links
am Ende des Artikels anschauen.

Wie aktiviere ich nun HSTS für meine SSL gesichterte Webseite wenn ich nginx als Webserver einsetze? Sehr einfach:
Zu der bestehenden Konfiguration wird einfach in den Server Abschnitt diese Zeile eingefügt:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

Nach dem reload von nginx sollte dieser Header bereits ausgeliefert werden, ganz einfach zu testen mittels curl:

# curl -Ik https://blog.devh.de
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 05 Feb 2014 10:12:50 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Pingback: https://blog.devh.de/xmlrpc.php
Strict-Transport-Security: max-age=31536000; includeSubDomains

Das wärs also schon, damit haben wir die (Internet-)Welt mal wieder ein kleines wenig sicherer gemacht.
Links nach dem Klick.

Weiterlesen >>

Headless VirtualBox auf Linux Server

Auf einem Linux Server sollen ein paar zusätzliche (virtuelle) Maschinen laufen. Diese
sollen dann einzelne Dienste übernehmen, wie z.B. mySql oder auch einen Starboundserver.

Hierbei habe ich folgende Anforderungen:

  • Eine beliebe Anzahl an zusätzlichen Maschinen
  • Eingermaßen einfache Administration
  • Keine zusätzlichen IPs nötig; das Host-Linux muss den Traffic routen
  • Virtuelle Maschinen müssen von extern erreichbar sein

KVM, Xen und wie sie alle heißen waren mir zu komplex und übertrieben für diese eigentlich
einfachen Aufgaben. Daher kam ich auf die Idee, auf dem Server die zusätzlichen Gäste mit
VirtualBox zu virtualisieren. Der Traffic wird dann über iptables zu / von den virtuellen Machinen
geroutet. Hier meine Schritte.
Weiterlesen >>

Starbound Server unter Windows

Zwischendurch muss auch mal ein Spielchen sein. Und zur Zeit spiele ich gerne Starbound (http://playstarbound.com/).Das Ganze ist zwar noch Beta, macht aber so schon eine Menge Spaß. Am meisten Spaß macht es mit mehreren Spielern und dafür bietet sich ein Server an. Ich beschreibe hier also mal den (eigentlich recht einfachen) Prozess einen Server unter Windows ans Laufen zu bekommen.
Weiterlesen >>

IPv6 per SixXS Tunnel mit Vigor2920

Aktuell beschäftige ich mich mit IPv6, und als erster Schritt soll mein Heimnetzwerk hiermit ausgestattet werden.
Da mein Internetprovider mir aktuell noch kein IPv6 zur Verfügung stellt benötige ich einen IPv4 auf IPv6 Tunnel.
Von den diversen kostenlosen Tunnel Providern habe ich SixXS ausgewählt, unter anderem auch, da mein Vigor2920 Router das von SixXS verwendete AYIYA Protokoll nativ unterstützen können soll.

Meine Einrichtung besteht im wesentlichen aus folgenden Schritten:
Weiterlesen >>

Bind9 mit RRL Patch erstellen

Für mich zur Erinnerung…

  1. Aktuelle Bind9 Version (9.9.4rc1) herunterladen und entpacken
    wget http://www.isc.org/wp-content/plugins/email-before-download/download.php?dl=fb67b91f00f1870e2919670cab569133
    tar xfvz bind-9.9.4rc1.tar.gz
  2. Den Patch für RRL (Response Rate Limit) herunterladen
    wget http://ss.vix.su/~vjs/rpz2+rl-9.9.4rc1.patch
  3. Patch in die Bind9 Sourcen einpflegen
    cd bind-9.9.4rc1/
    patch -p0 -l < ../rpz2+rl-9.9.4rc1.patch
  4. Um die selben Optionen zum kompilieren zu verwenden wie die bereits installierte Version mit named -V schauen, welche verwendet wurden
  5. Daraus ergibt sich folgender configure Aufruf:
    ./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc/bind --localstatedir=/var --enable-threads --enable-largefile --with-libtool --enable-shared --enable-static --with-openssl=/usr --with-gssapi=/usr --with-gnu-ld --with-geoip=/usr --enable-ipv6 CFLAGS="-fno-strict-aliasing -DDIG_SIGCHASE -O2" LDFLAGS="-Wl,-Bsymbolic-functions -Wl,-z,relro" CPPFLAGS="-D_FORTIFY_SOURCE=2" --enable-rrl
  6. Kompilieren und installieren make && make install
  7. Ergebnis:
# named -V
BIND 9.9.4-rpz2+rl.13214.22rc1 (Extended Support Version)  built with '--prefix=/usr' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--sysconfdir=/etc/bind' '--localstatedir=/var' '--enable-threads' '--enable-largefile' '--with-libtool' '--enable-shared' '--enable-static' '--with-openssl=/usr' '--with-gssapi=/usr' '--with-gnu-ld' '--with-geoip=/usr' '--enable-ipv6' 'CFLAGS=-fno-strict-aliasing -DDIG_SIGCHASE -O2' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro' 'CPPFLAGS=-D_FORTIFY_SOURCE=2' '--enable-rrl'
using OpenSSL version: OpenSSL 1.0.1 14 Mar 2012

Jetzt ist es möglich, in der named.conf die Option zur Rate Limit einzutragen

options {
        rate-limit {
                responses-per-second 25;
                window 5;
        };

};

Weitere Informationen zu RRL hier

Nginx und IPv6

Von meinem Provider habe ich ein /64 IPv6 Netz zugewiesen bekommen, und natürlich möchte ich dieses auch für meinen Blog in Betrieb haben. Also gilt es, ngnix beizubringen bitte auch auf IPv6 zu reagieren.

Weiterlesen >>

log4net und rsyslog

Zum Logging nutze ich innerhalb meiner Programm das hervorragende log4net.
Dieses bietet auch die Möglichkeit, die Logausgaben remote an einen rsyslogd zu senden.
Hiefür muss in der log4net.config des Programms um diesen Appender ergänzt werden:

<appender name="RemoteSyslogAppender" type="log4net.Appender.RemoteSyslogAppender">
  <identity value="programmname" />
  <layout type="log4net.Layout.PatternLayout" value="%-5p %type: %m%n"/>
  <remoteAddress value="remote.syslog.server.addresse" />
</appender>

Und natürlich der Appender aktiviert werden:

<root>
  <level value="ALL" />
  <appender-ref ref="RemoteSyslogAppender" />
</root>

Damit die Daten auf dem rsyslog Server ankommen, und entsprechend zugeordnet werden können
muss dort eine passende Config angelegt werden, in meinem Beispiel

if $source == 'server' and $programname == 'programmname' then /var/log/programmname.log

Wichtig ist, dass der Wert der „identity“ am rsyslog als „$programname“ ankommt.
Wenn jetzt Port 514 UDP zu dem rsyslog Server in der Firewall geöffnet ist, sollten die Log-Daten sauber
im passenden Logfile ankommen.

C# – Custom Exception

Immer wieder benötige ich in Programmen meine eigenen Exceptions, um z.B. im Logging schneller die entsprechenden Fehler zu finden. Und weil ich es leid bin, immer wieder danach zu suchen packe ich hier mal den Code dazu hin.

Weiterlesen >>

AdSense und WordPress

Nicht das mein Blog übermäßig gut besucht wäre, so habe ich mir trotzdem entschieden,
mal Google AdSense Anzeigen zu schalten. Eigentlich mehr aus Interesse wie so etwas vonstatten
geht als damit Geld zu verdienen.

Nachdem ich einige Plugins ausprobiert habe, die mir alle etwas übertrieben vorkamen und
ich außerdem der Meinung bin, weniger ist mehr (Plugins wollen auch wieder ständig gepatcht
werden uns so…) habe ich nun eine einfache und simple Lösung gefunden.

Weiterlesen >>