diff --git a/online-werkzeuge-admin.pdf b/online-werkzeuge-admin.pdf index 16e78468c6a56eb7a71c0f2850058a9d010ee517..5d30fff46f1076e565e0f5cf1428849d6d684557 100644 Binary files a/online-werkzeuge-admin.pdf and b/online-werkzeuge-admin.pdf differ diff --git a/online-werkzeuge-admin.tex b/online-werkzeuge-admin.tex index 017abb291c53b05959202a1483d637b2d77c7e55..ff64a03cf88465a7eb2c07e62c054e9433feeffb 100644 --- a/online-werkzeuge-admin.tex +++ b/online-werkzeuge-admin.tex @@ -46,12 +46,12 @@ \section{Übersicht} Im ersten Teil dieser Anleitung (\gitfile{ow}{}{online-werkzeuge.pdf}) - wurden die Werkzeuge \newterm{Mumble}, \newterm{noVNC} - und \newterm{OpenMeetings} aus Sicht der Teilnehmenden vorgestellt, + wurden die Werkzeuge \newterm{Mumble}, \newterm{noVNC\/} + und \newterm{OpenMeetings\/} aus Sicht der Teilnehmenden vorgestellt, im zweiten Teil (\gitfile{ow}{}{online-werkzeuge-extra.pdf}) dann - \newterm{TightVNC} und \newterm{PuTTY} aus Sicht der Vortragenden. + \newterm{TightVNC\/} und \newterm{PuTTY\/} aus Sicht der Vortragenden. - Dieser dritte Teil der Anleitung soll Administratoren dabei unterstützen, + Dieser dritte Teil der Anleitung soll IT-Verantwortlichen dabei unterstützen, die von uns eingesetzten Online-Werkzeuge auch bei sich aufzusetzen. \strong{Diese Anleitung ist keine Einführung und keine Schritt-für-Schritt-Installationsanleitung.} @@ -77,12 +77,12 @@ Genau darum geht es hier. Alle in den ersten beiden Anleitungen beschriebenen Werkzeuge -- \term{Mumble}, - \term{OpenMeetings}, \term{TightVNC}, \term{noVNC} und \term{PuTTY} -- + \term{OpenMeetings}, \term{TightVNC}, \term{noVNC\/} und \term{PuTTY\/} -- \emph{sind} freie Software. Insbesondere haben Sie das Recht, die Software bis hin zur Quelltextebene zu analysieren und sicherzustellen, daß sie wirklich nur das tut, wofür sie gedacht ist, und keine Hintertür enthält. Wenn Sie diese Werkzeuge für Ihre Organisation - auf einem Server Ihrer Organisation in Ihrer Eigenschaft als Administrator + auf einem Server Ihrer Organisation in Ihrer Eigenschaft als Admin Ihrer Organisation installieren, ist dies die bestmögliche Garantie für Datenschutz und Privatsphäre, die es bei Online-Kommunikationswerkzeugen überhaupt geben kann. @@ -104,9 +104,12 @@ \item Wir haben einige proprietäre Online-Kommunikationswerkzeuge ausprobiert und können das oft behauptete Plus an Funktionsumfang und Stabilität - nicht bestätigen. Ob etwas korrekt funktioniert oder nicht - und ob es viel oder wenig kann, hängt von vielen Faktoren ab, - aber nicht unmittelbar von der Lizenz. + unter gleichen Bedingungen nicht bestätigen. + (So darf man zum Beispiel ein Web-Interface + nur mit einem anderen Web-Interface vergleichen, + nicht jedoch mit einer installierten Software.) + Ob etwas korrekt funktioniert oder nicht und ob es viel oder wenig kann, + hängt von vielen Faktoren ab, aber nicht unmittelbar von der Lizenz. \item Ein Werkzeug, das Sie ausspioniert, weiß naturgemäß mehr über Sie als eins, das Ihre informationelle Selbstbestimmung respektiert. @@ -117,6 +120,11 @@ Die Situation ist vergleichbar mit dem Sicherheitsgurt im PKW: Ohne Gurt mag es komfortabler sein, aber mit Gurt ist es sicherer. \end{itemize} + Für weitere Details siehe den Artikel + \emph{Nachhaltige Online-Werkzeuge für Home Office und Lehre} + in der Datei \gitfile{ow}{}{online-werkzeuge-nachhaltig.pdf}. + + \bigbreak Neben den in diesen Anleitungen vorgeschlagenen freien Werkzeugen können wir im Kontext der Online-Kommunikation noch die folgenden empfehlen: @@ -125,7 +133,7 @@ \newterm{BigBlueButton\/} ist ein Online-Konferenz-Werkzeug mit einem ähnlichem Funktionsumfang wie \term{OpenMeetings}. In unseren Tests war es hinsichtlich Audio-Übertragung und - Desktop-Sharing stabiler als \term{OpenMeetings}; + Desktop-Sharing stabiler als \term{OpenMeetings\/}; es erreicht hingegen nicht die Klangqualität von \term{Mumble}. \item \newterm{NextCloud\/} ist ein bewährtes Werkzeug für den Austausch von Dateien @@ -143,7 +151,7 @@ (Schnitte, Übergänge etc.). \item \newterm{VLC\/} kann Filme und Kamerabilder nicht nur wiedergeben, - sondern auch streamen. In Kombination mit \newterm{Icecast} + sondern auch streamen. In Kombination mit \newterm{Icecast\/} wird daraus eine Online-Sendestation. \item \newterm{GitLab\/} ist ein Web-Interface für \newterm{Git}. @@ -155,7 +163,129 @@ \dots\ und natürlich kennen Sie \newterm{SSH}, \newterm{GNU Screen} und \newterm{ytalk} für die Online-Kommunikation zwischen Experten. - \bigskip + \section{Let's Encrypt} + + Die diversen Online-Dienste benötigen X.509-Zertifikate. + Oft laufen die Dienste auf separaten (virtuellen) Rechnern. + Wir zeigen hier, wie man mit Hilfe von \newterm{Let's Encrypt} + sichere Zertifikate erhält. + +\iffalse + +# Letsencrypt +Um sichere Zertifikate zu erhalten, benutzen wir Letsencrypt. Es gibt +dabei mehrere Möglichkeiten, die Kontrolle über eine Domain +nachzuweisen. + +Wir benutzen die DNS-Methode. Dabei stellt Letsencrypt eine DNS-Anfrage +an unseren Server, die wir mit einem unmittelbar zuvor von Letsencrypt +erhaltenem Zufallsstring beantworten müssen. Der DNS-Server läuft dabei +auf comm-0, der letsencrypt-Client (certbot) läuft aber auf dem Host, +auf dem tatsächlich das Zertifikat benötigt wird. + +## Konfiguration am Beispiel von main-1 + +apt install certbot + +$SOME_E_MAIL_ADDRESS bekommt bei Bedarf relevante Mitteilungen +vom Letsencrypt-Projekt (z.B. ablaufende Zertifikate, die nicht erneuert +wurden). + +$HOST1, $HOST2 steht für beliebige Hostnamen, für die jeweils ein +Zertifikat beantragt werden soll. + +Hier die benutzte Konfigurationsdatei: + +root@main-1:~# cat /etc/letsencrypt/cli.ini +# Because we are using logrotate for greater flexibility, disable the +# # internal certbot logrotation. +# max-log-backups = 0 +# +# email = $SOME_E_MAIL_ADDRESS +# +# authenticator = manual +# preferred-challenges = dns +# domains = $HOST1, $HOST2 +# +# expand = True +# manual-public-ip-logging-ok = True +# preferred-challenges = dns +# manual-auth-hook = /usr/local/sbin/letsencrypt_dns_update +# post-hook = /usr/local/sbin/letsencrypt-install-new-keys + + +Zum Updaten des DNS-Records wird einmalig dnssec-keygen (apt install +bind9utils) und jedesmal nsupdate (apt install dnsutils) benötigt. Nach +dem erstellen des Keys in /etc/bind (Kommando s.u.) und der +Konfiguration von comm-0 kann das Updaten erfolgen. + +root@main-1:~# cat /usr/local/sbin/letsencrypt_dns_update +#!/bin/bash +# Generate key using: dnssec-keygen -a hmac-sha512 -b 512 -n host main-1.cvh-server.de + +if [ -z "$CERTBOT_DOMAIN" ] || [ -z "$CERTBOT_VALIDATION" ] +then +echo "EMPTY DOMAIN OR VALIDATION" +exit -1 +fi + +HOST="_acme-challenge" + +/usr/bin/nsupdate -k /etc/bind/keys/Kmain-1.cvh-server.de.+165+52870.private << EOM +server comm-0.cvh-server.de +zone ${HOST}.${CERTBOT_DOMAIN} +update delete ${HOST}.${CERTBOT_DOMAIN} TXT +update add ${HOST}.${CERTBOT_DOMAIN} 300 TXT "${CERTBOT_VALIDATION}" +send +EOM +echo "" + + +## comm-0 + +Der auf main-1 erzeugte Key muss natürlich von comm-0 auch akzeptiert werden: + +root@comm-0:~# grep -A6 -F mumble.cvh-server.de /etc/bind/named.conf.local; grep '^include .*main-1' /etc/bind/named.conf.local +zone "_acme-challenge.mumble.cvh-server.de" { + type master; + file "/etc/bind/dynamic/db._acme-challenge.mumble.cvh-server.de"; + + # look for dnssec keys here: + key-directory "/etc/bind"; + + allow-update { key main-1.cvh-server.de; }; +}; +include "/etc/bind/keys/key.main-1.cvh-server.de"; + +root@comm-0:~# cat /etc/bind/keys/key.main-1.cvh-server.de +key main-1.cvh-server.de. { + algorithm HMAC-SHA512; + secret "$KEY_AUS_/etc/bind/keys/Kmain-1.cvh-server.de.+165+52870.private_AUF_MAIN-1"; +}; + +Damit die eigentliche Challenge direkt beim eigenem DNS-Server abgefragt +wird (um Verzögerungen durch den nötigen AXFR-Transfer zu umgehen, wird +der entsprechende DNS-Eintrag auf den sonst für cvh-server.de benutzten +Servern auf unseren eigenen Server delegiert), außerdem muss +mumble.cvh-server.de natürlich einen CNAME oder A-Eintrag erhalten: + +root@comm-0:~# grep -F mumble /var/lib/bind/db.cvh-server.de +mumble IN CNAME main-0 +_acme-challenge.mumble IN NS dns-0 + +Aus Sicherheitsgründen wollen wir Port 53 aber von dort nicht allgemein +beantworten, sondern uns eigentlich auf die Letsencrypt-Server +beschränken. Leider scheinen deren Anfragen nun von sehr vielen +verschiedenen Amazon-Servern zu kommen (siehe root@root-1:~# grep -F +letsencrypt /etc/iptables.rules, welches aktuell unvollständig ist), +daher wird aktuell beim Durchführen der Zertifikatsanfrage auf main-1 +durch "certbot certonly") kurzzeitig auf root-1 mittels 'iptables -I +INPUT -p udp --dport 53 -j ACCEPT' kurzzeitig die Abfrage auf Bind von +außen erlaubt. + +TODO: Schöner lösen! + + \fi \emph{(Fortsetzung folgt.)} @@ -171,7 +301,7 @@ \setlength{\leftskip}{3cm} - Stand: 6.\ April 2020 + Stand: 8.\ April 2020 Copyright \copyright\ 2020\quad Peter Gerwinski\\ Lizenz: \mylicense