So installierst du Apache mit ModSecurity unter Ubuntu 22.04
ModSecurity ist ein kostenloses und quelloffenes Firewall-Tool, das von verschiedenen Webservern wie Apache, Nginx und IIS unterstützt wird. Es handelt sich um eine signaturbasierte Firewall, die verschiedene Arten von Angriffen blockieren kann, darunter Cross-Site-Scripting (XSS), Brute-Force-Angriffe und bekannte Code-Injection-Angriffe. Sie bietet verschiedene Regelsätze, mit denen du die Sicherheit deines Servers anpassen und konfigurieren kannst. Außerdem kann es den Webverkehr in Echtzeit überwachen und dir helfen, Angriffe zu erkennen und darauf zu reagieren.
In diesem Tutorial erkläre ich dir, wie du ModSecurity mit Apache unter Ubuntu 22.04 einrichtest.
Voraussetzungen
- Ein Server, auf dem Ubuntu 22.04 läuft.
- Ein Root-Passwort ist auf deinem Server eingerichtet.
Apache Webserver installieren
Bevor du beginnst, musst du die neueste Version des Apache-Webserver-Pakets auf deinem Server installieren. Installiere zunächst alle erforderlichen Abhängigkeiten mit dem folgenden Befehl:
apt install gnupg2 software-properties-common curl wget git unzip -y
Sobald alle Abhängigkeiten installiert sind, fügst du das Apache-Repository mit dem folgenden Befehl hinzu:
add-apt-repository ppa:ondrej/apache2 -y
Als Nächstes aktualisierst du den Repository-Cache und installierst das Apache-Paket mit dem folgenden Befehl:
apt update -y apt install apache2 -y
Sobald der Apache installiert ist, kannst du mit dem nächsten Schritt fortfahren.
ModSecurity installieren
Als Nächstes führst du den folgenden Befehl aus, um das Apache-Modul ModSecurity zu installieren:
apt install libapache2-mod-security2 -y
Sobald das Paket installiert ist, aktivierst du das ModSecurity-Modul mit dem folgenden Befehl:
a2enmod security2
Starte anschließend den Apache-Dienst neu, um die Änderungen zu übernehmen:
systemctl restart apache2
Du kannst den Apache-Status auch mit folgendem Befehl überprüfen:
systemctl status apache2
Du erhältst die folgende Ausgabe:
? apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-10-18 10:49:42 UTC; 4s ago Docs: https://httpd.apache.org/docs/2.4/ Process: 74445 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS) Main PID: 74449 (apache2) Tasks: 55 (limit: 2242) Memory: 29.7M CPU: 229ms CGroup: /system.slice/apache2.service ??74449 /usr/sbin/apache2 -k start ??74450 /usr/sbin/apache2 -k start ??74451 /usr/sbin/apache2 -k start Oct 18 10:49:42 ubuntu2204 systemd[1]: Starting The Apache HTTP Server...
ModSecurity konfigurieren
Als Nächstes bearbeitest du die ModSecurity-Konfigurationsdatei:
nano /etc/apache2/mods-enabled/security2.conf
Entferne das Kommentarzeichen in der folgenden Zeile:
IncludeOptional /etc/modsecurity/*.conf
Speichere und schließe die Datei und benenne die ModSecurity-Konfigurationsdatei um:
mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Als Nächstes bearbeitest du die ModSecurity-Konfigurationsdatei:
nano /etc/modsecurity/modsecurity.conf
Ändere die folgenden Zeilen:
SecRuleEngine On SecAuditLogParts ABCEFHJKZ
Speichere und schließe die Datei und starte den Apache-Dienst neu, um die Änderungen zu übernehmen:
systemctl restart apache2
Installiere das OWASP Core Rule Set
Um deine Webanwendung vor bösartigen Angriffen zu schützen, musst du das OWASP Core Rule Set herunterladen und auf deinem Server installieren.
Lade zunächst das neueste Regelset mit dem folgenden Befehl herunter:
wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz
Sobald der Download abgeschlossen ist, entpackst du die heruntergeladene Datei mit dem folgenden Befehl:
tar xvf v3.3.0.tar.gz
Als Nächstes erstellst du ein Verzeichnis für die Regeln und verschiebst die entpackten Regeln in dieses Verzeichnis:
mkdir /etc/apache2/modsecurity-crs/ mv coreruleset-3.3.0/ /etc/apache2/modsecurity-crs
Navigiere dann zu deinem OWASP-Regelverzeichnis und benenne die Konfigurationsdatei um:
cd /etc/apache2/modsecurity-crs/coreruleset-3.3.0/ mv crs-setup.conf.example crs-setup.conf
Als Nächstes bearbeitest du die ModSecurity-Konfigurationsdatei und legst den Pfad für deine OWASP-Regelsätze fest:
nano /etc/apache2/mods-enabled/security2.conf
Füge die folgenden Zeilen hinzu:
IncludeOptional /etc/apache2/modsecurity-crs/coreruleset-3.3.0/crs-setup.conf IncludeOptional /etc/apache2/modsecurity-crs/coreruleset-3.3.0/rules/*.conf
Speichere und schließe die Datei und überprüfe den Apache mit folgendem Befehl auf Syntaxfehler:
apache2ctl -t
Wenn alles in Ordnung ist, erhältst du die folgende Ausgabe:
Syntax OK
Starte abschließend den Apache-Dienst neu, um die Konfiguration zu übernehmen:
systemctl restart apache2
Verifiziere ModSecurity
Jetzt ist der Apache Webserver mit ModSecurity konfiguriert. Jetzt ist es an der Zeit, zu testen, ob es funktioniert oder nicht.
Öffne deine Befehlszeilenschnittstelle und führe den folgenden Befehl aus:
curl http://localhost/index.html?exec=/bin/bash
Du solltest die Fehlermeldung 403 Forbidden erhalten:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access this resource.</p> <hr> <address>Apache/2.4.52 (Ubuntu) Server at localhost Port 80</address> </body></html>
Du kannst die ModSecurity auch mit folgendem Befehl testen:
curl localhost?doc=/bin/ls
Du erhältst die folgende Ausgabe:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access this resource.</p> <hr> <address>Apache/2.4.52 (Ubuntu) Server at localhost Port 80</address> </body></html>
Du kannst auch das ModSecurity-Protokoll für weitere Informationen überprüfen:
tail /var/log/apache2/modsec_audit.log
Du erhältst die folgende Ausgabe:
SecRule "TX:INBOUND_ANOMALY_SCORE" "@ge %{tx.inbound_anomaly_score_threshold}" "phase:5,id:980130,pass,t:none,log,noauditlog,msg:'Inbound Anomaly Score Exceeded (Total Inbound Score: %{TX.INBOUND_ANOMALY_SCORE} - SQLI=%{tx.sql_injection_score},XSS=%{tx.xss_score},RFI=%{tx.rfi_score},LFI=%{tx.lfi_score},RCE=%{tx.rce_score},PHPI=%{tx.php_injection_score},HTTP=%{tx.http_violation_score},SESS=%{tx.session_fixation_score}): individual paranoia level scores: %{TX.ANOMALY_SCORE_PL1}, %{TX.ANOMALY_SCORE_PL2}, %{TX.ANOMALY_SCORE_PL3}, %{TX.ANOMALY_SCORE_PL4}',tag:event-correlation,ver:OWASP_CRS/3.3.0" SecAction "phase:5,id:980145,pass,t:none,nolog,noauditlog,ver:OWASP_CRS/3.3.0,setvar:tx.executing_anomaly_score=%{tx.outbound_anomaly_score_pl1},setvar:tx.executing_anomaly_score=+%{tx.outbound_anomaly_score_pl2},setvar:tx.executing_anomaly_score=+%{tx.outbound_anomaly_score_pl3},setvar:tx.executing_anomaly_score=+%{tx.outbound_anomaly_score_pl4}" SecRule "TX:OUTBOUND_ANOMALY_SCORE" "@lt %{tx.outbound_anomaly_score_threshold}" "phase:5,id:980150,pass,t:none,log,noauditlog,msg:'Outbound Anomaly Score (Total Outbound Score: %{TX.OUTBOUND_ANOMALY_SCORE}): individual paranoia level scores: %{TX.OUTBOUND_ANOMALY_SCORE_PL1}, %{TX.OUTBOUND_ANOMALY_SCORE_PL2}, %{TX.OUTBOUND_ANOMALY_SCORE_PL3}, %{TX.OUTBOUND_ANOMALY_SCORE_PL4}',tag:event-correlation,ver:OWASP_CRS/3.3.0,chain" #SecRule "TX:MONITOR_ANOMALY_SCORE" "@gt 1" --c2d93508-Z--
Logrotate konfigurieren
Wenn du ModSecurity auf einer stark frequentierten Website verwendest. Das Audit-Protokoll von ModSecurity kann sehr schnell zu groß werden. In diesem Fall kannst du die Logrotation für das ModSecurity-Auditprotokoll konfigurieren. Du kannst dies mit dem folgenden Befehl konfigurieren:
nano /etc/logrotate.d/modsec
Füge die folgenden Zeilen ein:
/var/log/apache2/modsec_audit.log { rotate 31 daily missingok compress delaycompress notifempty }
Speichere und schließe die Datei, wenn du fertig bist. Die obige Konfigurationsdatei rotiert die Protokolldatei jeden Tag und komprimiert sie.
Fazit
In diesem Beitrag haben wir erklärt, wie du ModSecurity mit Apache unter Ubuntu 22.04 einrichtest. Außerdem haben wir das OWASP-Regelwerk heruntergeladen und mit ModSecurity konfiguriert. Deine Website ist nicht vollständig vor verschiedenen Arten von Angriffen geschützt. Wenn du noch Fragen hast, kannst du mich gerne fragen.