LAB Linux in heterogenen Netzen Apache2 Kerberos: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „= Ziel = * Wir wollen einen Apache2 Webserver aufsetzen * Diesen wollen wir mit LDAP gegen die Domain authentifizieren = Aus dem Debian-Template einen Klon er…“
 
Keine Bearbeitungszusammenfassung
 
(22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Ziel =
= Ziel =
* Wir wollen einen Apache2 Webserver aufsetzen
* Wir wollen einen Apache2-Webserver aufsetzen
* Diesen wollen wir mit LDAP gegen die Domain authentifizieren
* Diesen wollen wir mit Kerberos zur Authentifizierung gegen die Domain absichern


= Aus dem Debian-Template einen Klon erstellen =
= Aus dem Debian-Template einen Klon erstellen =
* Name: webserver
* Name: webkerberos
* Netz: dmz
* Netz: dmz
* HOSTS: webserver.lab34.linuggs.de
* HOSTS: webkerberos.lab34.linuggs.de
* IPv4: 172.26.55.2/24
* IPv4: 172.26.55.42/24
* GWv4: 172.26.55.1
* GWv4: 172.26.55.1
* NSv4: 172.26.54.2
* NSv4: 172.26.54.2
* DOM: lab34.linuggs.de
* DOM: lab34.linuggs.de
* IPv6: 2a02:24d8:71:3037::2/64
* IPv6: 2a02:24d8:71:3037::42/64
* GWv6: 2a02:24d8:71:3037::1
* GWv6: 2a02:24d8:71:3037::1
* NSv6: 2a02:24d8:71:3036::2
* NSv6: 2a02:24d8:71:3036::2
Zeile 21: Zeile 21:


= Installation verschiedener Pakete =
= Installation verschiedener Pakete =
* sudo apt-get install apache2 mariadb-server php php-intl php-mbstring php-xml php-apcu php-curl php-mysql unzip php-ldap
* '''sudo apt-get install apache2 libapache2-mod-auth-gssapi krb5-user'''


= Zum Testen =
== Kerberos konfigurieren ==
; Install Test
apt install ldap-utils


; Connection Test
=== /etc/krb5.conf bearbeiten ===
ldapsearch -x -H ldap://172.26.54.2 -D "cn=administrator,cn=users,dc=lab34,dc=linuggs,dc=de" -b "dc=lab34,dc=linuggs,dc=de" -w 123Start$
<pre>
[libdefaults]
    default_realm = LAB34.LINUGGS.DE
    dns_lookup_realm = false
    dns_lookup_kdc = true
    rdns = false
    forwardable = true
 
[realms]
    LAB34.LINUGGS.DE = {
        kdc = win2022.lab34.linuggs.de
        admin_server = win2022.lab34.linuggs.de
    }
 
[domain_realm]
    .lab34.linuggs.de = LAB34.LINUGGS.DE
    lab34.linuggs.de = LAB34.LINUGGS.DE
</pre>


= Auf dem DC =
= '''Auf dem Domaincontroller''' Kerberos-Principal für Apache erstellen =
* Gruppe nuxtuxer anlegen
:Erstellen
* User kit anlegen und in die Gruppe hinzufügen
Melde dich auf dem Windows Domaincontroller an und verwende das Tool ktpass.exe, um den Kerberos-Principal zu erstellen und die Keytab-Datei zu generieren.
* User webservice anlegen
* Diesen nutzen wir zum LDAP binden


= Wieder zurück =
Führe in einer administrativen Eingabeaufforderung (cmd) folgende Befehle aus:
* ldapsearch -x -H ldap://172.26.54.2 -D "cn=webservice,cn=users,dc=lab34,dc=linuggs,dc=de" -b "dc=lab34,dc=linuggs,dc=de" -w 12345-Xinux


= Verlinken der Module =
*'''mkdir C:\temp'''
* a2enmod authnz_ldap
*'''ktpass /princ HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE /mapuser webservice@lab34.linuggs.de /pass * /out C:\temp\webkerberos.keytab /crypto ALL /ptype KRB5_NT_PRINCIPAL'''


= Test Web Seite =
Erläuterung:
* [[Test Web Seite]]
* /princ definiert den Kerberos-Principal (HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE)
* /mapuser weist den Principal einem Benutzerkonto in Active Directory zu (webservice@lab34.linuggs.de)
* /pass * wird verwendet, um das Passwort des Benutzers bei der Eingabeaufforderung einzugeben
* /out legt den Speicherort der Keytab-Datei fest (in diesem Beispiel C:\temp\webkerberos.keytab)
* /crypto ALL erlaubt alle Verschlüsselungsmethoden
* /ptype KRB5_NT_PRINCIPAL gibt den Typ des Principals an


= LDAP anbinden =
;Übertragen
Kopiere die Keytab-Datei vom Domaincontroller auf den Apache-Webserver:
*'''scp C:\temp\webkerberos.keytab kit@webkerberos:/tmp'''
 
== '''Auf dem Webserver''' Berechtigungen der Keytab-Datei auf dem Apache-Webserver setzen ==
;Setze die richtigen Berechtigungen auf dem Apache-Webserver:
*sudo cp /tmp/webkerberos.keytab /etc/apache2/krb5.keytab
*sudo chmod 600 /etc/apache2/krb5.keytab
*sudo chown www-data:www-data /etc/apache2/krb5.keytab
==GSSAPI==
*[[GSSAPI]]
= Apache2 mit Kerberos absichern =
== Verlinken der Module ==
== Verlinken der Module ==
* a2enmod authnz_ldap
* Aktiviere das GSSAPI-Modul:
<pre>
a2enmod auth_gssapi
</pre>


== Wir bearbeiten die Datei ==
== Konfiguration der Apache-Website ==
/etc/apache2/sites-enabled/000-default.conf
Bearbeite die Datei '''/etc/apache2/sites-enabled/000-default.conf''' und füge folgendes hinzu:


=== Alle dürfen ===
=== Nur authentifizierte Benutzer dürfen zugreifen ===
<pre>
<pre>
<VirtualHost *:80>
<VirtualHost *:80>
Zeile 59: Zeile 90:
         ErrorLog ${APACHE_LOG_DIR}/error.log
         ErrorLog ${APACHE_LOG_DIR}/error.log
         CustomLog ${APACHE_LOG_DIR}/access.log combined
         CustomLog ${APACHE_LOG_DIR}/access.log combined
        # LDAP anbinden
        <Directory /var/www/html>
                  AuthType Basic
                  AuthBasicProvider ldap
                  AuthName "LDAP-AUTHENTIFIKATION"
                  AuthLDAPURL ldap://win2022.lab34.linuggs.de/dc=lab34,dc=linuggs,dc=de?sAMAccountName?sub
                  AuthLDAPBindDN "cn=webservice,cn=users,dc=lab34,dc=linuggs,dc=de"
                  AuthLDAPBindPassword "12345-Xinux"
                  Require valid-user
        </Directory>
</VirtualHost>
</pre>


=== Nur gewisse Gruppen dürfen ===
         # Kerberos anbinden
<pre>
        <Directory /var/www/html>
<VirtualHost *:80>
          AuthType GSSAPI
        ServerAdmin webmaster@localhost
          AuthName "Kerberos Login"
        DocumentRoot /var/www/html
          GssapiCredStore keytab:/etc/apache2/krb5.keytab
        ErrorLog ${APACHE_LOG_DIR}/error.log
          GssapiUseSessions on
        CustomLog ${APACHE_LOG_DIR}/access.log combined
          Require valid-user
         # LDAP anbinden
        <Directory /var/www/html>
                  AuthType Basic
                  AuthBasicProvider ldap
                  AuthName "LDAP-AUTHENTIFIKATION"
                  AuthLDAPURL ldap://win2022.lab34.linuggs.de/dc=lab34,dc=linuggs,dc=de?sAMAccountName?sub
                  AuthLDAPBindDN "cn=webservice,cn=users,dc=lab34,dc=linuggs,dc=de"
                  AuthLDAPBindPassword "12345-Xinux"
                  Require ldap-group cn=nuxtuxer,cn=users,dc=lab34,dc=linuggs,dc=de
         </Directory>
         </Directory>
</VirtualHost>
</VirtualHost>
               
</pre>
</pre>
;Restart
*systemctl restart apache2
=Auf dem Webserver=
*klist -k /etc/apache2/krb5.keytab
Keytab name: FILE:/etc/apache2/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
    6 HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE
    6 HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE
    6 HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE
    6 HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE
    6 HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE
*Die Zahl 6 steht für die **Key Version Number (KVNO)
*Dies zeigt an, dass dies die 6. Version des Schlüssels für den Principal ist.
*Jedes Mal, wenn ein neuer Schlüssel generiert wird, wird die KVNO erhöht.
*Mehrere Einträge mit KVNO 6 existieren
*Es sind verschiedene Verschlüsselungsalgorithmen für denselben Principal hinterlegt.


= Auf HTTPS umstellen =
[[Kategorie:KERBEROS]]
* sudo cp fullchain.pem privkey.pem /etc/apache2/
* sudo a2enmod ssl
 
== Wir bearbeiten die Datei ==
* sudo vi /etc/apache2/sites-enabled/000-default.conf
 
'''<IfModule mod_ssl.c>'''
  '''<VirtualHost _default_:443>'''
        '''ServerName webserver.lab34.linuggs.de'''
        ServerAdmin technik@lab34.linuggs.de
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        '''SSLEngine on'''
        '''SSLCertificateFile /etc/apache2/fullchain.pem'''
        '''SSLCertificateKeyFile /etc/apache2/privkey.pem'''
        # LDAP anbinden
        <Directory /var/www/html>
              AuthType Basic
              AuthBasicProvider ldap
              AuthName "LDAP-AUTHENTIFIKATION"
              AuthLDAPURL ldap://win2022.lab34.linuggs.de/dc=lab34,dc=linuggs,dc=de?sAMAccountName?sub
              AuthLDAPBindDN "cn=webservice,cn=users,dc=lab34,dc=linuggs,dc=de"
              AuthLDAPBindPassword "12345-Xinux"
              Require valid-user
        </Directory>
      </VirtualHost>
'''</IfModule>'''
 
= Reload =
* sudo systemctl restart apache2
 
= Checks =
; Status?
* sudo systemctl status apache2
 
; Port?
* sudo ss -lntp | grep apache2
 
; Cipher and Protocol
* nmap -sV --script ssl-enum-ciphers -p 443 webserver.lab34.linuggs.de
 
; Zertifikat
* nmap -sV --script ssl-enum-ciphers -p 443 webserver.lab34.linuggs.de

Aktuelle Version vom 10. Oktober 2024, 20:08 Uhr

Ziel

  • Wir wollen einen Apache2-Webserver aufsetzen
  • Diesen wollen wir mit Kerberos zur Authentifizierung gegen die Domain absichern

Aus dem Debian-Template einen Klon erstellen

  • Name: webkerberos
  • Netz: dmz
  • HOSTS: webkerberos.lab34.linuggs.de
  • IPv4: 172.26.55.42/24
  • GWv4: 172.26.55.1
  • NSv4: 172.26.54.2
  • DOM: lab34.linuggs.de
  • IPv6: 2a02:24d8:71:3037::42/64
  • GWv6: 2a02:24d8:71:3037::1
  • NSv6: 2a02:24d8:71:3036::2

Auf dem Domaincontroller

  • A-Record eintragen
  • AAAA-Record eintragen
  • PTR-Record automatisch erstellen lassen

Installation verschiedener Pakete

  • sudo apt-get install apache2 libapache2-mod-auth-gssapi krb5-user

Kerberos konfigurieren

/etc/krb5.conf bearbeiten

[libdefaults]
    default_realm = LAB34.LINUGGS.DE
    dns_lookup_realm = false
    dns_lookup_kdc = true
    rdns = false
    forwardable = true

[realms]
    LAB34.LINUGGS.DE = {
        kdc = win2022.lab34.linuggs.de
        admin_server = win2022.lab34.linuggs.de
    }

[domain_realm]
    .lab34.linuggs.de = LAB34.LINUGGS.DE
    lab34.linuggs.de = LAB34.LINUGGS.DE

Auf dem Domaincontroller Kerberos-Principal für Apache erstellen

Erstellen

Melde dich auf dem Windows Domaincontroller an und verwende das Tool ktpass.exe, um den Kerberos-Principal zu erstellen und die Keytab-Datei zu generieren.

Führe in einer administrativen Eingabeaufforderung (cmd) folgende Befehle aus:

  • mkdir C:\temp
  • ktpass /princ HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE /mapuser webservice@lab34.linuggs.de /pass * /out C:\temp\webkerberos.keytab /crypto ALL /ptype KRB5_NT_PRINCIPAL

Erläuterung:

  • /princ definiert den Kerberos-Principal (HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE)
  • /mapuser weist den Principal einem Benutzerkonto in Active Directory zu (webservice@lab34.linuggs.de)
  • /pass * wird verwendet, um das Passwort des Benutzers bei der Eingabeaufforderung einzugeben
  • /out legt den Speicherort der Keytab-Datei fest (in diesem Beispiel C:\temp\webkerberos.keytab)
  • /crypto ALL erlaubt alle Verschlüsselungsmethoden
  • /ptype KRB5_NT_PRINCIPAL gibt den Typ des Principals an
Übertragen

Kopiere die Keytab-Datei vom Domaincontroller auf den Apache-Webserver:

  • scp C:\temp\webkerberos.keytab kit@webkerberos:/tmp

Auf dem Webserver Berechtigungen der Keytab-Datei auf dem Apache-Webserver setzen

Setze die richtigen Berechtigungen auf dem Apache-Webserver
  • sudo cp /tmp/webkerberos.keytab /etc/apache2/krb5.keytab
  • sudo chmod 600 /etc/apache2/krb5.keytab
  • sudo chown www-data:www-data /etc/apache2/krb5.keytab

GSSAPI

Apache2 mit Kerberos absichern

Verlinken der Module

  • Aktiviere das GSSAPI-Modul:
a2enmod auth_gssapi

Konfiguration der Apache-Website

Bearbeite die Datei /etc/apache2/sites-enabled/000-default.conf und füge folgendes hinzu:

Nur authentifizierte Benutzer dürfen zugreifen

<VirtualHost *:80>
        ServerAdmin technik@lab34.linuggs.de
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # Kerberos anbinden
         <Directory /var/www/html>
          AuthType GSSAPI
          AuthName "Kerberos Login"
          GssapiCredStore keytab:/etc/apache2/krb5.keytab
          GssapiUseSessions on
          Require valid-user
        </Directory>
</VirtualHost>
                
Restart
  • systemctl restart apache2

Auf dem Webserver

  • klist -k /etc/apache2/krb5.keytab
Keytab name: FILE:/etc/apache2/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   6 HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE
   6 HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE
   6 HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE
   6 HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE
   6 HTTP/webkerberos.lab34.linuggs.de@LAB34.LINUGGS.DE
  • Die Zahl 6 steht für die **Key Version Number (KVNO)
  • Dies zeigt an, dass dies die 6. Version des Schlüssels für den Principal ist.
  • Jedes Mal, wenn ein neuer Schlüssel generiert wird, wird die KVNO erhöht.
  • Mehrere Einträge mit KVNO 6 existieren
  • Es sind verschiedene Verschlüsselungsalgorithmen für denselben Principal hinterlegt.