Mehr Sicherheit fuer die eigenen Daten – Einleitung und Aufraeumen

Im Kontext der NSA Affaere ist viel ueber Sicherheit und Verschluesselung geschrieben worden. Etwas zu aendern ist schwer, denn es koennen sich nur die Menschen aendern, die Dienste werden es nicht tun. Die Nutzer muessen das Thema Verschluesselung selbst in die Hand nehmen. Fuer viele ist das eigentlich unmoeglich, weil sie schlichtweg keine Ahnung haben. Fuer Menschen wie Dich und mich, die eigene Server betreiben, ist es jedoch machbar. Ich werde in der kommenden Zeit und in unregelmaessigen Abstaenden hier auf meinem Blog verschiedene Dinge vorstellen, die als direkte Reaktion aus diesen Ueberlegungen hervorgegangen sind.

Eine 100%tige Unabhaengigkeit ist nicht zu erreichen. Aber jeder kleine Schritt dahin ist richtig. Wir wollen alle kommunizieren ueber die Netze, und in der Regel bezahlen wir mit unseren Daten fuer die Services die wir nutzen. Das bedeutet im Umkehrschluss, dass wenn wir nicht mit unseren Daten bezahlen, wir auch keine Premiumdienste erwarten koennen die super einfach von der Hand gehen.

Der erste Schritt war fuer mich das Aufraeumen. Ich bin meine Rootserver durchgegangen und habe folgendes gemacht:

  1. Alle Zugaenge von mir und fuer Freunde ueberprueft die existierten und gegebenfalls gesperrt.
  2. Ich bin die Prozesstabelle durchgegangen und habe sichergestellt, dass ich keine Dienste laufen habe, die ich nicht laufen haben moechte. Gegebenenfalls habe ich diese deinstalliert.
  3. Ich bin im Apache alle vHosts durchgegangen und habe dort aufgeraeumt. Nicht mehr benoetigte deaktiviert und Konfigurationen angeglichen
  4. Ich habe meine DNS Konfigurationen durchgeschaut und sichergestellt, dass keine verwaisten Subdomains existieren etc.
  5. Ich bin das Dateisystem durchgegangen, habe mein Homeverzeichnis aufgeraeumt, die DocumentRoots der vHosts usw.

Kurz: Aufraeumen um eine gute Grundlage, einen Ueberblick, eine gute Struktur zu schaffen fuer die naechsten Arbeiten im Kontext Verschluesselung, die ich machen wollte. Stay tuned….

aptitude mit search pattern; Systeme ohne DNS; Apache Satisfy Direktive; bash Bedeutung der Klammern

  1. Loeschen von Paketen mittels aptitude und search pattern um mehrere Pakete gleichzeitig zu loeschen, aber nicht alle hintereinander einzugeben. Das kann man mit ~n. Hier ein klassisches Beispiel wo ich das anwende. Rausfinden welcher Kernel gerade laeuft, rausfinden was es alles an alten Kernel Images auf dem System gibt, loeschen aller linux-image-2.6.32-3*:
    $ uname -a
    $ sudo aptitude search linux-image | grep "^i"
    $ sudo aptitude purge ~nlinux-image-2.6.32-3
  2. Manchmal hat man Systeme, bei denen kein DNS verfuegbar ist. Das fuehrt dann dazu, dass einige Sachen extrem lange dauern, weil Sie versuchen irgendetwas ueber DNS aufzuloesen und dann erst weiter machen wenn es einen Timeout gibt. Als erstes sollte man dann pruefen, dass der eigene Hostname in der /etc/hosts korrekt auf localhost gemappt ist. Oft rgibt es dann auch noch Sinn in der /etc/ssh/sshd_config den folgenden Schalter zu aktivieren:
    UseDNS no
  3. Manchmal moechte man bei einem Apache Webserver etwas fuer einen bestimmten IP Bereich direkt freigeben, und ansonsten soll ein Passwort eingegeben werden. Jeweils das eine von beiden ist einfach realisiert. Wenn man beides moechte, braucht man die Satisfy Direktive. Klassisches Beispiel dafuer:
            <Location "/foo">
                    Order deny,allow
                    Deny from all
                    AuthName "Foo Login"
                    AuthUserFile /path/to/.htpasswd
                    AuthType Basic
                    Require valid-user
                    Allow from 192.168
                    Satisfy Any
                    ProxyPass http://localhost:8080/foo/ timeout=6000
                    ProxyPassReverse http://localhost:8080/foo/
            </Location>
  4. bash Klammern. Immer wieder spannend, deswegen hier mal eben aus meinem Kopf heraus festgehalten wie ich mit ihnen arbeite:
    • () = Subshell. Benutze ich zum Beispiel beim anlegen von Sicherheitskopien mit:

       $ mv foo.txt foo.txt-$(date -I)
    • [] in Schleifen = Ruft das Programm „[“ auf, oder auch „test“. In einer if [ ! -d „/tmp“ ]; echo „directory /tmp does not exist.“; fi Schleife wird bei dem [ das Programm mit dem Namen „[“ aufgerufen. Liegt zum Beispiel unter /usr/bin/[ und hat auch eine eigene manpage.
    • [[]] in Schleifen = Bash eigene Funktion. Darin kann man dann auch Regex verwenden. Beispiel

      $ FOO=1234
      $ if [[ $FOO =~ ^[0-9]*$ ]]; then echo "OK"; else echo "NO"; fi
      OK
      $ FOO=1234a
      $ if [[ $FOO =~ ^[0-9]*$ ]]; then echo "OK"; else echo "NO"; fi
      NO
      $
    • {} = Variablen und Listen. Ich nutze das um in Skripten Variablen besser ersichtlich zu machen, zum Beispiel

      /bin/bash
      FOO=foo.txt
      mv ${FOO} ${FOO}_$(date -I)

      Ausserdem fuer Listen, zum Beispiel wenn man mehrere Ordner mit Unterordnern anlegen moechte:

      mkdir -p /tmp/foo/bar/{one,two,three,four}/

      Nicht zu vergessen die ganzen build-in Shell Funktionen bei den Klammern, z.B. hier, da, dort, guckstu, minneminne

HowTo: Firefox Sync Server from Mozilla self hosted

Ich habe nun schon so einiges ueber einen selbstgehosteten Sync-Service fuer Firefox geschrieben:

  1. Firefox Lesezeichen ueberall – Selfmade!
  2. Howto: Der eigene Weave Minimal Server / Firefox Sync
  3. Update des eigenen Firefox Sync Servers

Nachdem ich seit neustem Besitzer eines Google Nexus 4 bin und gerne Firefox Sync auch unter Android benutzen moechte, war ich gezwungen mein aktuelles Setup zu aktualisieren auf die Originalimplementierung von Mozilla. Vorher wurde mir auf meinem Handy immer von Firefox gesagt, dass diese Version von Sync nicht mehrere Geraete unterstuetzt.

Ich bin auf diese Anleitung gestossen und unter Debian sieht das ganze wie folgt aus:

Installation

Installation von Paketen:

$ aptitude install python-virtualenv sqlite3 mercurial

Einrichten eines Benutzeraccounts:

$ adduser --system --home /opt/ffsync --shell /bin/false --group ffsync

Erstellen der benoetigten Verzeichnisse:

$ su ffsync
$ cd /opt/ffsync
$ mkdir {data,tmp}
$ chmod 775 tmp
$ hg clone https://hg.mozilla.org/services/server-full
$ cd server-full
$ make build

Konfiguration

Editieren und Anpassen der folgenden Konfigurationsdateien:

sync.wsgi

os.environ['PYTHON_EGG_CACHE'] = '/opt/ffsync/tmp/python-eggs'

developement.ini

[handler_syncserver_errors]
args = (‘/opt/ffsync/tmp/sync-error.log’,)

etc/sync.conf

[storage]
sqluri = sqlite:////opt/ffsync/data/sync.db
 
[auth]
sqluri = sqlite:////opt/ffsync/data/sync.db
 
[nodes]
fallback_node = http://sync.example.net/

Ich habe hier nun noch die Rechte fuer den Ordner gesetzt:

$ chown -R ffsync.www-data /opt/ffsync

Apache

Zum Schluss noch Apache einrichten um darueber alles laufen zu lassen. Dafuer:

$ aptitude install libapache2-mod-wsgi

Und einen entsprechenden vhost erstellen:

<VirtualHost *:80>
    ServerName sync.example.net
    ServerAdmin webmaster@example.net
    DocumentRoot /opt/ffsync/server-full
 
    CustomLog /var/log/apache2/ffsync_access.log combined
    ErrorLog /var/log/apache2/ffsync_error.log
 
        Order deny,allow
        Allow from all
 
    WSGIProcessGroup ffsync
    WSGIDaemonProcess ffsync user=ffsync group=ffsync processes=2 threads=25
    WSGIPassAuthorization On
    WSGIScriptAlias / /opt/ffsync/server-full/sync.wsgi
</VirtualHost>

Nach einem Neustart von Apache konnte ich dann das Geraet trennen und anschliessend mich neu mit dem Server verbinden. Achtet auf den Slash am Ende der URL. Es wurde alles automatisch synchronisiert. Auch die Synchronisation mit Firefox auf meinem Android Handy klappte problemlos.

Zum Schluss habe ich noch die Funktion deaktiviert, mit der sich neue Benutzer selbststaendig anmelden koennen. Dafuer in der /opt/ffsync/server-full/etc/sync.conf noch in der auth Sektion die entsprechende Option einkomentieren

[auth]
allow_new_users = false

Danke nochmal an OpenShots an dieser Stelle fuer die Anleitung :-)

Maintenance information with Apache

Inzwischen ist schon eine ganze Weile der unten stehende Block in den Apache Konfigurationsdateien von Servern die ich betreue drin. Sie erlaubt mir schnell und simpel eine Wartungsseite vorzuschalten um Besucher ueber Arbeiten zu informieren. Gleichzeitig behalte ich selbst uneingeschraenkten Zugriff auf das System.

##### BEGINN MAINTENANCE #####
RewriteEngine on
# exclude my ip
RewriteCond %{REMOTE_ADDR} !1.2.3.4 [NC]
# exclude server itself
RewriteCond %{REMOTE_ADDR} !127.0.0.1 [NC]
# forward to this website
RewriteRule !^/maintenance/wartungsarbeiten.*$ /maintenance/wartungsarbeiten.html [R=307,L]
##### END MAINTENANCE #####

Damit das ganze funktioniert muss mod_rewrite aktiviert werden. Alle Anfragen die nicht von meiner eigenen IP kommen, werden automatisch auf die Wartungsarbeiten-Seite umgeleitet.

Danke an dieser Stelle noch einmal an Michael Simons, von dem ich den Schnippsel damals erhalten habe.