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

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 71: Zeile 71:
 
*sudo chmod 600 /etc/apache2/krb5.keytab
 
*sudo chmod 600 /etc/apache2/krb5.keytab
 
*sudo chown www-data:www-data /etc/apache2/krb5.keytab
 
*sudo chown www-data:www-data /etc/apache2/krb5.keytab
 
+
==GSSAPI==
Mit diesen Schritten hast du den Kerberos-Principal auf dem Domaincontroller erstellt und die Keytab-Datei auf den Apache-Webserver übertragen.
+
*[[GSSAPI]]
 
 
== Keytab-Datei auf den Apache-Webserver übertragen ==
 
* Kopiere die erstellte Keytab-Datei auf den Webserver:
 
<pre>
 
scp /etc/apache2/krb5.keytab user@webkerberos:/etc/apache2/krb5.keytab
 
</pre>
 
* Passe die Berechtigungen an:
 
<pre>
 
chmod 600 /etc/apache2/krb5.keytab
 
chown www-data:www-data /etc/apache2/krb5.keytab
 
</pre>
 
 
 
 
= Apache2 mit Kerberos absichern =
 
= Apache2 mit Kerberos absichern =
 
== Verlinken der Module ==
 
== Verlinken der Module ==
Zeile 93: Zeile 81:
  
 
== Konfiguration der Apache-Website ==
 
== Konfiguration der Apache-Website ==
Bearbeite die Datei `/etc/apache2/sites-enabled/000-default.conf` und füge folgendes hinzu:
+
Bearbeite die Datei '''/etc/apache2/sites-enabled/000-default.conf''' und füge folgendes hinzu:
  
 
=== Nur authentifizierte Benutzer dürfen zugreifen ===
 
=== Nur authentifizierte Benutzer dürfen zugreifen ===
Zeile 104: Zeile 92:
  
 
         # Kerberos anbinden
 
         # Kerberos anbinden
        <Directory /var/www/html>
+
        <Directory /var/www/html>
            AuthType GSSAPI
+
          AuthType GSSAPI
            AuthName "Kerberos Login"
+
          AuthName "Kerberos Login"
            KrbAuthRealms LAB34.LINUGGS.DE
+
          GssapiCredStore keytab:/etc/apache2/krb5.keytab
            Krb5KeyTab /etc/apache2/krb5.keytab
+
          GssapiUseSessions on
            KrbMethodNegotiate on
+
          Require valid-user
            KrbSaveCredentials on
 
            Require valid-user
 
 
         </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]]
* Kopiere die Zertifikate:
 
<pre>
 
sudo cp fullchain.pem privkey.pem /etc/apache2/
 
</pre>
 
* Aktiviere SSL in Apache:
 
<pre>
 
sudo a2enmod ssl
 
</pre>
 
 
 
== HTTPS-Konfiguration ==
 
Bearbeite die Datei `/etc/apache2/sites-enabled/000-default.conf` und füge die SSL-Konfiguration hinzu:
 
 
 
<pre>
 
<IfModule mod_ssl.c>
 
  <VirtualHost _default_:443>
 
        ServerName webkerberos.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
 
 
 
        # Kerberos anbinden
 
        <Directory /var/www/html>
 
            AuthType GSSAPI
 
            AuthName "Kerberos Login"
 
            KrbAuthRealms LAB34.LINUGGS.DE
 
            Krb5KeyTab /etc/apache2/krb5.keytab
 
            KrbMethodNegotiate on
 
            KrbSaveCredentials on
 
            Require valid-user
 
        </Directory>
 
      </VirtualHost>
 
</IfModule>
 
</pre>
 
 
 
= Reload =
 
* Starte Apache neu:
 
<pre>
 
sudo systemctl restart apache2
 
</pre>
 
 
 
= Checks =
 
* Überprüfe den Apache-Status:
 
<pre>
 
sudo systemctl status apache2
 
</pre>
 
* Überprüfe die offenen Ports:
 
<pre>
 
sudo ss -lntp | grep apache2
 
</pre>
 
 
 
= Weitere Sicherheit =
 
== HTTP abschalten ==
 
Bearbeite die Datei `/etc/apache2/ports.conf` und kommentiere die Zeile für Port 80 aus:
 
<pre>
 
#Listen 80
 
</pre>
 
Starte Apache neu:
 
<pre>
 
systemctl restart apache2
 
</pre>
 
 
 
== Sicherheitsheader hinzufügen ==
 
* Lade das Headers-Modul:
 
<pre>
 
sudo a2enmod headers
 
</pre>
 
* Füge in der Apache-Konfiguration die folgenden Header hinzu:
 
<pre>
 
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
 
Header always set X-Frame-Options DENY
 
Header always set X-Content-Type-Options nosniff
 
</pre>
 
 
 
= Tests =
 
* Überprüfe die Header:
 
<pre>
 
curl -sI https://webkerberos.lab34.linuggs.de | egrep "Strict|X-Frame|X-Content"
 
</pre>
 

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.