LAB Linux in heterogenen Netzen Apache2 Kerberos
Version vom 10. Oktober 2024, 19:08 Uhr von Thomas.will (Diskussion | Beiträge) (→Auf dem Domaincontroller Kerberos-Principal für Apache erstellen)
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
- 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:
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
Keytab-Datei auf den Apache-Webserver übertragen
- Kopiere die Keytab-Datei vom Domaincontroller auf den Apache-Webserver:
scp C:\temp\webkerberos.keytab user@webkerberos:/etc/apache2/krb5.keytab
Berechtigungen der Keytab-Datei auf dem Apache-Webserver setzen
- Setze die richtigen Berechtigungen auf dem Apache-Webserver:
chmod 600 /etc/apache2/krb5.keytab chown www-data:www-data /etc/apache2/krb5.keytab
Mit diesen Schritten hast du den Kerberos-Principal auf dem Domaincontroller erstellt und die Keytab-Datei auf den Apache-Webserver übertragen.
Keytab-Datei auf den Apache-Webserver übertragen
- Kopiere die erstellte Keytab-Datei auf den Webserver:
scp /etc/apache2/krb5.keytab user@webkerberos:/etc/apache2/krb5.keytab
- Passe die Berechtigungen an:
chmod 600 /etc/apache2/krb5.keytab chown www-data:www-data /etc/apache2/krb5.keytab
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"
KrbAuthRealms LAB34.LINUGGS.DE
Krb5KeyTab /etc/apache2/krb5.keytab
KrbMethodNegotiate on
KrbSaveCredentials on
Require valid-user
</Directory>
</VirtualHost>
Auf HTTPS umstellen
- Kopiere die Zertifikate:
sudo cp fullchain.pem privkey.pem /etc/apache2/
- Aktiviere SSL in Apache:
sudo a2enmod ssl
HTTPS-Konfiguration
Bearbeite die Datei `/etc/apache2/sites-enabled/000-default.conf` und füge die SSL-Konfiguration hinzu:
<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>
Reload
- Starte Apache neu:
sudo systemctl restart apache2
Checks
- Überprüfe den Apache-Status:
sudo systemctl status apache2
- Überprüfe die offenen Ports:
sudo ss -lntp | grep apache2
Weitere Sicherheit
HTTP abschalten
Bearbeite die Datei `/etc/apache2/ports.conf` und kommentiere die Zeile für Port 80 aus:
#Listen 80
Starte Apache neu:
systemctl restart apache2
Sicherheitsheader hinzufügen
- Lade das Headers-Modul:
sudo a2enmod headers
- Füge in der Apache-Konfiguration die folgenden Header hinzu:
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
Tests
- Überprüfe die Header:
curl -sI https://webkerberos.lab34.linuggs.de | egrep "Strict|X-Frame|X-Content"