FileMaker WebDirect und Admin Console mit Zwei-Faktor-Authenfizierung / Authelia

Gut, wir haben uns also im vorherigen Blogbeitrag (FileMaker WebDirect hinter einen Reverse Proxy) einen schönen Proxyserver für FileMaker WebDirect und die FileMaker Admin Console gebaut. Der Proxyserver trägt sogar den hochtrabendenen Namen secure.schubec.fm-server.net

Trotzdem kann noch jedermann auf FileMaker Server zugreifen. Zwar nicht direkt, aber eben über den Proxyserver. Dort wartet dann der FileMaker Login und wer lustig ist, kann nun alle Passwörter durchprobieren, bis er in der Admin-Console ist. Ganz so “secure” ist das also noch nicht, wie wir das wollen.

Außerdem, wenn ich das Post-it mit dem Admin Passwort, das auf meinem Monitor klebt, verliere und der Nachbar den Zettel findet, habe ich ein Problem. (Nur Scherz 🙂

Daher wollen wir unseren FileMaker Server nun per Zwei-Faktor-Authentifizierung, auch 2FA genannt, absichern.

Das heißt, um WebDirect oder die Admin Console nutzen zu können, muss ich mich mit 2 Faktoren authentifizieren. Beispielsweise mit einem Passwort und einen One-Time-Password per Google Authenticator.

Ich müsste dann also mein Passwort preisgeben und mein Handy verlieren und mein Gesicht auch noch, da mein iPhone per FaceID abgesichert ist. Das ist ziemlich unwahrscheinlich und daher sicher genug für unseren FileMaker Server.

Um das oben genannte Szenario zu verwirklichen, gibt es einige kostenpflichtige und kostenlose Lösungen. Ich habe gute Erfahrungen mit Authelia gemacht.

Authelia

Authelia ist ein kostenloser open-source Authentifizierungs und Authorisierungsserver. Authelia ist schnell und benötigt nicht viele Serverressourcen und daher ideal für unseren Einsatzzweck.

Wir erweitern daher unsere NGinx Konfiguration:

Unser docker stack wird um Authelia erweitert. Wir ergänzen in unserer docker-compose.yml Datei wie folgt:

  authelia:
    image: authelia/authelia:4.33
    container_name: authelia
    restart: always
    volumes:
      - ./data/authelia/config:/config
    networks:
      - frontproxy_default
    environment:
      - TZ=Europe/Vienna

Wir wollen, dass Authelia (die Loginseite) unter auth.schubec.fm-server.net erreichbar ist. Daher konfigurieren wir das DNS System entsprechend:

Als nächstes erweitern wir die NGinx Konfiguration um unseren Authelia vHost:

server {
    listen 443 ssl http2;
    server_name auth.schubec.fm-server.net.com;
    server_tokens off;
    ssl_certificate /etc/letsencrypt/live/auth.schubec.fm-server.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/auth.schubec.fm-server.net/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;



    location / {
        resolver 127.0.0.11 valid=30s;
        set $upstream_authelia authelia; 
        proxy_pass http://$upstream_authelia:9091;
        client_body_buffer_size 128k;
 
        #Timeout if the real server is dead
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
 
        # Advanced Proxy Config
        send_timeout 5m;
        proxy_read_timeout 360;
        proxy_send_timeout 360;
        proxy_connect_timeout 360;
 
        # Basic Proxy Config
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Uri $request_uri;
        proxy_set_header X-Forwarded-Ssl on;
        proxy_redirect  http://  $scheme://;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_cache_bypass $cookie_session;
        proxy_no_cache $cookie_session;
        proxy_buffers 64 256k;
 
    }   
    


}

Wie im Vorgängerartikel beschrieben, erzeugen wir nun ein Dummyzertifikat für den neuen vHost, starten NGinx neu, holen ein Let’s Encrypt Zertifikat und starten NGinx nochmals neu:

./1_create_dummy_certs.sh auth.schubec.fm-server.net
./2_restart_nginx.sh
./3_fetch_certificates.sh auth.schubec.fm-server.net
./2_restart_nginx.sh

Als nächsten konfigurieren wir Authelia selbst.

Die Datei data/authelia/config/configuration.yml ist über 360 Zeilen lang, da sie viele Kommentare und Erklärungen erhält. Sie finden die vollständige Datei am Ende des Artikels, hier die wichtigesten Punkte:

  • Bei jwt_secret vergeben Sie bitte einen geheimen Token!
  • totp/issuer: Hier adaptieren Sie Ihre Emailadresse
  • Unter authentication_backend habe ich einen statische Datei mit Benutzern hinterlegt. In größeren Installationen sollten Sie hier Ihren LDAP Server oder ähnliches einbinden!
  • Unter access_control/rules/domain habe ich hinterlegt, dass die Domain *.fm-server.net gesichert werden soll. Das müssen Sie natürlich adaptieren.
  • Unter session/domain müssen Sie ebenfalls Ihre Werte hinterlegen
  • Unter session/remember_me_duration habe ich mit 1M hinterlegt, dass Authelia nur 1 mal im Monat nach dem OTP fragt. Wenn Sie es sicherer wollen, dann ändern Sie das Intervall.
  • Unter notifier/smtp hinterlegen Sie Ihre Mailserverdaten, da Authelia in der Lage sein muss, Emails zu versenden.

In der Datei data/authelia/config/users_database.yml sind alle Benutz inkl. Emailadresse und dem verschlüsselten Passwort hinterlegt. Wie oben erwähnt, reicht das für die Demo völlig aus, in größeren Installationen mit mehr Usern sollte ein LDAP Server für eine einfachere Verwaltung verwendet werden.

Das Passwort kann man beispielsweise mit dem online Argon2 Hash Generator erzeugen. Muss man halt mögen, dass man das Passwort mal bei irgendeinen Onlinedienst hinterlegt…

In der Datei data/nginx-snippets/auth.conf passen Sie die letzte Zeile an und hinterlegen hier ihre Domain.

Die Datei data/nginx-snippets/authelia.conf können Sie übernehmen, so wie sie ist.

Authelia ist nun fertig konfiguriert.

Jetzt wollen wir noch unseren vHost secure.schubec.fm-server.net mit Authelia schützen. Dieser vHost dient ja als Reverse Proxy für unseren FileMaker Server.

Wir passen die Konfiguration wie folgt an (die zwei fett formatierten Zeilen):

server {
    listen 80;
    server_name secure.schubec.fm-server.net;
    server_tokens off;

   location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://$host$request_uri;

    }
}

server {
    large_client_header_buffers 4 32k;
    client_max_body_size 20M;
    listen 443 ssl http2;
    server_name secure.schubec.fm-server.net;
    server_tokens off;
    ssl_certificate /etc/letsencrypt/live/secure.schubec.fm-server.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/secure.schubec.fm-server.net/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    include snippets/authelia.conf; # Authelia auth endpoint 


    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass https://schubec.fm-server.net;
        include snippets/auth.conf; # Protect this endpoint
    }
}

Wir starten NGinx noch ein letztes Mal neu:

./2_restart_nginx.sh

Zeit, das Ganze auszuprobieren

Im Webbrowser öffnen wir https://secure.schubec.fm-server.net und werden automatisch zu https://auth.schubec.fm-server.net umgeleitet:

Nun die zuvor konfigurierten Zugangsdaten hinterlegen:

Authelia meldet nun, dass die Ressource, die wir nutzen wollen, eine zwei Faktor Authentifizierung benötigt. Um dies zu gewährleisten, müssen wir nun ein Gerät (in meinem Fall ein iPhone) registieren, dass einen zweiten Faktor (ein OTP) erzeugt.

Authelia sende nun ein Email an meine hinterlegte Emailadresse. In der Email werde ich aufgefordert, ein das Gerät zu registrieren.

Auf meinen iPhone nutze ich nun den Google Authenticator (oder ein artverwandtes Programm) um den QR-Code zu scannen und den OTP zu erzeugen.

Am iPhone lasse ich mir den OTP anzeigen:

Und gebe in bei Authelia ein:

That’s it. Ich kann nun FileMaker WebDirect oder die Admin Console über den Reverse Proxy nutzen, und zwar nur, wenn ich mich per Authelia und einem zweiten Faktor zusätzlich authentifiziere.

Download

Disclaimer

Ich übernehme keine Verantwortung für Fehlkonfigurationen oder falsche Ratschläge. Die Informationen hier sind nach bestem Wissen und Gewissen zusammengetragen und implementiert.

Falls Sie einen Fehler finden, melden Sie diesen bitte bei mir, damit ich diesen für alle zugänglich korrigieren kann.

Ich bin kein Sicherheitsspezialist und habe die oben genannten Infos in vielen Stunden zusammengestellt.

Lesen Sie die Dokumentation zu Authelia und übernehmen Sie nicht blind die angebotenen Configdateien. Gehen Sie Zeile für Zeile durch, bis Sie alles verstehen und probieren Sie das ganze zuerst auf einem Testsystem aus!

Sponsoring

Dieser Blogbeitrag wurde finanziell vom Zeitverlag unterstützt. Vielen Dank dafür!

, , ,

Kommentieren und Diskutieren

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Related posts

Latest posts