Fork me on GitHub

Herr Knedel/Hal-hal hebat dengan kontainer: Membuat layanan Docker lebih aman dengan LDAP dan NGINX

Created Fri, 02 Apr 2021 00:00:00 +0000 Modified Sat, 01 Oct 2022 10:36:27 +0000 Schwierigkeitsgrad: Für jeden machbar

396 Words

Sebagai pengguna Synology Diskstation, saya menjalankan banyak layanan pada jaringan Homelab saya. Saya menerapkan perangkat lunak di Gitlab, mendokumentasikan pengetahuan di Confluence dan membaca referensi teknis melalui server web Calibre.

Semua layanan jaringan berkomunikasi secara terenkripsi dan diamankan melalui administrasi pengguna pusat. Hari ini saya menunjukkan bagaimana saya mengamankan layanan Calibre saya dengan enkripsi SSL, pencatatan akses dan pembatasan akses LDAP. Pengetahuan sebelumnya dari “Hal-hal keren dengan Atlassian: Gunakan semua alat Atlassian dengan LDAP” dan “Hal-hal hebat dengan kontainer: Menjalankan Calibre dengan Docker Compose” diperlukan untuk tutorial ini.

Server LDAP saya

Seperti yang sudah saya tulis, saya menjalankan server openLDAP pusat di dalam kontainer Docker. Saya juga sudah membuat beberapa grup aplikasi.

Mengamankan aplikasi yang tidak aman dengan proxy terbalik

Karena citra Docker “linuxserver/calibre-web” tidak mendukung enkripsi SSL dan LDAP, saya membuat jaringan virtual yang disebut “calibreweb” dan menempatkan proxy balik NGINX di depan server Calibre. Seperti inilah tampilan file Docker Compose saya. Semua log akses di masa mendatang disimpan di direktori log dan sertifikat yang saya tanda tangani sendiri ada di direktori certs.

version: '3.7'
services:
  nginx: 
    image:  weseek/nginx-auth-ldap:1.13.9-1-alpine
    container_name: calibre-nginx
    environment:
    - 'TZ=Europe/Berlin'
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
      - ./certs:/etc/certs
      - ./logs:/var/log/nginx
    ports:
      - 8443:443
    networks:
      - calibreweb
    restart: unless-stopped

  calibre-web:
    image: linuxserver/calibre-web
    container_name: calibre-web
    environment:
      - PUID=.....
      - PGID=....
      - TZ=Europe/Berlin
    volumes:
      - /volume/docker/calibre/app.db:/app/calibre-web/app.db
      - /volume/Buecher:/books
    expose:
      - 8083
    restart: unless-stopped
    networks:
      - calibreweb

networks:
  calibreweb:

Gambar Docker yang lebih berguna untuk penggunaan di rumah dapat ditemukan di Dockerverse.

Konfigurasi Nginx

File “default.conf” berisi semua konfigurasi LDAP dan enkripsi. Tentu saja, URL, binddn, sertifikat, port dan kata sandi serta grup harus disesuaikan.

# ldap auth configuration
auth_ldap_cache_enabled on;
auth_ldap_cache_expiration_time 10000;
auth_ldap_cache_size 1000;
ldap_server ldap1 {
    url ldaps://ldap.server.local:636/dc=homelab,dc=local?uid?sub?(&(objectClass=inetorgperson));

    binddn "cn=root oder so,dc=homelab,dc=local";
    binddn_passwd "password";
    connect_timeout 5s;
    bind_timeout 5s;
    request_timeout 5s;
    ssl_check_cert: off;
    group_attribute memberUid;
    group_attribute_is_dn off;
    require group "cn=APP-Bibliothek,ou=Groups,dc=homelab,dc=local";
    require valid_user;
}

server {
    listen              443 ssl;
    server_name  localhost;

    ssl_certificate /etc/certs/fullchain.pem;
    ssl_certificate_key /etc/certs/privkey.pem;
    #weitere SSL-Einstellungen

    location / {
        auth_ldap "LDAP-ONLY";
        auth_ldap_servers ldap1;

        proxy_set_header        Host            $http_host;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Scheme        $scheme;
        proxy_pass  http://calibre-web:8083; #<- docker expose port
    }
}


Jika Anda sekarang memulai penyiapan dengan “docker-compose -f …etc… up”, Anda juga dapat melihat akses pengguna yang masuk di log akses:

Karena pengguna LDAP hanya pengguna tamu, hak pengguna tamu harus diatur di Calibreweb: Saya menjalankan penyiapan ini untuk layanan-layanan berikut:* Perpustakaan video (Peertube)* Perpustakaan (Calibreweb)* Gitlab (CE tidak mendukung grup, jadi Anda harus log in 2x)