Apparmor Apache2: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
=Die apparmor-utils sollten installiert sein=
 
*apt-get install apparmor-utils
 
=Installation dem Apache2 Modules=
 
*apt install libapache2-mod-apparmor
 
=Aktivieren des Moduls=
 
*aa-enforce /etc/apparmor.d/usr.sbin.apache2
 
=Konfiguration von Apache2=
 
*a2enmod mpm_prefork
 
*a2enmod apparmor
 
*systemctl restart apache2
 
=Gucken ob apache2 Dinge tut die, die er nicht darf=
 
*aa-logprof
 
 
=Absicherung eines Apache2-Webservers mit AppArmor auf Debian=
 
=Absicherung eines Apache2-Webservers mit AppArmor auf Debian=
  
 
==Ziel==
 
==Ziel==
* Minimierung der Angriffsfläche durch strikte Zugriffskontrolle.
+
* Reduzierung der Angriffsfläche durch Zugriffsbeschränkungen auf Dateisystemebene.
* Nur explizit erlaubte Dateien, Verzeichnisse und Aktionen für den Apache-Prozess.
+
* Der Apache2-Prozess darf nur auf explizit erlaubte Dateien und Verzeichnisse zugreifen.
* Schutz vor Webshells, Directory Traversal und unautorisierten Zugriffen.
+
* Schutz vor Webshells, ungewolltem Zugriff auf /etc/, /root/, etc.
  
 
==Voraussetzungen==
 
==Voraussetzungen==
* Debian-basiertes System (z. B. Debian 12, Ubuntu)
+
* Debian- oder Ubuntu-System mit Apache2
* Apache2 ist installiert und läuft
+
* root-Zugriff
* AppArmor ist aktiv (Standard auf Debian)
+
 
 +
==Installation der AppArmor-Werkzeuge==
 +
*apt-get install apparmor apparmor-utils
  
 
==Status prüfen==
 
==Status prüfen==
 
+
*systemctl status apparmor
*Läuft AppArmor?*
+
*aa-status | grep apache2
systemctl status apparmor
 
 
 
*Ist das Apache-Profil geladen?*
 
aa-status | grep apache2
 
  
 
==AppArmor-Profil für Apache2 aktivieren==
 
==AppArmor-Profil für Apache2 aktivieren==
 +
*aa-enforce /etc/apparmor.d/usr.sbin.apache2
  
*Standardpfad des Profils prüfen (meist bereits vorhanden):*
+
==Profil in Lernmodus setzen (optional)==
ls /etc/apparmor.d/usr.sbin.apache2
+
*aa-complain /etc/apparmor.d/usr.sbin.apache2
 +
*systemctl restart apache2
  
*Profil aktivieren:*
+
==Traffic erzeugen und Log beobachten==
ln -s /etc/apparmor.d/usr.sbin.apache2 /etc/apparmor.d/force-complain/usr.sbin.apache2
+
*Im Browser verschiedene Seiten und Funktionen der Website aufrufen
aa-enforce /etc/apparmor.d/usr.sbin.apache2
+
*journalctl -xe | grep DENIED
  
==AppArmor in den Audit-Log-Modus versetzen (zum Anlernen)==
+
==Profilvorschläge durchgehen==
 +
*aa-logprof
 +
*Empfohlene Regeln prüfen und anwenden
  
*In complain mode wechseln:*
+
==Profil in Durchsetzungsmodus setzen==
aa-complain /etc/apparmor.d/usr.sbin.apache2
+
*aa-enforce /etc/apparmor.d/usr.sbin.apache2
 
+
*systemctl restart apache2
*Apache-Dienst neu starten:*
 
systemctl restart apache2
 
 
 
*Webseite besuchen, damit Zugriffe geloggt werden.*
 
 
 
==Profil erweitern/lernen==
 
 
 
*Log prüfen und Profilvorschläge generieren:*
 
aa-logprof
 
 
 
*Einträge durchgehen, sinnvolle Zugriffe erlauben, alles andere ablehnen.*
 
 
 
==Zurück in den Enforce-Modus wechseln==
 
 
 
*Nach dem Anlernen wieder aktiv schalten:*
 
aa-enforce /etc/apparmor.d/usr.sbin.apache2
 
 
 
==Beispiel: Zugriff auf /srv/www erlauben==
 
  
*Wenn du das Webroot geändert hast (z. B. auf /srv/www), musst du das Profil anpassen:*
+
==Beispiel: Zugriff auf benutzerdefiniertes Webroot erlauben==
nano /etc/apparmor.d/usr.sbin.apache2
+
*nano /etc/apparmor.d/usr.sbin.apache2
  
*Ergänzen:*
+
Folgende Zeilen ergänzen, wenn z. B. /srv/www genutzt wird:
 
  /srv/www/ r,
 
  /srv/www/ r,
 
  /srv/www/** r,
 
  /srv/www/** r,
  
==Tuning: Schreibzugriffe nur auf spezielle Verzeichnisse erlauben==
+
==Beispiel: Schreibzugriffe auf Upload-Verzeichnis erlauben==
 
 
*Beispiel für Uploads:*
 
 
  /var/www/html/uploads/ rw,
 
  /var/www/html/uploads/ rw,
 
  /var/www/html/uploads/** rw,
 
  /var/www/html/uploads/** rw,
  
==Testen==
+
==Fehlersuche==
 +
*journalctl -xe | grep DENIED
 +
*aa-logprof
 +
*aa-status
  
*AppArmor-Modus anzeigen:*
+
==Hinweis==
aa-status
+
*Das alte Paket libapache2-mod-apparmor wird nicht mehr benötigt und ist auf aktuellen Debian-Systemen überflüssig.
 +
*Die Apache2-Module mpm_prefork oder apparmor müssen nicht extra aktiviert werden.
  
*Fehlermeldungen prüfen:*
+
==Abschluss==
journalctl -xe | grep DENIED
+
*systemctl restart apache2
 
+
*Test der Website und Prüfung, ob alle Funktionen wie erwartet laufen
==Apache neu starten==
 
 
 
*Nach jeder Profiländerung:*
 
systemctl restart apache2
 

Version vom 24. Juni 2025, 10:42 Uhr

Absicherung eines Apache2-Webservers mit AppArmor auf Debian

Ziel

  • Reduzierung der Angriffsfläche durch Zugriffsbeschränkungen auf Dateisystemebene.
  • Der Apache2-Prozess darf nur auf explizit erlaubte Dateien und Verzeichnisse zugreifen.
  • Schutz vor Webshells, ungewolltem Zugriff auf /etc/, /root/, etc.

Voraussetzungen

  • Debian- oder Ubuntu-System mit Apache2
  • root-Zugriff

Installation der AppArmor-Werkzeuge

  • apt-get install apparmor apparmor-utils

Status prüfen

  • systemctl status apparmor
  • aa-status | grep apache2

AppArmor-Profil für Apache2 aktivieren

  • aa-enforce /etc/apparmor.d/usr.sbin.apache2

Profil in Lernmodus setzen (optional)

  • aa-complain /etc/apparmor.d/usr.sbin.apache2
  • systemctl restart apache2

Traffic erzeugen und Log beobachten

  • Im Browser verschiedene Seiten und Funktionen der Website aufrufen
  • journalctl -xe | grep DENIED

Profilvorschläge durchgehen

  • aa-logprof
  • Empfohlene Regeln prüfen und anwenden

Profil in Durchsetzungsmodus setzen

  • aa-enforce /etc/apparmor.d/usr.sbin.apache2
  • systemctl restart apache2

Beispiel: Zugriff auf benutzerdefiniertes Webroot erlauben

  • nano /etc/apparmor.d/usr.sbin.apache2

Folgende Zeilen ergänzen, wenn z. B. /srv/www genutzt wird:

/srv/www/ r,
/srv/www/** r,

Beispiel: Schreibzugriffe auf Upload-Verzeichnis erlauben

/var/www/html/uploads/ rw,
/var/www/html/uploads/** rw,

Fehlersuche

  • journalctl -xe | grep DENIED
  • aa-logprof
  • aa-status

Hinweis

  • Das alte Paket libapache2-mod-apparmor wird nicht mehr benötigt und ist auf aktuellen Debian-Systemen überflüssig.
  • Die Apache2-Module mpm_prefork oder apparmor müssen nicht extra aktiviert werden.

Abschluss

  • systemctl restart apache2
  • Test der Website und Prüfung, ob alle Funktionen wie erwartet laufen