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

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 21: Zeile 21:
  
 
= Installation verschiedener Pakete =
 
= Installation verschiedener Pakete =
*sudo apt-get install apache2 libapache2-mod-auth-gssapi krb5-user
+
* sudo apt-get install apache2 libapache2-mod-auth-gssapi krb5-user
  
 
== Kerberos konfigurieren ==
 
== Kerberos konfigurieren ==
Zeile 45: Zeile 45:
 
</pre>
 
</pre>
  
 +
== Auf dem Domaincontroller Kerberos-Principal für Apache erstellen ==
 +
* Melde dich auf dem Domaincontroller an und führe folgende Befehle aus:
 +
<pre>
 +
kadmin -p administrator/admin
 +
addprinc -randkey HTTP/webkerberos.lab34.linuggs.de
 +
ktadd -k /etc/apache2/krb5.keytab HTTP/webkerberos.lab34.linuggs.de
 +
</pre>
  
== Auf dem Domain Controller Kerberos-Principal für Apache erstellen ==
+
== Keytab-Datei auf den Apache-Webserver übertragen ==
* kadmin -p administrator/admin
+
* Kopiere die erstellte Keytab-Datei auf den Webserver:
* addprinc -randkey HTTP/webkerberos.lab34.linuggs.de
+
<pre>
* ktadd -k /etc/apache2/krb5.keytab HTTP/webkerberos.lab34.linuggs.de
+
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 ==
* a2enmod auth_kerb
+
* 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:
  
 
=== Nur authentifizierte Benutzer dürfen zugreifen ===
 
=== Nur authentifizierte Benutzer dürfen zugreifen ===
Zeile 65: Zeile 81:
 
         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
 +
 
         # Kerberos anbinden
 
         # Kerberos anbinden
 
         <Directory /var/www/html>
 
         <Directory /var/www/html>
             AuthType Kerberos
+
             AuthType GSSAPI
 
             AuthName "Kerberos Login"
 
             AuthName "Kerberos Login"
 
             KrbAuthRealms LAB34.LINUGGS.DE
 
             KrbAuthRealms LAB34.LINUGGS.DE
            KrbServiceName HTTP
 
 
             Krb5KeyTab /etc/apache2/krb5.keytab
 
             Krb5KeyTab /etc/apache2/krb5.keytab
 
             KrbMethodNegotiate on
 
             KrbMethodNegotiate on
Zeile 80: Zeile 96:
  
 
= Auf HTTPS umstellen =
 
= Auf HTTPS umstellen =
* sudo cp fullchain.pem privkey.pem /etc/apache2/
+
* Kopiere die Zertifikate:
* sudo a2enmod ssl
+
<pre>
 +
sudo cp fullchain.pem privkey.pem /etc/apache2/
 +
</pre>
 +
* Aktiviere SSL in Apache:
 +
<pre>
 +
sudo a2enmod ssl
 +
</pre>
  
== Wir bearbeiten die Datei ==
+
== HTTPS-Konfiguration ==
* sudo vi /etc/apache2/sites-enabled/000-default.conf
+
Bearbeite die Datei `/etc/apache2/sites-enabled/000-default.conf` und füge die SSL-Konfiguration hinzu:
  
'''<IfModule mod_ssl.c>'''
+
<pre>
   '''<VirtualHost _default_:443>'''
+
<IfModule mod_ssl.c>
         '''ServerName webkerberos.lab34.linuggs.de'''
+
   <VirtualHost _default_:443>
 +
         ServerName webkerberos.lab34.linuggs.de
 
         ServerAdmin technik@lab34.linuggs.de
 
         ServerAdmin technik@lab34.linuggs.de
 
         DocumentRoot /var/www/html
 
         DocumentRoot /var/www/html
 
         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
         '''SSLEngine on'''
+
         SSLEngine on
         '''SSLCertificateFile /etc/apache2/fullchain.pem'''
+
         SSLCertificateFile /etc/apache2/fullchain.pem
         '''SSLCertificateKeyFile /etc/apache2/privkey.pem'''
+
         SSLCertificateKeyFile /etc/apache2/privkey.pem
 +
 
 
         # Kerberos anbinden
 
         # Kerberos anbinden
 
         <Directory /var/www/html>
 
         <Directory /var/www/html>
             AuthType Kerberos
+
             AuthType GSSAPI
 
             AuthName "Kerberos Login"
 
             AuthName "Kerberos Login"
 
             KrbAuthRealms LAB34.LINUGGS.DE
 
             KrbAuthRealms LAB34.LINUGGS.DE
            KrbServiceName HTTP
 
 
             Krb5KeyTab /etc/apache2/krb5.keytab
 
             Krb5KeyTab /etc/apache2/krb5.keytab
 
             KrbMethodNegotiate on
 
             KrbMethodNegotiate on
Zeile 108: Zeile 131:
 
         </Directory>
 
         </Directory>
 
       </VirtualHost>
 
       </VirtualHost>
'''</IfModule>'''
+
</IfModule>
 +
</pre>
  
 
= Reload =
 
= Reload =
* sudo systemctl restart apache2
+
* Starte Apache neu:
 +
<pre>
 +
sudo systemctl restart apache2
 +
</pre>
  
 
= Checks =
 
= Checks =
; Status?
+
* Überprüfe den Apache-Status:
* sudo systemctl status apache2
+
<pre>
 
+
sudo systemctl status apache2
; Port?
+
</pre>
* sudo ss -lntp | grep apache2
+
* Überprüfe die offenen Ports:
 
+
<pre>
; Cipher and Protocol
+
sudo ss -lntp | grep apache2
* nmap -sV --script ssl-enum-ciphers -p 443 webkerberos.lab34.linuggs.de
+
</pre>
 
 
; Zertifikat
 
* nmap -sV --script ssl-enum-ciphers -p 443 webkerberos.lab34.linuggs.de
 
  
 
= Weitere Sicherheit =
 
= Weitere Sicherheit =
 
== HTTP abschalten ==
 
== HTTP abschalten ==
'''In der Datei /etc/apache2/ports.conf'''
+
Bearbeite die Datei `/etc/apache2/ports.conf` und kommentiere die Zeile für Port 80 aus:
#Listen 80
+
<pre>
'''auskommentieren'''
+
#Listen 80
 +
</pre>
 +
Starte Apache neu:
 +
<pre>
 +
systemctl restart apache2
 +
</pre>
  
; Neustarten
+
== Sicherheitsheader hinzufügen ==
* systemctl restart apache2
+
* Lade das Headers-Modul:
 
+
<pre>
== Header-Optionen ==
+
sudo a2enmod headers
; Modul headers laden
+
</pre>
* sudo a2enmod headers
+
* Füge in der Apache-Konfiguration die folgenden Header hinzu:
 
+
<pre>
; Sicherheitsoptionen zusätzlich zu TLS
+
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# HSTS aktivieren (1 Jahr) - Erzwingt die Nutzung von HTTPS für 1 Jahr
+
Header always set X-Frame-Options DENY
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
+
Header always set X-Content-Type-Options nosniff
 
+
</pre>
# 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 =
 
= Tests =
* curl -sI https://webkerberos.lab34.linuggs.de | egrep "Strict|X-Frame|X-Content"
+
* Überprüfe die Header:
= AppArmor =
+
<pre>
; Under Construction
+
curl -sI https://webkerberos.lab34.linuggs.de | egrep "Strict|X-Frame|X-Content"
* [[Apache2 mit AppArmor from the Scratch]]
+
</pre>

Version vom 10. Oktober 2024, 19:04 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

  • Melde dich auf dem Domaincontroller an und führe folgende Befehle aus:
kadmin -p administrator/admin
addprinc -randkey HTTP/webkerberos.lab34.linuggs.de
ktadd -k /etc/apache2/krb5.keytab HTTP/webkerberos.lab34.linuggs.de

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"