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…“)
 
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.43/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::43/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-kerb krb5-user
  
= Zum Testen =
+
== Kerberos konfigurieren ==
; Install Test
+
=== Kerberos-Client-Installation ===
apt install ldap-utils
+
* sudo apt-get install krb5-user
  
; 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
  
= Auf dem DC =
+
[realms]
* Gruppe nuxtuxer anlegen
+
    LAB34.LINUGGS.DE = {
* User kit anlegen und in die Gruppe hinzufügen
+
        kdc = win2022.lab34.linuggs.de
* User webservice anlegen
+
        admin_server = win2022.lab34.linuggs.de
* Diesen nutzen wir zum LDAP binden
+
    }
  
= Wieder zurück =
+
[domain_realm]
* 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
+
    .lab34.linuggs.de = LAB34.LINUGGS.DE
 
+
    lab34.linuggs.de = LAB34.LINUGGS.DE
= Verlinken der Module =
+
</pre>
* a2enmod authnz_ldap
 
  
= Test Web Seite =
+
== Kerberos-Principal für Apache erstellen ==
* [[Test Web Seite]]
+
* kadmin -p administrator/admin
 +
* addprinc -randkey HTTP/webkerberos.lab34.linuggs.de
 +
* ktadd -k /etc/apache2/krb5.keytab HTTP/webkerberos.lab34.linuggs.de
  
= LDAP anbinden =
+
= Apache2 mit Kerberos absichern =
 
== Verlinken der Module ==
 
== Verlinken der Module ==
* a2enmod authnz_ldap
+
* a2enmod auth_kerb
  
 
== Wir bearbeiten die Datei ==
 
== Wir bearbeiten die Datei ==
 
  /etc/apache2/sites-enabled/000-default.conf
 
  /etc/apache2/sites-enabled/000-default.conf
  
=== Alle dürfen ===
+
=== Nur authentifizierte Benutzer dürfen zugreifen ===
 
<pre>
 
<pre>
 
<VirtualHost *:80>
 
<VirtualHost *:80>
Zeile 59: Zeile 66:
 
         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
+
         # Kerberos anbinden
 
         <Directory /var/www/html>
 
         <Directory /var/www/html>
                  AuthType Basic
+
            AuthType Kerberos
                  AuthBasicProvider ldap
+
            AuthName "Kerberos Login"
                  AuthName "LDAP-AUTHENTIFIKATION"
+
            KrbAuthRealms LAB34.LINUGGS.DE
                  AuthLDAPURL ldap://win2022.lab34.linuggs.de/dc=lab34,dc=linuggs,dc=de?sAMAccountName?sub
+
            KrbServiceName HTTP
                  AuthLDAPBindDN "cn=webservice,cn=users,dc=lab34,dc=linuggs,dc=de"
+
            Krb5KeyTab /etc/apache2/krb5.keytab
                  AuthLDAPBindPassword "12345-Xinux"
+
            KrbMethodNegotiate on
                  Require valid-user
+
            KrbSaveCredentials on
        </Directory>
+
            Require valid-user
</VirtualHost>
 
</pre>
 
 
 
=== Nur gewisse Gruppen dürfen ===
 
<pre>
 
<VirtualHost *:80>
 
        ServerAdmin webmaster@localhost
 
        DocumentRoot /var/www/html
 
        ErrorLog ${APACHE_LOG_DIR}/error.log
 
        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 ldap-group cn=nuxtuxer,cn=users,dc=lab34,dc=linuggs,dc=de
 
 
         </Directory>
 
         </Directory>
 
</VirtualHost>
 
</VirtualHost>
Zeile 101: Zeile 89:
 
'''<IfModule mod_ssl.c>'''
 
'''<IfModule mod_ssl.c>'''
 
   '''<VirtualHost _default_:443>'''
 
   '''<VirtualHost _default_:443>'''
         '''ServerName webserver.lab34.linuggs.de'''
+
         '''ServerName webkerberos.lab34.linuggs.de'''
 
         ServerAdmin technik@lab34.linuggs.de
 
         ServerAdmin technik@lab34.linuggs.de
 
         DocumentRoot /var/www/html
 
         DocumentRoot /var/www/html
Zeile 109: Zeile 97:
 
         '''SSLCertificateFile /etc/apache2/fullchain.pem'''
 
         '''SSLCertificateFile /etc/apache2/fullchain.pem'''
 
         '''SSLCertificateKeyFile /etc/apache2/privkey.pem'''
 
         '''SSLCertificateKeyFile /etc/apache2/privkey.pem'''
         # LDAP anbinden
+
         # Kerberos anbinden
 
         <Directory /var/www/html>
 
         <Directory /var/www/html>
              AuthType Basic
+
            AuthType Kerberos
              AuthBasicProvider ldap
+
            AuthName "Kerberos Login"
              AuthName "LDAP-AUTHENTIFIKATION"
+
            KrbAuthRealms LAB34.LINUGGS.DE
              AuthLDAPURL ldap://win2022.lab34.linuggs.de/dc=lab34,dc=linuggs,dc=de?sAMAccountName?sub
+
            KrbServiceName HTTP
              AuthLDAPBindDN "cn=webservice,cn=users,dc=lab34,dc=linuggs,dc=de"
+
            Krb5KeyTab /etc/apache2/krb5.keytab
              AuthLDAPBindPassword "12345-Xinux"
+
            KrbMethodNegotiate on
              Require valid-user
+
            KrbSaveCredentials on
 +
            Require valid-user
 
         </Directory>
 
         </Directory>
 
       </VirtualHost>
 
       </VirtualHost>
Zeile 133: Zeile 122:
  
 
; Cipher and Protocol
 
; Cipher and Protocol
* nmap -sV --script ssl-enum-ciphers -p 443 webserver.lab34.linuggs.de
+
* nmap -sV --script ssl-enum-ciphers -p 443 webkerberos.lab34.linuggs.de
  
 
; Zertifikat
 
; Zertifikat
* nmap -sV --script ssl-enum-ciphers -p 443 webserver.lab34.linuggs.de
+
* 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 =
 +
* curl -sI https://webkerberos.lab34.linuggs.de | egrep "Strict|X-Frame|X-Content"
 +
= AppArmor =
 +
; Under Construction
 +
* [[Apache2 mit AppArmor from the Scratch]]

Version vom 10. Oktober 2024, 18:50 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.43/24
  • GWv4: 172.26.55.1
  • NSv4: 172.26.54.2
  • DOM: lab34.linuggs.de
  • IPv6: 2a02:24d8:71:3037::43/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-kerb krb5-user

Kerberos konfigurieren

Kerberos-Client-Installation

  • sudo apt-get install krb5-user

/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