Debian Lemur

Aus Wiki
Zur Navigation springen Zur Suche springen

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 apache2 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"

oben vergebenes Datenbank Passwort lemur_pwd ersetzen

 SQLALCHEMY_DATABASE_URI = 'postgresql://lemur:lemur_pwd@localhost:5432/lemur'

Folgende Zeilen ans Ennde anfügen, um Warninngs der Plugins zu unterbinden:

DIGICERT_URL = 
DIGICERT_ORG_ID = 
DIGICERT_ORDER_TYPE = 
DIGICERT_ROOT = 
DIGICERT_CIS_API_KEY = 
DIGICERT_CIS_URL = 
DIGICERT_CIS_ROOTS = 
DIGICERT_CIS_PROFILE_NAMES = 
DIGICERT_API_KEY = 
ENTRUST_API_KEY = 
ENTRUST_API_CERT = 
ENTRUST_API_USER = 
ENTRUST_API_PASS = 
ENTRUST_URL = 
ENTRUST_ROOT = 
ENTRUST_NAME = 
ENTRUST_EMAIL = 
ENTRUST_PHONE = 

lemur User Umgebung verlassen

exit

Datenbank für Lemur einrichten

sudo -u postgres -i
psql

möglichst langes und komplexes Passwort lemur_pwd vergeben, da Lemur User SuperUser Rechte bekommt.

CREATE USER lemur WITH PASSWORD 'lemur_pwd';
alter role lemur createrole SuperUser;

Postgres verlassen mit der Tastenkombination:

\q

Datenbank anlegen:

createdb lemur

Postgres Umgebung 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

Standardmäßig läuft lemur auf Port 8000. Der Port könnte zwar geändert werden aber nicht auf Port 443, wenn Lemur als beschränkter User lemur laufen soll. Um Lemur dennoch auf Port 443 erreichbar zu machen wird Apache als Reverse Proxy verwendet

vi /etc/apache2/sites-available/lemur_https.conf

Folgende Zeilen einfügen und anpassen (domain.org entsprechend anpassen, Pfad zu SSL Zertifikat und Key ebenfalls anpassen):

<VirtualHost *:443>
        ServerName domain.org
 
        SSLEngine on
        SSLCertificateFile      /etc/ssl/certs/lemur.pem
        SSLCertificateKeyFile   /etc/ssl/private/lemur.key

        # intermediate configuration, tweak to your needs
        SSLProtocol             all -SSLv2 -SSLv3
        SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
        SSLHonorCipherOrder     on

        # HSTS (mod_headers is required) (15768000 seconds = 6 months)
        Header always set Strict-Transport-Security "max-age=15768000"

        # Set the lemur DocumentRoot to static/dist
        DocumentRoot /www/lemur/lemur/static/dist

        <Directory /www/lemur/lemur/static/dist>
                Require ip 192.168.0.0/16
        </Directory>

        # Uncomment to force http 1.0 connections to proxy
        # SetEnv force-proxy-request-1.0 1

        #Don't keep proxy connections alive
        SetEnv proxy-nokeepalive 1

        # Only need to do reverse proxy
        ProxyRequests Off

        <Proxy *>
                Require ip 192.168.0.0/16
        </Proxy>
        # Proxy requests to the api to the lemur service (and sanitize redirects from it)
        ProxyPass "/api" "http://127.0.0.1:8000/api"
        ProxyPassReverse "/api" "http://127.0.0.1:8000/api"

</VirtualHost>

Virtualhost aktivieren:

a2ensite lemur_https

nötige Module aktivieren:

a2enmod ssl headers proxy proxy_http proxy_html

Apache neu starten:

service apache2 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.


Optional webbased Postgres Admin phppgadmin

Optional kann phppgadmin installiert werden, um grafisch auf die Postgres Datenbank zugreifen zu könnnen.

apt-get install php7.* php7.*-mbstring php7.*-pgsql libapache2-mod-php7.* phppgadmin

PHP Apache Modul aktivieren:

a2enmod php7.x

x mit der installierten PHP-Version ersetzen

Zugriff aus dem LAN auf phppgadmin:

vi /etc/apache2/conf-enabled/phppgadmin.conf

Folgende Änderung durchführen (Require local auskommentieren und Require ip Zeile einfügen):

#Require local
Require ip 192.168.0.0/16

Apache neu starten

service apache2 restart

Postgres konfigurieren:

su - postgres
psql
\password postgres

2xneues postgres admin user passwort vergeben, das für den Zugriff durch phppgadmin nötig ist Postgres mit \q verlassen

\q

su Umgebung verlassen:

exit

phppgadmin Konfiguration anpassen:

vi /etc/phppgadmin/config.inc.php

['extra_login_security'] von true nach alse ändern

$conf['extra_login_security'] = false;

Webbrowser öffnen und http://ip-des-server/phppgadmin/ eigeben. Die phppgadmin seite sollte erscheinen. im linken Bereich Sever/PostgreSQL anklicken und mittels user postgres und eben vergebenem Passwort einloggen.