Installation und Einrichtung von ModSecurity 2.5.9 unter Ubuntu 9.04

ModSecurity ist ein Modul für den Apache-Server, welches dazu dient anhand von Regeln eine Webapplikationen zu schützen. Das Modul läuft auf den Apache-Server unter Linux sowie Windows. Unter Windows stehen allerdings nicht alles Funktionen zur Verfügung, wie z.B. drop.

Installation von ModSecurity

Folgende Pake müssen installiert sein: 
 

  • libcurl4-openssl-dev
  • apache2-threaded-dev
  • libxml2-dev 

 
1.) Datei modsecurity-apache_2.5.9.tar.gz entpacken. 
 
2.) In das Verzeichnis modsecurity-apache_2.5.9/apache2 wechseln 
 
3.) Nun folgendermaßen kompilieren: 

./configure
make all
make install

4.) Jetzt eine Datei mit Namen mod-security2.load im Verzeichnis /etc/apache2/mods-available mit folgendem Inhalt anlegen: 

LoadFile /usr/lib/libxml2.so
LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so

5.) Benötigte Module einschalten  
 
a2enmod unique_id
a2enmod mod-security2

6.) Apache-Server neustarten. 

Installation Rules

Damit nun ModSecurity Angriffen erkennen und abwehren kann, müssen sogenannte Rules installiert werden. Diese werden schon im Packet mitgeliefert. Aktuelle Rules können auch jederzeit von der Homepage heruntergeladen werden. 
 
1.) Ein Verzeichnis modsecurity.d im Verzeichnis /etc/apache2/conf.d anlegen. 

2.) Jetzt alle conf-Dateien aus dem Source-Verzeichnis rules in das neu anglegte Verzeichnis modsecurity.d kopieren. Für mehr Sicherheit, können auch die Dateien aus dem Verzeichnis rules/optional_rules zusätzlich kopiert werden.

3.) Nun noch in der apache2.conf am Ende folgenden Eintrag machen: 

Include /etc/apache2/conf.d/modsecurity.d/

4.) Folgende Einträge in der Datei /etc/apache2/conf.d/modsecurity.d/modsecurity_crs_10_config.conf anpassen: 

SecAuditLog /var/log/apache2/modsec_audit.log
SecDebugLog /var/log/apache2/modsec_debug.log

5.) Apache neustarten.

Einrichtung chroot

Die chroot-Umgebung dient dazu, die Webseiten in einem geschützen Umgebung laufen zu lassen. Es ist innerhalb dieser Umgebung nicht möglich, auf Daten des Betriebssystems zugreifen. Es kann nur vom Betriebssystem aus in das chroot Zugriffen werden. Dieses ist wichtig zu wissen für die Anpassung des Apache-Servers und der MySQL-Datenbank.

1.) Als erstes muß eine Regel für ModSecurity erstellt werden. Hierzu sollte eine neue Datei modsecurity_crs_60_chroot.conf angelegt werden. Der Dateiname ist willkürlich gewählt und spielt hierbei keine Rolle. In dieser Datei muß nun folgender Eintrag gemacht werden:

SecChrootDir    /chroot/

2.) Nun ein Verzeichnis /chroot anlegen. In diesem Verzeichnis muß nun eine Umgebung für den Apache abgebildet werden. Hierzu müssen folgende Schritte durchgeführt werden:

/chroot
    +----/var
    |      +----/log
    |      |      +----/apache2
    |      |      |        +----/modsec_audit
    |      +----/run
    |      |      +----/mysqld
    |      +----/www
 

Hinweis: Bei dem Verzeichnis www handelt es sich um das verschobenen Verzeichnis aus dem Verzsichnis /var/www . Damit der Apache in das Verzeichnis /chroot/var/log/apache2/modsec_audit auch reinschreiben darf, sollte dort die Berechtigung dementsprechend angepasst werden.

Apache-Server anpassen

1.) Ins Verzeichnis /var wechseln und hier einen symoblischen Link ins verschobene www-Verzeichnis anlegen:

sudo ln -s /chroot/var/www/ www

2.) Jetzt muß noch das Init-Script folgendermaßen angepasst werden:

Vorher:

start) log_daemon_msg "Starting web server" "apache2" if $APACHE2CTL start; then if check_htcacheclean ; then log_progress_msg htcacheclean start_htcacheclean || log_end_msg 1 fi log_end_msg 0 else log_end_msg 1 fi ;;

Nachher:

start) log_daemon_msg "Starting web server" "apache2" if $APACHE2CTL start; then if check_htcacheclean ; then log_progress_msg htcacheclean start_htcacheclean || log_end_msg 1 fi if [ ! -L /var/run/apache2.pid ]; then ln -s /chroot/var/run/apache2.pid /var/run/apache2.pid fi log_end_msg 0 else log_end_msg 1 fi ;;

Dieser Eintrag ist notwendig, damit es beim neustarten des Apache-Servers Probleme gibt.


3.) Nun kann der Apache-Server neu starten.

MySQL-Datenbank anpassen

1.) Damit die Datenbank auch ohne Probleme in der chroot-Umgebung laufen kann, muß das Socket von der MySQL-Datenbank angepasst werden. Dazu folgenden Eintrag in der /etc/mysql/my.cnf anpassen:

Vorher:

socket          = /var/run/mysqld/mysqld.sock

Nachher:

socket          = /chroot/var/run/mysqld/mysqld.sock

Hinweis: Es gibt mehrere solcher Einträge in der my.cnf. Alle müssen angepasst werden.

2.) Damit nun die MySQL-Datenbank auch das Socket anlegen darf, muß noch das Profil von AppArmor angepasst werden. Dazu die Datei /etc/apparmor.d/usr.sbin.mysqld öffnen und folgenden Eintrag hinzufügen:

/chroot/var/run/mysqld/mysqld.sock w,

Nun den AppArmor-Daemon einmal neustarten bzw. reloaden.

3.) Nun muß noch dafür gesorgt werden, das von außen auf das Socket zugegriffen werden darf. Dazu sollte folgender Eintrag am Anfang der Datei /etc/init.d/mysql gemacht werden:

if [ ! -d /var/run/mysqld ]; then mkdir /var/run/mysqld chown mysql.root /var/run/mysqld chmod -R 777 /var/run/mysqld ln -s /chroot/var/run/mysqld/mysqld.sock /var/run/mysqld/mysqld.sock fi

4.) Nun kann auch die MySQL-Datenbank neu gestartet werden.

Installation der ModSecurity-Console

Folgendes Paket muß installiert sein:

  • sun-java6-jdk

Zuerst muß der mlogc installiert werden, welcher die gesammelte Daten an die ModSecurity-Console weiterleitet.

1.) Im Sourcen-Verzeichnis (modsecurity-apache_2.5.9) in das Verzeichnis apache2/mlogc-src wechseln. 

2.) Hier ein make ausführen, um die Sourcen von mlogc zu kompilieren.

3.) Jetzt das Binary mlogc nach /usr/local/bin/ und die mlogc-default.conf nach /etc/mlogc.conf kopieren. 

4.) In der "/etc/mlogc.conf“ jetzt folgende Zeilen anpassen:

    CollectorRoot       "/var/log/apache2"
 
    ConsoleURI          "https://<IP-ADRESSE>:8888/rpc/auditLogReceiver"
 
    SensorUsername      "SENSOR"
    SensorPassword      "SENSOR"

5.) Jetzt nun in der Datei modsecurity_crs_10_config.conf folgenden Eintrag anpassen:

Vorher:

SecAuditLogType Serial
SecAuditLog /var/log/apache2/modsec_audit.log
# SecAuditLogStorageDir logs/modsec_audit

Nachher:

SecAuditLogType Concurrent
SecAuditLog "|/usr/local/bin/mlogc /etc/mlogc.conf"
SecAuditLogStorageDir /var/log/apache2/modsec_audit

6.) Nun muß noch ein symbolischer Link angelegt werden:

sudo ln -s /chroot/var/log/apache2/modsec_audit/ /var/log/apache2/modsec_audit

Installation der ModSecurity-Console

Die ModSecurity-Console kann man sich kostenlos herunterladen. Dazu muß man sich nur einmal registrieren. Dies ist wichtig, da man hier ein Lizenz-Key bekommt, der zum Betrieb der Konsole benötigt wird. 

1.) Das entpackte Verzeichnis modsecurity-console nach /opt kopieren.

2.) In das Verzeichnis wechseln und hier die Console mit dem Befehl:

modsecurity-console start

starten.

3.) Nun kann die Console mit

https://<IP-ADRESSE>:8888

aufgerufen werden. Mit dem Benutzernamen admin und dem Passwort admin kann man sich an die Console anmelden.

Als erstes sollte das Passwort geändert werden. Danach den Lizenz-Key installieren. Nun muß als nächstes ein Sensor angelegt werden. Dazu auf

Sensor->Add Sensor

auswählen. Hier muß nur der Benutzername und Passwort angegeben werden, welches vorher in der /etc/mlogc angelegt wurde.

Screenshots von der ModSecurity-Console

ModSecurity-Console - Home ModSecurity-Console - Alerts
ModSecurity-Console - Senoren ModSecurity-Console - Transaction