HowTo: rsync –include-from folder whitelist

Wenn man bei rsync eine Textdatei uebergeben moechte, in der rekursiv zu synchronisierenden Ordner drin stehen geht das mit der Option –include-from. Bei der Textdatei ist darauf zu achten, dass

  1. der komplette Verzeichnisbaum inklusive vorgestellten Ordnern erlaubt ist
  2. Alles verboten ist
  3. *** (drei Sterne) fuer rekursiv stehen

Includes werden mit einem + gekennzeichnet, Excludes mit einem -. Beispiel fuer eine solche rsyncIncludeFrom Datei:

+ /foo/
+ /foo/bar/
+ /foo/bar/baz/
+ /foo/bar/baz/one/***
+ /foo/bar/baz/two/***
+ /foo/bar/baz/five/***
- *

HowTo: ASIX AX88179 USB 3.0 Gigabit Ethernet unter Ubuntu 13.10

Vor kurzem habe ich einen Digitus USB 3.0 Gigabit Ethernet Adapter bekommen. Bei diesem ist ein AX88179 Chip von ASIX verbaut. Er wurde unter Ubuntu Linux 13.10 mit einem 3.11er Kernel problemlos erkannt, funktionierte aber nicht wirklich.

Ursache dafuer scheint das Kernelmodul zu sein, was fehlerhaft ist. Es gibt zwei Wege den Adapter dennoch zum Laufen zu bekommen:

1. Drosseln auf 100Mbit:

sudo ethtool -s eth0 speed 100 duplex full antoneg off

2. Kernel Modul von Herstellerseite herunterladen und kompilieren:

cd /tmp
wget http://www.asix.com.tw/FrootAttach/driver/AX88179_178A_LINUX_DRIVER_v1.9.0_SOURCE.tar.bz2
aptitude install build-essential linux-headers-$(uname -r)
tar -xjf AX88179_178A_LINUX_DRIVER_v1.9.0_SOURCE.tar.bz2
cd AX88179_178A_LINUX_DRIVER_v1.9.0_SOURCE/
make
sudo make install

Mit der letzteren Loesung funktioniert der Adapter bei mir problemlos auch auf Gigabit.

Unix Timestamp vs. Java Timestamp

Wer als Sysadmin mit Java Entwicklern zu tun hat und beide wie selbstverstaendlich ueber Timstamps reden, dann gibt es doch einen entscheidenen Unterschied. Beide Timestamps geben die Zeit seit dem 01.01.1970 00:00:00h wieder. Unix Timestamps jedoch in Sekunden, Java Timestamps in Millisekunden.

Fuer die Praxis:

  • 01.01.2014 00:00:00 als Unix Timestamp:
    user@host:~$ date -d "2014-01-01 00:00:00" "+%s"
    1388530800
    user@host:~$
  • 01.01.2014 00:00:00 als Java Timestamp:
    usaer@host:~$ echo $(date -d "2014-01-01 00:00:00" "+%s")*1000 | bc
    1388530800000
    user@host:~$

HSTS – Was es ist, wie es funktioniert und wie man es in Apache einrichtet

HSTS steht für HTTP Strict Transport Security und ist ein HTTP-Header bei dem der Webserver dem anfragenden Browser mitteilt, das alle Verbindungen nur ueber SSL/TLS aufgebaut werden sollen.
HSTS soll „Man-in-the-middle“ Attacken abwehren oder erschweren. Das Angriffsszenario besteht darin, dass Nutzer in der Regel nie

https

in den Webbrowser eingeben, sondern immer nur

example.net

Die Weiterleitung von http:// zu https:// macht der Webserver. Das sieht dann zum Beispiel so aus:
ohne_hsts

Man kann sehen, dass die erste GET Anfrage mit einem HTTP 302 Weitergeleitet wird und die zweite dann ein 200 OK zurueck liefert. Der Webserver ist in diesem Fall so konfiguriert, das alles was per HTTP reinkommt, automatisch auf HTTPS umgeleitet wird:

<VirtualHost *:80>
        ServerAdmin webmaster@jan-von.de
        ServerName mail.jan-von.de
        DocumentRoot /var/www/empty
 
        RewriteEngine on
        RewriteCond %{HTTP:X-Forwarded-Proto} !https
        RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
 
        CustomLog /var/log/apache2/mail.jan-von.de-access.log combined
</VirtualHost>

Genau hier liegt auch das Problem. Man kann sich in einem fremden Netz befinden, zum Beispiel einem unbekannten oeffentichen WLAN, dort kann die HTTP Anfrage abgefangen und der HTTPS Aufruf auf einen alternativen Server weitergeleitet werden.

Hier kommt HSTS ins Spiel. Der Server teilt dem Webbrowser mit, dass er sich bitte fuer eine bestimmte Zeit (zum Beispiel ein Jahr) daran erinnern soll, das diese Webseite nur noch ueber HTTPS aufgerufen werden soll.

In Apache muss dafuer das Headers-Modul aktiviert sein:

a2enmod headers

und anschliessend fuegt man in den HTTPS vhost die folgende Zeile ein:

Header always set Strict-Transport-Security "max-age=31556926"

Der Parameter max-age wird in Sekunden gesetzt. 31556926 Sekunden sind 365 Tage. Ein weiterer Parameter den man optional noch mit Komma Semikolon separiert dahinter haengen kann ist includeSubDomains. Dafuer muss aber sichergestellt sein, dass auch alle Subdomains per HTTPS erreichbar sind.
Weiter muss man aufpassen, dass die entsprechenden vhosts auch die angegebene Zeit, also zum Beispiel ein Jahr lang per HTTPS erreichbar sind, ansonsten kann es zu Fehlermeldungen kommen.

Wenn man dann HSTS aktiviert hat und eine Webseite aufruft die es unterstuetzt, dann kann man schoen sehen, wie der Browser gleich HTTPS nimmt und gar nicht erst HTTP probiert.

mit_hsts

Weiteres zu dem Thema z.B. unter: