Let’s Encrypt und Puppet

lets-encrypt-logoIch habe früher fast alle meine Zertifikate von CAcert bezogen. Ich habe sie regelmäßig aktualisiert und für das deployen habe ich ein Puppet Modul, dass die Zertifikate verteilt.

Nach und nach bin ich auf Let’s Encrypt Zertifikate umgestiegen. Da ein hoher Grad an Automatisierung bei Let’s Encrypt immer wieder propagiert wird dachte ich mir, dass sollte auch mit Puppet dann kein zu großes Problem sein. Hier die Lösung, die bei mir nun in Betrieb ist:

Als erstes habe ich das Puppet Modul bzed/letsencrypt installiert. Das Modul benötigt eine PuppetDB. Über exported resources  transportiert es die CSRs auf den puppetmaster, macht dort die gesamte Abwicklung und transferiert dann die Ergebnisse wieder zurück auf den Node. Das funktioniert auch sehr gut.

Auf dem Puppetmaster habe ich die Klasse eingebunden und einige wenige Einstellungen gesetzt (hiera). Bei dem Hook handelt sich m übrigen um einen letsencrypt.sh Hook:

---
classes:
  - letsencrypt

letsencrypt::challengetype: 'http-01'
letsencrypt::hook_source: 'puppet:///modules/helper/%{::fqdn}/le_hook.sh'

Auf den Nodes habe ich die Klasse eingebunden und die Domains definiert für die ein Zertifikat bezogen werden soll:

---
classes:
- letsencrypt

letsencrypt::domains:
- 'foo.example.net'
- 'bar.example.net'
- 'baz.example.net'

PL_logo_vertical_RGB_lgIn meinem recht simplen Szenario ist es so, dass ich einen Gate-Server habe, hinter dem sich alle anderen Maschinen „verstecken“. Dort läuft ein Apache Server als Proxy, der Anfragen über HTTP nach hinten weiterreicht. Die Konfiguration von Apache erfolgt ebenfalls über Puppet. Eine Authentifizierung über DNS für ACME klappt bei mir leider nicht, weswegen ich HTTP nehmen muss. Das habe ich so gelöst, dass ich für die Apache vhosts einfach über ProxyPassMatch den .well-known/acme-challenge/ auf einen Apache Vhost auf dem Puppetmaster weiterreiche. Auf dem Gate-Server sieht das für einen Vhost wie folgt aus:

apache::vhost:
  'proxy-foo.example.net':
    servername: 'foo.example.net'
    serveradmin: 'webmaster@example.net'
    port: '80'
    docroot: '/var/www/empty'
    proxy_dest: 'http://10.20.30.1'
    proxy_pass_match:
      -
        path: '^/.well-known/acme-challenge/(.*)$'
        url: 'http://10.20.30.2/$1'
        params:
          retry: '0'
    headers:
      - 'unset X-Powered-By'
    proxy_preserve_host: true

Auf dem Puppetmaster wiederum läuft ein Vhost, der einfach alle Domains als ServerAlias eingetragen hat.

Nun kommt noch der Hook für letsencrypt.sh ins Spiel den ich oben bereits erwähnt habe. Das Skript schreibt die ACME-Challenge in eine Textdatei in den DocRoot und löscht sie nach dem Erfolg wieder:

#!/bin/bash
 
#
# http-01 hook
#
 
CHALLENGEDIR="/var/www/example.net/letsencrypt"
 
done="no"
if [[ "$1" = "deploy_challenge" ]]; then
    echo "${4}" > "${CHALLENGEDIR}/${3}"
    chmod 644 "${CHALLENGEDIR}/${3}"
    done="yes"
fi
 
if [[ "$1" = "clean_challenge" ]]; then
    rm "${CHALLENGEDIR}/${3}"
    done="yes"
fi
 
if [[ "${1}" = "deploy_cert" ]]; then
    # do nothing for now
    done="yes"
fi
 
if [[ ! "${done}" = "yes" ]]; then
    echo Unkown hook "${1}"
    exit 1
fi
 
exit 0

Voila! Es braucht ein paar Durchläufe bis alles über die Puppetdb jeweils transportiert wurde, aber alles läuft vollautomatisch ab. Sehr cool!

Test: Foscam C1 Lite IP Kamera

C1 Lite

Auspacken

Als erstes fällt bei der Kamera die Verpackung auf. Sie erinnert von der Größe und der Aufmachung her eher an ein Smartphone als an eine IP-Kamera und wirkt hochwertig.

In dem Karton enthalten sind neben der Kamera selbst ein USB Netzteil und USB Kabel zur Stromversorgung sowie Schrauben und Dübel zur Wandmontage. Das Kabel ist sehr lang was bei mir sehr positiv angekommen ist.
An Papier ist eine deutsche und eine englische Schnellanleitung, ein Aufkleber der auf die potentielle Videoüberwachung hinweist, Sicherheitsbestimmungen und eine Garantiekarte enthalten.

Technisches

Die C1 Lite gehört zu den Einsteigermodellen von Foscam. Sie hat eine Auflösung von 1280×720 (720p). In der Kamera ist  ein Mikrofon und ein Lautsprecher verbaut, der die 2-Wege Kommunikation ermöglicht. Ein MicroSD Kartenslot ermöglicht das Aufzeichnen und direkte Abspeichern von Videos auf der Kamera. In das Netzwerk eingebunden wird sie per WLAN.

In Betrieb nehmen

Um die Kamera in das WLAN einzubinden kommt das WPS Verfahren zum Einsatz. Dieses hat bei einer getesteten Fritz!Box 7490 und einem OpenWRT Router jeweils problemlos funktioniert. Über den Lautsprecher der Kamera werden Anweisungen und Statusinformationen dazu ausgegeben.

Die C1 Lite selbst unterstützt ebenfalls die Einrichtung per App. Das habe ich nicht getestet, da dafür ein Account bei Foscam angelegt werden muss. Prinzipiell scannt man aber einfach den QR-Code auf der Rückseite der Kamera. Man wird dann aufgefordert eine App zu installieren die einen dann anschließend durch alle weitere Schritte leitet.

Das Webinterface der Kamera ist über die vergebene IP und dann Port 88 zu erreichen. Dieses empfinde ich als eine schöne Sicherheitseinstellung von Werksseite aus. Daneben lauscht sie per HTTPS auf Port 443.
Für das Webinterface selbst benötigt man ein Browserplugin. Zu dessen Installation wird man bei dem ersten Aufruf der Seite aufgefordert. Es steht für alle gängigen Browser exklusiv Chrome ein Plugin bereit. Bei den Betriebssystemen wird Windows und Mac OS unterstützt. Linux Anwender können das Webinterface nicht nutzen. Diese Einschränkung ist keine von der Kamera selbst, sondern von der Firmware. Ich habe dieses bei meiner FI9831P ebenfalls.

Die Firmware ist die gleiche wie bei anderen HD Modellen von Foscam auch. Dadurch stehen viele Funktionen wie zum Beispiel Bewegungserkennung, Emailbenachrichtigung, FTP-Server für aufgezeichnete Videos und so weiter zur Verfügung.

Da ich für beide Kinder im Haushalt bereits Babycams habe (beide von Foscam), liegt das Einsatzszenario für die C1 in dem Ausleuchten des Kinderzimmers. Dafür ist das Modell super. Nachtausleuchtung wird in dem Fall nicht benötigt und der Betrachtungswinkel ist Spitze. Hier macht es sich bemerkbar, dass anscheinend ein Weitwinkel-Objektiv verbaut ist und ein Bild in 16:9 liefert. Die anderen beiden Kameras haben beide 4:3. Entsprechend wird auch kein Motor zur Steuerung der Kamera selbst benötigt. Das ganze Zimmer ist gut zu sehen:

screen

Die Kamera integriert sich nahtlos in das bei uns im Haus bereits verfügbare System mit den Babycams. Wir nutzen dafür die App tinyCam Monitor. Die C1 Lite wird davon problemlos erkannt und unterstützt.

Fazit

Die Kamera C1 Lite von Foscam ist ein vom Preis her günstiges Einsteigermodell. Die Bildqualität ist sehr gut. Die Firmware bietet viele Funktionen die auch von den teureren Kameras bekannt sind. Abstriche müssen Linux-Nutzer machen, die das Webinterface nicht nutzen können. Dieses Mako trifft aber auf alle aktuellen HD-Kameras von Foscam zu. Alles in allem eine gute Kamera für einen günstigen Preis und für Einsteiger definitiv zu Empfehlen.

 

Die C1 Lite wurde mir im Rahmen eines #product-experience# Programms von Foscam zur Verfügung gestellt.

Projekt: pregos files

Vor ein paar Jahren hab ich mal file delivery implementiert, dann aber nie weiter verfolgt. Jetzt habe ich das ganze noch einmal deutlich einfacher geskriptet.

pregos files

Die Features sind:

  • Dateiuploads laufen nach einer Zeitperiode ab
  • Downloadnamen werden automatisch generiert um nicht einfach geraten zu werden
  • Optional kann ein eigener, sprechender Downloadname angegeben werden
  • Optional können Downloads mit einem Passwort gesichert werden
  • Emailbenachrichtigung bei Download
  • Emailbenachrichtigung wenn eine Datei bald abläuft
  • Benutzerauthentifizierung für Dateiupload
  • Standard- und Admin Benutzerrollen
  • Adminbenutzer können andere Benutzer verwalten und sehen eine Liste aller verfügbarer Dateien

Den Quelltext gibt es auf Github.