Dokumentation / Monitoring und Sicherheit
Sicherheitsprüfungen
Der vollständige Katalog der automatischen Sicherheitsprüfungen, die calmo.cloud für jeden Odoo-Dienst ausführt, mit den Punkten, die jede einzelne abzieht.
calmo.cloud führt die folgenden Prüfungen für jeden laufenden Live- und Test-Odoo-Dienst aus. Jede Prüfung ist eine Black-Box-Abfrage des Plattform-Hostname des Dienstes, bei den Port-Prüfungen der Adresse seines Servers. In deinem Odoo wird nichts installiert. Wie sich die Punkte zu einer Note summieren, steht in der Security-Übersicht.
Der kostenlose Odoo Security Check führt denselben Katalog aus, mit einem Unterschied: Er testet den Brute-Force-Schutz beim Login, statt auf Fail2ban zu prüfen.
Critical #
Jede kritische Prüfung zieht 40 Punkte ab, außer dem Standard-Admin-Passwort, das alle 100 abzieht.
Standard-Admin-Passwort geändert (−100) #
Versucht, sich als admin mit dem Passwort admin anzumelden. Gelingt der Login, kann jeder im Internet die Datenbank übernehmen. Die Prüfung braucht den Datenbanknamen. Ist er unbekannt, lautet das Ergebnis Not confirmed und es werden keine Punkte abgezogen.
Lösung: Melde dich in Odoo an und ändere das Passwort des Admin-Benutzers auf einen starken, einmaligen Wert.
Fail2ban-Schutz aktiv (−40) #
Prüft, ob Fail2ban auf dem Server des Dienstes aktiviert ist und läuft. Ohne Fail2ban hindert nichts einen Angreifer daran, SSH- und Odoo-Passwörter zu erraten. Diese Prüfung läuft nur im Panel.
Lösung: Aktiviere Fail2ban im Tab Fail2ban des Servers. Siehe Fail2ban.
TLS-Zertifikat (−40) #
Prüft auf TLS 1.2 oder neuer mit einem gültigen Zertifikat für den Hostname. Die Prüfung schlägt fehl, wenn das Zertifikat ungültig ist, innerhalb von 14 Tagen abläuft oder einen schwachen Schlüssel verwendet (RSA unter 2048 Bit, EC unter 256 Bit). Check details zeigt eine Note von A bis D für das Zertifikat selbst.
Lösung: Prüfe, ob der Hostname auf den Server zeigt, damit sich das Zertifikat erneuern kann. Siehe Domain hinzufügen.
HTTPS erzwungen (−40) #
Sendet eine einfache HTTP-Anfrage an die Login-Seite. Sie muss auf HTTPS desselben Hosts umleiten oder abgelehnt werden. Sonst können Zugangsdaten und Session-Cookies abgefangen werden.
Lösung: Prüfe, ob der Proxy des Servers in Ordnung ist und der Dienst ein gültiges Zertifikat hat.
Veraltete TLS-Protokolle abgelehnt (−40) #
TLS 1.0 und 1.1 müssen abgelehnt werden. Diese Prüfung läuft erst, wenn die Zertifikatsprüfung bestanden ist.
Veraltete TLS-Cipher abgelehnt (−40) #
Eine Stichprobe defekter Cipher Suites (Null, anonym, Export, RC4, DES und 3DES) muss abgelehnt werden.
Datenbank-Manager nicht erreichbar (−40) #
Ruft /web/database/manager und /web/database/selector auf. Beide müssen abgelehnt werden. Der Datenbank-Manager kann hinter dem Master-Passwort Datenbanken anlegen, löschen und sichern, und der Selector gibt die Liste der Datenbanken auf dem Host heraus. Odoo steuert beide über dieselbe Einstellung list_db, deshalb zählen sie als eine Prüfung.
Lösung: Setze list_db = False und ein starkes admin_passwd in der Odoo-Konfiguration und deploye den Dienst neu. Auf calmo.cloud sperrt der Proxy beide Seiten.
Datenbankliste per RPC deaktiviert (−40) #
Ruft den JSON-RPC-Endpunkt /web/database/list auf. Auch wenn die Selector-Seite gesperrt ist, kann der Endpunkt noch Datenbanknamen preisgeben.
Lösung: Konfiguriere dbfilter und setze list_db = False.
Privater Anhang geschützt (−40) #
Ruft einen Beispielanhang (/web/content/10) ohne Login ab. Ist der Anhang ohnehin öffentlich, wird die Prüfung übersprungen statt als fehlgeschlagen gewertet, denn ein öffentlicher Anhang ist kein Leck.
PostgreSQL-Port geschützt (−40) #
Prüft, ob PostgreSQL auf Port 5432 aus dem Internet antwortet. Es wird nur eine TLS-Handshake-Anfrage gesendet. Ein Login wird nicht versucht.
Direkter Odoo-Port geschützt (−40) #
Odoo darf nicht direkt auf Port 8069 antworten und damit den Proxy und seine Schutzmaßnahmen umgehen.
Traefik-Dashboard geschützt (−40) #
Das Dashboard des Proxys darf auf Port 8080 nicht antworten.
Docker-API geschützt (−40) #
Die unverschlüsselte Docker-API darf auf Port 2375 nicht antworten. Wer sie erreicht, kontrolliert den Server.
Warning #
Odoo-Version im Standard-Support (−6) #
Liest die Odoo-Version aus und prüft, ob Odoo sie noch unterstützt. Jede Version wird drei Jahre lang unterstützt: 18.0 bis Oktober 2027, 19.0 bis Oktober 2028 und 20.0 bis Oktober 2029. 17.0 und älter sind aus dem Standard-Support gefallen. Eine Version, die sich nicht auslesen lässt, ist Not confirmed.
Lösung: Aktualisiere auf eine unterstützte Version. Probiere das Upgrade zuerst auf einer Kopie aus.
Brute-Force-Schutz beim Login (−6) #
Nur im öffentlichen Check. Sendet bis zu 50 fehlgeschlagene Logins mit einem zufälligen Testkonto, einen pro Sekunde, und besteht, sobald das Odoo sie zu blockieren beginnt. Die Prüfung schlägt nur fehl, wenn alle 50 ohne Sperre abgelehnt werden. Diese Versuche können in deinen Logs auftauchen. Odoos auf calmo.cloud-Servern mit Fail2ban bestehen ohne den Test. Im Panel ersetzt sie die Fail2ban-Prüfung oben.
HSTS-Header vorhanden (−3) #
Die Login-Seite muss einen Strict-Transport-Security-Header mit einem max-age von mindestens sechs Monaten (15552000 Sekunden) senden. HSTS weist Browser an, für deine Domain immer HTTPS zu verwenden.
Clickjacking-Schutz (−2) #
Die Login-Seite muss X-Frame-Options: DENY oder SAMEORIGIN senden oder eine restriktive frame-ancestors-Direktive in ihrer Content-Security-Policy. Ohne eines davon lässt sich die Login-Seite in eine bösartige Seite einbetten.
Session-Cookie vor Skripten geschützt (−2) #
Jedes session_id-Cookie muss als HttpOnly markiert sein, damit in eine Seite eingeschleuste Skripte es nicht lesen können.
Cross-Origin-Zugriff auf den Login eingeschränkt (−2) #
Die Login-Seite darf nicht jeder Website erlauben, Anfragen mit Zugangsdaten an sie zu senden. Das wäre der Fall, wenn sie jeden Origin zusammen mit Access-Control-Allow-Credentials: true zurückspiegelt.
Website-Infos nicht offengelegt (−1) #
Ruft /website/info auf, das bei manchen Versionen die genaue Odoo-Version und die installierten Module zeigt. Der Aufruf muss abgelehnt werden. Auf calmo.cloud sperrt der Proxy ihn.
Server-Header verrät keine Version (−1) #
Die Header Server und X-Powered-By dürfen nicht die Software hinter der Seite (Werkzeug, Odoo, Python, PHP, ASP.NET) oder eine Versionsnummer nennen. Sie zu verbergen verhindert keinen Angriff, bremst aber automatische Scanner.
Schutz vor MIME-Sniffing (−1) #
Die Login-Seite muss X-Content-Type-Options: nosniff senden.
Referrer-Policy (−1) #
Die Login-Seite muss eine Referrer-Policy senden, die verhindert, dass vollständige URLs an andere Seiten gelangen, zum Beispiel strict-origin-when-cross-origin.
Interne Fehler verborgen (−1) #
Die Login-Seite und eine nicht vorhandene Seite dürfen keinen Python-Traceback und keinen Datenbankfehler zeigen.
Login-Ressourcen über HTTPS (−1) #
Die Login-Seite darf keine Skripte, Stile oder Bilder über einfaches HTTP laden.
Direkter Websocket-Port geschützt (−1) #
Der Websocket-Port 8072 von Odoo darf aus dem Internet nicht antworten.
Info #
Login-Seite erreichbar #
Bestätigt, dass /web/login antwortet und wie Odoo aussieht. Die Prüfung zieht keine Punkte ab, aber keine andere Prüfung ist aussagekräftig, bevor sie bestanden ist: Ist die Login-Seite nicht erreichbar, bekommt der Dienst keine Note.
Übersprungene und unbestätigte Prüfungen #
Eine Prüfung wird übersprungen, wenn sie nicht zutrifft, und ist nicht bestätigt, wenn sie sich nicht verifizieren ließ, zum Beispiel die Prüfung des Standardpassworts ohne Datenbanknamen. Beides zieht keine Punkte ab, aber die Bewertung wird als unvollständig markiert. Der öffentliche Check überspringt die fünf Port-Prüfungen, wenn das Odoo hinter einem CDN liegt, weil dann nur das CDN antworten würde.