Debian Lemur
Introduction
Lemur erstellt eine / oder mehrere lokale RootCA's für die übersichtlich und einfach Server oder Client Zertifkate ausgestellt, verlängert oder wiederrufen werden können. Das ganze erfolgt komplett im Webbrowser. Es stehen zahlreiche Plugins zur Verfügung mit deren Hilfe z.B. auch letsencrypt validierte Server Zertifikate verwalet werden können. Lemur wurde von Netflix entwickelt, das dort für die eigene Infrastruktur verwendet wird und über Github der Allgemeinheit zur Verfügung gestellt wurde. Lemur ist ein Python Server Dienst
Installation
Debian Pakete
Lemur benötig zahlreiche Pakete, die aus den Debian Paketquellen installierbar sind
apt-get install sudo nodejs python3-pip python-dev python3-dev libpq-dev build-essential libssl-dev libffi-dev libsasl2-dev libldap2-dev nginx git supervisor npm postgresql gulp
User für Lemur Dienst
useradd -d /home/lemur -m -s /bin/bash lemur passwd lemur
Python envirnonment einrichten für Lemur
pip install -U virtualenv mkdir /www cd /www git clone https://github.com/Netflix/lemur chown -R lemur lemur/ su lemur virtualenv -p python3 lemur source /www/lemur/bin/activate cd lemur make release
Konfiguration erstellen und anpassen
lemur create_config vi ~/.lemur/lemur.conf.py
Folgende Parameter anpassen:
LEMUR_EMAIL = 'lemur@domain.org' LEMUR_SECURITY_TEAM_EMAIL = 'lemur@domain.org' LEMUR_DEFAULT_COUNTRY = 'DE' LEMUR_DEFAULT_STATE = 'Bavaria' LEMUR_DEFAULT_LOCATION = 'Other' LEMUR_DEFAULT_ORGANIZATION = 'Private' LEMUR_DEFAULT_ORGANIZATIONAL_UNIT = 'Network Admin' LOG_FILE = "/www/lemur/lemur.log"
lemur User Umgebung verlassen
exit
Datenbank für Lemur einrichten
sudo -u postgres -i psql CREATE USER lemur WITH PASSWORD 'lemur'; alter role lemur createrole SuperUser;
Postgres verlassen mit der Tastenkombination:
CTRL-D
Datenbank anlegen:
createdb lemur
Postgres Umgebund verlassen:
exit
Lemur initialisiern und starten
su lemur cd /www/lemur/lemur /www/lemur/bin/lemur init
Ein Passwort des Webusers lemur wird abgefragt. Dieser User hat nichts mit dem Linux User lemur zu tun, unter dessen Rechten der Lumur Dienst ausgeführt wird.
/www/lemur/bin/lemur start
Lemur sollte starten und keine Fehler ausgeben. Evtl. Warnings können ignoriert werden. Lemur startet auf diese Weise nicht als Dienst, sondern im Vordergrund und blockiert das aktuelle Terminal Fenster. Lemur abbrechen und lemur Umgebung verlassen:
CTRL-C exit
Startscript für den Lemur Dienst
vi /etc/init.d/lemur
Folgende Zeilen einfügen:
#!/bin/sh # kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing. #if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then # set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script #fi ### BEGIN INIT INFO # Provides: skeleton # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Example initscript # Description: This file should be used to construct scripts to be # placed in /etc/init.d. This example start a # single forking daemon capable of writing a pid # file. To get other behavoirs, implemend # do_start(), do_stop() or other functions to # override the defaults in /lib/init/init-d-script. ### END INIT INFO # Author: Foo Bar <foobar@baz.org> # # Please remove the "Author" lines above and replace them # with your own name if you copy and modify this script. DESC="Lemur Server" DAEMON="/www/lemur/bin/lemur" PID="/var/run/lemur.pid" case $1 in start) start-stop-daemon --start --chuid lemur --make-pidfile --pidfile $PID --background --exec $DAEMON start ;; stop) start-stop-daemon --stop --pidfile $PID ;; esac
Script ausführbar machen:
chmod +x /etc/init.d/lemur
Lemur starten:
/etc/init.d/lemur start
check ob Lemur Process läuft:
ps aux|grep lemur
Wenn Lemur gestartet ist, dann sollten 2 Lemur Python Prozesse gelistet werden, die unter dem User lemur (ganz links) ausgeführt werden:
lemur 20494 0.0 17.2 171724 90408 ? S 07:24 0:01 /www/lemur/bin/ python /www/lemur/bin/lemur start lemur 20497 0.0 16.2 172236 85200 ? S 07:24 0:00 /www/lemur/bin/ python /www/lemur/bin/lemur start
automatisch beim Systemstart starten und beim Shutdown beenden:
update-rc.d lemur defaults
Web Proxy
HTTP
Standardmäßig läuft lemur auf Port 8000. Der Port könnte zwar geändert werden aber nicht auf Port 80, wenn Lemur als beschränkter User lemur laufen soll. Um Lemur dennoch auf Port 80 erreichbar zu machen wird NGINX als leightweight Proxy verwendet
/etc/nginx/sites-available/default
Folgende Zeile anpassen (domain.org entsprechend anpassen):
server_name lemur.domain.org;
vor dem Absatz location / { folgende Zeilen einfügen:
location /api { proxy_pass http://127.0.0.1:8000; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
Den Bereich location / folgendermaßen anpassen:
location / { root /www/lemur/lemur/static/dist; include mime.types; index index.html; }
Nginx neu starten:
service nginx restart
HTTPS
Lemur sollte unbedingt mittels gesicherter Verbindung via https ausgeführt werden. Dafür ist ein SSL-Zertifikat und private key erforderlich, dessen Generierung nicht an dieser Stelle aufgeführt wird. Anleitungen sind im Wiki vorhanden.
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/https vi /etc/nginx/sites-available/https
Falls nur HTTPS verwendet werden soll und die Einrichtung für HTTP übersprungen wurde, dann müssen die Änderunge, die im vorherigen Kapitel erläutert wurden anlaog in die https configuration ergänzt werden.
Folgende Änderungen durchführen:
server { #listen 80 default_server; #listen [::]:80 default_server;
# SSL configuration # listen 443 ssl default_server; listen [::]:443 ssl default_server;
nach der Zeile # include snippets/snakeoil.conf; folgende Zeilen einfügen und die Pfade zu Zertifikate und Private Key entsprechend anpassen
ssl_certificate /path/to/lemur.pem; ssl_certificate_key /path/to/lemur.key; ssl on; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on;
Nginx neu starten:
service nginx restart
Funktionstest mit Webbrowser
Ip oder Domainname des Lemur servers per HTTP und/oder HTTPS in die Adresszeile des Browsers eingeben. Die Lemur Login Seite sollte erscheinen. Mittels User lemur und Web-Passwort, das bei während der Initialisierung vergeben wurde, einloggen.