LAB Linux in heterogenen Netzen Apache2 Kerberos

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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

Kerberos-Principal für Apache erstellen

  • kadmin -p administrator/admin
  • addprinc -randkey HTTP/webkerberos.lab34.linuggs.de
  • ktadd -k /etc/apache2/krb5.keytab HTTP/webkerberos.lab34.linuggs.de

Apache2 mit Kerberos absichern

Verlinken der Module

  • a2enmod auth_kerb

Wir bearbeiten die Datei

/etc/apache2/sites-enabled/000-default.conf

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 Kerberos
            AuthName "Kerberos Login"
            KrbAuthRealms LAB34.LINUGGS.DE
            KrbServiceName HTTP
            Krb5KeyTab /etc/apache2/krb5.keytab
            KrbMethodNegotiate on
            KrbSaveCredentials on
            Require valid-user
        </Directory>
</VirtualHost>

Auf HTTPS umstellen

  • 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 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 Kerberos
           AuthName "Kerberos Login"
           KrbAuthRealms LAB34.LINUGGS.DE
           KrbServiceName HTTP
           Krb5KeyTab /etc/apache2/krb5.keytab
           KrbMethodNegotiate on
           KrbSaveCredentials on
           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 webkerberos.lab34.linuggs.de
Zertifikat
  • nmap -sV --script ssl-enum-ciphers -p 443 webkerberos.lab34.linuggs.de

Weitere Sicherheit

HTTP abschalten

In der Datei /etc/apache2/ports.conf

#Listen 80

auskommentieren

Neustarten
  • systemctl restart apache2

Header-Optionen

Modul headers laden
  • sudo a2enmod headers
Sicherheitsoptionen zusätzlich zu TLS
# HSTS aktivieren (1 Jahr) - Erzwingt die Nutzung von HTTPS für 1 Jahr
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# Schutz vor Clickjacking - Verhindert, dass die Webseite in einem iFrame eingebettet wird
Header always set X-Frame-Options DENY
# Schutz vor MIME-Sniffing - Erzwingt, dass der Browser den Content-Type strikt beachtet
Header always set X-Content-Type-Options nosniff

Restart

  • systemctl restart apache2

Tests

AppArmor

Under Construction