Business OPNWAF - Fragen / Probleme

Started by sim_on, Today at 11:00:31 AM

Previous topic - Next topic
Today at 11:00:31 AM Last Edit: Today at 11:45:52 AM by sim_on
Hallo zusammen,

bei der Nutzung der OPNWAF Funktion der Business Edition sind mir folgende Sachen aufgefallen, die ich so nicht direkt lösen konnte und auch sonst keine Informationen hierzu finden konnte.
Vielleicht kann mir da ja jemand weiterhelfen oder die Probleme bestätigen. Dann würde ich entsprechende Tickets eröffnen.


1) HTTP/2 Support: Die Webseiten werden nicht über HTTP/2 ausgeliefert. Hierzu konnte ich auch keinen Hinweis finden, ob das gewollt ist.
In der httpd.conf unter /usr/local/etc/apache24 ist folgendes Modul ausgeklammert (Zeile  120):
#LoadModule http2_module libexec/apache24/mod_http2.soWenn das Modul hier aktiviert wird, werden die Seiten über HTTP/2 ausgeliefert, Probleme nach der Aktivierung konnte ich hier keine erkennen.
Die Änderung in dieser Datei ist aber nicht persistent.

Weiß jemand weshalb HTTP/2 per default nicht aktiviert ist?


2) Wenn Domains nicht eingerichtet wurden, wird der default virtual host genutzt (der zuerst angelegte virtual host). Mir erschließt sich der Sinn dahinter nicht ganz.

Das hat folgende Auswirkung:
Bei einem Aufruf einer nicht existierenden Domain kommt eine HTTPS Zertifikatswarnung "net::ERR_CERT_COMMON_NAME_INVALID" weil das Zertifikat von der default-Domain genommen wird. Anschließend wird der Request dann so behandelt, als hätte man direkt die default-Domain aufgerufen.
Meiner Meinung nach sollte der Request ins Leere laufen bzw. abgelehnt werden, weil OPNWAF die Domain oder Subdomain nicht kennt.

Beispiel:
Einstellungen: HTTP nach HTTPS umleiten aktiv
Virtueller Server: abc.example.com -> Redirect nach https://main.example.com

Aufruf von z.B. test.example.com -> Zertifkat von abc.example.com wird angezeigt "net::ERR_CERT_COMMON_NAME_INVALID" und nach Bestätigung wird man nach main.example.com weitergeleitet.

Logs:
[ssl:debug] ssl_engine_kernel.c(2228): [client x.x.x.x:57373] AH02044: No matching SSL virtual host for servername test.example.com found (using default/first virtual host)

abc.example.com:443 x.x.x.x - - "GET / HTTP/1.1" 301 3879 "-"


3) Custom Error Documents, die per GUI hochgeladen wurden, können nicht angezeigt werden.
[core:error] (13)Permission denied: [client x.x.x.x:49609] AH00035: access to /__waf_errors__/403.html denied (filesystem path '/usr/local/opnsense/data/OPNWAF/errors/xxxxxxxxxxxx/403.html') because search permissions are missing on a component of the path

Vielen Dank im Voraus.

(Version 25.10.2)

Today at 11:09:32 AM #1 Last Edit: Today at 11:12:06 AM by Monviech (Cedrik)
1) Das HTTP2 Modul ist aus keinem bestimmten grund deaktiviert, man kann es in der GUI gerne selektierbar machen. Gerne eine Issue hier: https://github.com/opnsense/plugins/issues
2) Das mit dem default virtual host ist ein Problem was ich kenne, da es aber keine Snakeoil Zertifikate in FreeBSD gibt wie in Linux hab ich noch keine Lösung (außer selber so ein wegwerf Zertifikate zu generieren), es ist aber kein Sicherheitsproblem. Man müsste so einen vhost an erster Stelle machen:

SSLStrictSNIVHostCheck On

<VirtualHost *:443>
   ServerName catch-all.invalid
   SSLEngine on
   SSLCertificateFile /usr/local/etc/ssl/snakeoil.crt
   SSLCertificateKeyFile /usr/local/etc/ssl/snakeoil.key
   <Location />
       Require all denied
   </Location>
   ErrorDocument 403 "Invalid hostname"
</VirtualHost>

3) Das die Error Documents nicht funktionieren ist uns noch nicht bekannt, bitte gerne eine Issue aufmachen und wie man es reproduzieren kann:
https://github.com/opnsense/plugins/issues
Hardware:
DEC740

Danke für die schnelle Rückmeldung!

Punkt 2) habe ich dann jetzt einfach wie folgt gelöst:

Zertifikat erstellen:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /usr/local/etc/ssl/catch-all.key \
    -out /usr/local/etc/ssl/catch-all.crt \
    -subj "/CN=catch-all.invalid"

000-default.conf erstellen unter "/usr/local/etc/apache24/Includes":
# Default VirtualHost
SSLStrictSNIVHostCheck On

<VirtualHost *:80>
    ServerName catch-all.invalid
    <Location />
        Require all denied
    </Location>
</VirtualHost>

<VirtualHost *:443>
    ServerName catch-all.invalid
    SSLEngine on
    SSLCertificateFile "/usr/local/etc/ssl/catch-all.crt"
    SSLCertificateKeyFile "/usr/local/etc/ssl/catch-all.key"
    <Location />
        Require all denied
    </Location>
</VirtualHost>