Kategorie: Apache2

  • Die Apache SSL Client Zertifikatsauthentifizierung funktioniert nicht mehr. Fehler: Forbidden You don’t have permission to access this resource.Reason: Cannot perform Post-Handshake Authentication.

    Wenn z.B. nach einem Update auf Debian 10 Buster eine vorher funktionierende Apache SSL Client Certificate Authentication nicht mehr funktioniert und der Fehler

    Forbidden You don’t have permission to access this resource.Reason: Cannot perform Post-Handshake Authentication.

    auftritt, dann liegt es daran, dass es bei TLS1.3 Probleme mit der Authentifizierung mit Client Certificates gibt:

    Als kurzfristige Lösung kann man in der Apache SSL Config die Verwendung von TLS1.3 deaktivieren.
    vim /etc/apache2/mods-available/ssl.conf

    SSLProtocol all -SSLv3 -TLSv1.3

    Nach einem Reload der Apache Config funktioniert die Client Zertifikats Authentifizierung wieder.

  • Anonymisieren von IP-Adressen in einer Apache Log Datei mithilfe von sed

    Ziel: Man möchte die IP-Adressen in einer Apache Logdatei anonymisieren, indem man das letzte Byte oder die zwei letzten Byte der IP-Adresse durch 0 ersetzt.

    Lösungsmöglichkeit: Zeilenweises Durchsuchen der Logdatei mit dem Unix Werkzeug sed. Suchen der IP-Adressen und Ersetzen der Fundstellen mit der anonymiserten IP-Adresse.
    Z. B. soll die IP-Adresse 123.123.123.123 durch die Adresse 123.123.0.0 ersetzt werden.

    Dazu kann man folgenden Einzeiler verwenden:

    sed -i -e 's/\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)/\1\.\2\.0\.0/' access_log_ssl.log

    Hier der Versuch einer Erklärung, ohne zu tief auf die regulären Ausdrücke, die in dem sed-Skript verwendet werden, einzugehen.

    Vereinfacht sieht das sed-Skript wie folgt aus:

    sed -i -e 's/SUCHMUSTER/ERSETZUNG/g' access_log.log

    -e = Parameter der angibt, dass ein sed-Script folgt
    ’s/SUCHMUSTER/ERSETZUNG/g‘ = sed-Skript
    SUCHMUSTER = Muster, nach dem gesucht werden soll
    ERSETZUNG = Text, mit dem das Suchmuster ersetzt werden soll
    access_log.log = Eingabedatei
    -i = Inplace Bearbeitung – die Änderungen werden direkt an der Eingabedatei ausgeführt

    Sollen die Änderungen in einer Kopie gespeichert werden, dann wird sed ohne den -i Parameter benutzt und die Ausgabe in eine neue Datei umgeleitet.

    sed -e 's/SUCHMUSTER/ERSETZUNG/g' access_log.log > bearbeitet.log

    In diesem Fall bleibt die Eingabedatei unverändert und die Änderungen werden in der Datei bearbeitet.log gepeichert.

    Jetzt zu dem konkreten Beispiel:

    Der besseren Lesbarkeit halber wurden die vielen Maskierungen mit dem Zeichen \ entfernt. Diese werden aber in dem eigentlichen sed-Skript benötigt.

    Hier das Suchmuster in unserem sed-Skript:

    ([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})

    [0-9] = Die Zeichen 0-9, also 0123456789 werden an dieser Stelle gesucht
    {1,3} = Die Zeichen [0-9] müssen 1 bis 3 mal auftreten
    ([0-9]{1,3}) = Die Klammern kennzeichnen eine Einheit in dem Suchmuster, auf die anschließend beim Ersetzten zugegriffen werden kann
    ([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}) = Das Muster muss vier Mal, getrennt duch einen Punkt, hintereinander auftreten.

    Damit hat man aber keine hundertprozentige Sicherheit, dass nur gültige IPv4 Adressen von dem Suchmuster gefunden werden. Ungültige Adressen wie z.B. 999.999.999.999 würden duch das Suchmuster auch gefunden.
    Für unseren Anwendungsfall reicht das vereinfachte Suchmuster aber vollkommen aus.

    Jetzt zu dem ersetzen Teil des sed-Skripts. Auch hier sind die Maskierungen durch das Zeichen \ weggelassen.

    \1.\2.0.0

    \1 = Die erste mit Klammern definierte Einheit im Suchmuster
    \2 = Die zweite mit Klammern definierte Einheit im Suchmuster; analog dazu könnte man noch \3 und \4 für die dritte und vierte Einheit im Suchmuster benutzen. \1.\2.\3.\4 würde die ursprüngliche IP unverändert ausgeben.
    0 = Die Ziffer 0

    Der Ersetzen-Teil des sed-Skripts bedeutet also, dass eine gefundene IP-Adresse mit ihren ersten zwei Bytes und mit einer Null als drittes und viertes Byte ersetzt werden sollen.

  • Aktivieren und Deaktivieren von Apache2 Modulen – a2enmod – a2dismod

    Nachdem ich schon etliche Male die Apache Konfigurationsdatei /etc/sysconfig/apache2 bei Suse von Hand bearbeitet hatte, um Apache2 Module zu aktivieren, ist mir letztens ein Befehl oder, besser gesagt, zwei Befehle untergekommen, die das Ganze automatisieren.

    Dies sind a2enmod um Apache Module zu aktivieren

    und

    a2dismod um Apache Module wieder zu deaktivieren.

    Der Syntax ist denkbar einfach:

    a2enmod MODULNAME aktiviert das Apache2 Modul MODULNAME

    a2dismod MODULNAME deaktiviert das Apache2 Modul MODULNAME

    Weiterhin listet der Befehl a2enmod -l alle aktivierten Apache2 Module auf.

    Beispiel:

    a2enmod ssl aktiviert das ssl Modul.

    a2dismod ssl deaktiviert das ssl Modul.

    Nachtrag 06/2011:

    Apache Modulhandling unter Debian 6

    a2enmod -l funktioniert unter Debian nicht. Eine Liste mit den aktivierten Apache modulen erhält man mit:
    ls -l /etc/apache2/mods-enabled/

    Eine Liste mit den zur Verfügung stehenden Modulen erhält man mit:
    ls -l /etc/apache2/mods-available/

    Eine weitere Möglichkeit sich alle geladenen Module anzuzeigen ist der Befehl
    apachectl -M
    (-M  Dump a list of loaded Static and Shared Modules.)

    apachectl -M
    Loaded Modules:
     core_module (static)
     log_config_module (static)
     logio_module (static)
     version_module (static)
     mpm_prefork_module (static)
     http_module (static)
     so_module (static)
     alias_module (shared)
     auth_basic_module (shared)
     authn_file_module (shared)
     ....
    Syntax OK

    Weitere Infos: Apache Modulverwaltung unter Debian