Debian Lemur: Unterschied zwischen den Versionen
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 189: | Zeile 189: | ||
Die Lemur Login Seite sollte erscheinen. | Die Lemur Login Seite sollte erscheinen. | ||
Mittels User lemur und Web-Passwort, das bei während der Initialisierung vergeben wurde, einloggen. | Mittels User lemur und Web-Passwort, das bei während der Initialisierung vergeben wurde, einloggen. | ||
==Optional CFSSL Plugin== | |||
Lemur unterstützt zahlreiche Plugins zur Erstellung der Zertifikate. Das integrrierte Plugin Cryptographic verwendet das openssl Paket für die Generierung der Schlüssel und Zertifikate. Neben zahlreichen Plugins, die Zertifikate mittels kommerzieller Zertifizierungsstellen, bietet CFSSL (CloudFlare SSL) die Generierung von kostenlosen Zeretifikaten. | |||
===Installation=== | |||
apt-get install golang | |||
useradd cfssl | |||
su - cfssl | |||
go get -u github.com/cloudflare/cfssl/cmd/... | |||
go get bitbucket.org/liamstask/goose/cmd/goose | |||
ln -s /home/cfssl/go/bin/cfssl* /usr/local/bin/ | |||
ln -s /home/cfssl/go/bin/multirootca /usr/local/bin/ | |||
ln -s /home/cfssl/go/bin/mkbundle /usr/local/bin/ | |||
ln -s /home/cfssl/go/bin/goose /usr/local/bin/ | |||
exit | |||
===Datenbank=== | |||
su - postgres | |||
cfssl_pwd sollte möglichst lange und kompliziert gewählt werden. Sonderzeichen sollten vermieden werden. | |||
CREATE USER u_cfssl WITH PASSWORD 'cfssl_pwd'; | |||
CREATE DATABASE db_cfssl OWNER u_cfssl; | |||
\q | |||
exit | |||
vi /etc/postgresql/13/main/pg_hba.conf | |||
folgende Zeilen ans Ende anfügen: | |||
host db_cfssl u_cfssl 127.0.0.1/32 scram-sha-256 | |||
host db_cfssl u_cfssl ::1/128 scram-sha-256 | |||
Postgres neu starten | |||
service postgresql restart | |||
mkdir /etc/cfssl | |||
vi /etc/cfssl/db-config.json | |||
folgende Zeilen einfügen (cfss_pwd mit eben angelegtem Passwort für db user u_cfssl ersetzenn): | |||
{ | |||
"driver": "postgres", | |||
"data_source": "postgres://u_cfssl:cfssl_pwd/db_cfssl" | |||
} | |||
Datenbank befüllen: | |||
goose --env custom -path ~/go/src/github.com/cloudflare/cfssl/certdb/pg up | |||
===Root CA und Intermediate CA Zertifikate=== | |||
Verzeichnisse erstellen: | |||
mkdir /etc/ssl/cfssl_ca | |||
mkdir /etc/ssl/cfssl_ca/root | |||
mkdir /etc/ssl/cfssl_ca/intermediate | |||
Root CA: | |||
vi /etc/ssl/cfssl_ca/root/csr_ROOT_CA.json | |||
Folgende Zeilen einfügen und evtl. anpassen: | |||
{ | |||
"CN": "Private Root CA", | |||
"key": { | |||
"algo": "rsa", | |||
"size": 2048 | |||
}, | |||
"names": [ | |||
{ | |||
"C": "DE", | |||
"ST": "Bavaria", | |||
"L": "Other", | |||
"O": "Private", | |||
"OU": "Certificate Management" | |||
} | |||
], | |||
"ca": { | |||
"expiry": "262800h" | |||
} | |||
} | |||
Folgender Befehl generiert Root CA private Key root_ca-key.pem und Zertifikat root_ca.pem: | |||
cfssl gencert -initca /etc/ssl/cfssl_ca/root/csr_ROOT_CA.json | cfssljson -bare /etc/ssl/cfssl_ca/root/root_ca | |||
Intermediate CA: | |||
vi /etc/ssl/cfssl_ca/intermediate/csr_intermediate.json | |||
Folgende Zeilen einfügen und evtl. anpassen: | |||
{ | |||
"CN": "Private Intermediate CA", | |||
"key": { | |||
"algo": "rsa", | |||
"size": 2048 | |||
}, | |||
"names": [ | |||
{ | |||
"C": "DE", | |||
"ST": "Bavaria", | |||
"L": "Other", | |||
"O": "Private", | |||
"OU": "Certificate Management" | |||
} | |||
], | |||
"ca": { | |||
"expiry": "42720h" | |||
} | |||
} | |||
Konfigfile: | |||
vi /etc/ssl/cfssl_ca/intermediate/root_to_intermediate_ca.json | |||
Folgende Zeilen einfügen und evtl. anpassen: | |||
{ | |||
"signing": { | |||
"default": { | |||
"usages": [ | |||
"digital signature", | |||
"cert sign", | |||
"crl sign", | |||
"signing" | |||
], | |||
"expiry": "262800h", | |||
"ca_constraint": { | |||
"is_ca": true, | |||
"max_path_len": 0, | |||
"max_path_len_zero": true | |||
} | |||
} | |||
} | |||
} | |||
Folgende Befehle generieren Intermediate CA private Key intermediate_ca-key.pem und Zertifikat intermediate_ca.pem, das von eben erstellter Root CA signiert wird: | |||
cfssl gencert -initca /etc/ssl/cfssl_ca/intermediate/csr_inntermediate.json | cfssljson -bare /etc/ssl/cfssl_ca/intermediate/intermediate_ca | |||
cfssl sign -ca //etc/ssl/cfssl_ca/root/root_ca.pem -ca-key /etc/ssl/cfssl_ca/intermediate/root/root_ca-key.pem -config /etc/ssl/cfssl_ca/intermediate/root_to_intermediate_ca.json /etc/ssl/cfssl_ca/intermediate/intermediate_ca.csr | cfssljson -bare /etc/ssl/cfssl_ca/intermediate/intermediate_ca | |||
Dateirechte anpassen: | |||
chown cfssl. -R /etc/ssl/cfssl_ca | |||
chown cfssl. -R /etc/cfssl | |||
Version vom 6. August 2021, 17:33 Uhr
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 CFSSL Plugin
Lemur unterstützt zahlreiche Plugins zur Erstellung der Zertifikate. Das integrrierte Plugin Cryptographic verwendet das openssl Paket für die Generierung der Schlüssel und Zertifikate. Neben zahlreichen Plugins, die Zertifikate mittels kommerzieller Zertifizierungsstellen, bietet CFSSL (CloudFlare SSL) die Generierung von kostenlosen Zeretifikaten.
Installation
apt-get install golang useradd cfssl su - cfssl go get -u github.com/cloudflare/cfssl/cmd/... go get bitbucket.org/liamstask/goose/cmd/goose ln -s /home/cfssl/go/bin/cfssl* /usr/local/bin/ ln -s /home/cfssl/go/bin/multirootca /usr/local/bin/ ln -s /home/cfssl/go/bin/mkbundle /usr/local/bin/ ln -s /home/cfssl/go/bin/goose /usr/local/bin/ exit
Datenbank
su - postgres
cfssl_pwd sollte möglichst lange und kompliziert gewählt werden. Sonderzeichen sollten vermieden werden.
CREATE USER u_cfssl WITH PASSWORD 'cfssl_pwd'; CREATE DATABASE db_cfssl OWNER u_cfssl; \q exit vi /etc/postgresql/13/main/pg_hba.conf
folgende Zeilen ans Ende anfügen:
host db_cfssl u_cfssl 127.0.0.1/32 scram-sha-256 host db_cfssl u_cfssl ::1/128 scram-sha-256
Postgres neu starten
service postgresql restart
mkdir /etc/cfssl vi /etc/cfssl/db-config.json
folgende Zeilen einfügen (cfss_pwd mit eben angelegtem Passwort für db user u_cfssl ersetzenn):
{ "driver": "postgres", "data_source": "postgres://u_cfssl:cfssl_pwd/db_cfssl" }
Datenbank befüllen:
goose --env custom -path ~/go/src/github.com/cloudflare/cfssl/certdb/pg up
Root CA und Intermediate CA Zertifikate
Verzeichnisse erstellen:
mkdir /etc/ssl/cfssl_ca mkdir /etc/ssl/cfssl_ca/root mkdir /etc/ssl/cfssl_ca/intermediate
Root CA:
vi /etc/ssl/cfssl_ca/root/csr_ROOT_CA.json
Folgende Zeilen einfügen und evtl. anpassen:
{ "CN": "Private Root CA", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "DE", "ST": "Bavaria", "L": "Other", "O": "Private", "OU": "Certificate Management" } ], "ca": { "expiry": "262800h" } }
Folgender Befehl generiert Root CA private Key root_ca-key.pem und Zertifikat root_ca.pem:
cfssl gencert -initca /etc/ssl/cfssl_ca/root/csr_ROOT_CA.json | cfssljson -bare /etc/ssl/cfssl_ca/root/root_ca
Intermediate CA:
vi /etc/ssl/cfssl_ca/intermediate/csr_intermediate.json
Folgende Zeilen einfügen und evtl. anpassen:
{ "CN": "Private Intermediate CA", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "DE", "ST": "Bavaria", "L": "Other", "O": "Private", "OU": "Certificate Management" } ], "ca": { "expiry": "42720h" } }
Konfigfile:
vi /etc/ssl/cfssl_ca/intermediate/root_to_intermediate_ca.json
Folgende Zeilen einfügen und evtl. anpassen:
{ "signing": { "default": { "usages": [ "digital signature", "cert sign", "crl sign", "signing" ], "expiry": "262800h", "ca_constraint": { "is_ca": true, "max_path_len": 0, "max_path_len_zero": true } } } }
Folgende Befehle generieren Intermediate CA private Key intermediate_ca-key.pem und Zertifikat intermediate_ca.pem, das von eben erstellter Root CA signiert wird:
cfssl gencert -initca /etc/ssl/cfssl_ca/intermediate/csr_inntermediate.json | cfssljson -bare /etc/ssl/cfssl_ca/intermediate/intermediate_ca cfssl sign -ca //etc/ssl/cfssl_ca/root/root_ca.pem -ca-key /etc/ssl/cfssl_ca/intermediate/root/root_ca-key.pem -config /etc/ssl/cfssl_ca/intermediate/root_to_intermediate_ca.json /etc/ssl/cfssl_ca/intermediate/intermediate_ca.csr | cfssljson -bare /etc/ssl/cfssl_ca/intermediate/intermediate_ca
Dateirechte anpassen:
chown cfssl. -R /etc/ssl/cfssl_ca chown cfssl. -R /etc/cfssl
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.