Security! – NinjaFirewall WP

Hallo! Hier ist ein Artikel zum Security für WordPress! – somit zum Plug-in NinjaFirewall. Das Security ist alleweil zur Sicherheit wie Feuerwall der WordPress-Installation sehr gut! NinjaFirewall ist eigentlich kein Plug-in, es sieht und fühlt sich nur so an. Es ist eine eigen­stän­di­ge Web Application Firewall, die jede HTTP- und HTTPS-Anforderung, die an ein PHP-Skript gesendet wird, scannt, ablehnt oder bereinigt, bevor es WordPress und eines seiner Plugins erreicht.  – also echt Security für.

Die Vorlage des Artikels ist von Autor ‘Frank’. Das ist von einer Website, welche so nicht mehr im Web ist. In Nachfrage zum Artikel hat der Autor Frank zugestimmt, diesen Artikel aus den Urgründen des Web wiederzugeben. Ich hoffe so zur Erhaltung von wertvollem Content beizutragen.

Danke an Autor Frank! – so im Heute siehe tekki-tipps.de

Anklicke das Emblem tekki-tipps.de! – das ist Website mit HUGO.

So und nun aber zum Thema NinjaFirewall!

Voranstellend!

Voranstellend! – zum WordPress Security
Es ist ja so mit Shared-Webhosting-Services, dass das Managed des Servers inklusive ist, also auch das zur Sicherheit im Bereich Hosting ist. Darum ist so Fragestellung an den Host wie das so zu verstehen ist.

Fragestellung an Web-Host-Server bplaced
Auf wegerl.at ist das Plug-in NinjaFirewall installiert. Nun die Frage, ob zum WordPress absichern so Plug-ins im Share-Hosting notwendig sind? – da ja hier das bplaced Share-Hosting das Gesamte managet beinhaltet.

Die Antwort
Das Plug-in ist soweit auf einer anderen Ebene, also gar nicht systemnah. Es kann aber sicherlich durch diverse Taktiken zur Abwehr von Bots beitragen, … kann also bleiben.

NinjaFirewall. –
Was kann das Security Plug-in?

WordPress Plug-in:
https://wordpress.org/plugins/ninjafirewall/

Etwas kompliziertere Installation. Umfangreiches Security. Daten werden auf eigenem Webspace gespeichert und nicht irgendwo. Bisher keine Probleme.

Alle Scripte, die sich in den Verzeichnissen und Unterverzeichnissen der WordPress-Installation befinden, werden geschützt. Auch solche, die nicht Teil des Word­Press Pakets sind. Selbst codierte PHP-Skripte, potentielle Backdoors und Shell-Skripte wer­den von NinjaFirewall gefiltert. Das ist cool und macht das zu einer echten Fire­wall. Und wahrscheinlich zu einer der stärksten Sicherheitsanwendung für WordPress.

Aber Sie müssen vorsichtig sein.

  1. Migrieren (auf einen anderen Server umziehen) Sie NICHT Ihre Website mit installierter NinjaFirewall. Stattdessen exportieren Sie die Konfiguration, deinstallieren Sie Ninja­Firewall und migrieren Sie Ihre Website. Nach dem Migrieren installieren Sie Nin­ja­Fire­wall neu und Reimportieren Sie die Konfiguration. Das geht alles über das Dashboard.
  2. Sichern Sie vor der Installation das WordPress Verzeichnis und die WordPress MySQL-Datenbank.

NinTechNet, der Hersteller hält sich nach eigener Aussage strikt an die WordPress Plug-in Developer Guidelines. Die Software NinjaFirewall (WP Edition) ist kos­ten­los, Open Source und voll funktionsfähig, keine “Trialware”, keine “crippleware”. Es ist nicht erforderlich, dass ein Re­gis­trie­rungs­pro­zess oder ein Aktivierungsschlüssel installiert oder verwendet wird. Es werden laut NinTechNet keine Benutzerdaten gesammelt und es wird nicht nach Hause telefoniert.

Eigenschaften von NinjaFirewall

Wenn Sie bei einem Webhoster ganz normalen Webspace Paket gemietet haben, haben Sie aus Sicherheitsgründen keinen Zugriff auf die php.ini von PHP. Die php.ini können Sie per SFTP deshalb auch nicht finden. Mehr dazu weiter unten.

Während der Installation erstellt NinjaFirewall die Datei php.ini mit einem eigenen Eintrag in Ihrem wordpress-Verzeichnis. Diese zusätzliche php.ini Anweisung bewirkt, dass jede An­fra­ge auf Ihrer Website abgefangen und die An­for­de­rungen und der Verkehr mit umfangreichen Regeln (und einer Whitelist) gefiltert werden. Um „gute” Anfragen von bösartigen zu trennen. Die „schlechten” Anfragen werden gelöscht, wäh­rend normale Anfragen an Ihre WordPress Website weitergeleitet werden. Das Ziel ist eine Brandmauer, die verhindert, dass Ihre Web­site gehackt wird.

NinjaFirewall hat eine Reihe von Regeln, nach denen es funktioniert. Diese Regeln sind meist Zeichen oder Signaturen von Angriffen, die sie zu verhindern versucht. Gemäß der Do­ku­men­ta­tion werden die Regeln aus dem WordPress.org-Repository stündlich (konfigurierbar auch abschaltbar) heruntergeladen, um auf weltweit erkannte Bedrohungen zu reagieren. Das Plugin kontaktiert die NinTechNet-Server während des Ak­tu­ali­sie­rungs­vor­gangs nicht.

Die Installation

Sichern Sie vor der Installation bitte Ihr WordPress-Verzeichnis und die WordPress-MySQL-Datenbank. Sollte etwas komplett kaputt gehen, können Sie so wieder auf einen funk­tions­fä­higen Stand zugreifen. Außerdem sollten Sie folgende Dinge vorab mit Ihrem Provider klären:

  • Welcher HTTP-Server und welche PHP Server API verwendet der Provider für Ihre Domain?
  • Welche *.ini wird für das PHP Ihrer Domain verwendet – php.ini, user.ini oder php5.ini?

Wählen Sie im Dashboard den Menüpunkt Plug-ins aus. Klicken Sie danach auf den In­stal­lie­ren-Button und suchen nach NinjaFirewall. Auswählen und installieren. Nach dem installieren und aktivieren des Plugin wird im Admin-Dashboard ein neuer Me­nü­punkt „NinjaFirewall“ angezeigt und es werden verschiedene Auswahlmöglichkeiten für die endgültige Installation abgefragt.

Wenn während Ihrer Installation andere Dinge abgefragt / angezeigt werden, kann das auch an einer neueren Version (neuer als 3.6) oder an einer anderen Server-Umgebung liegen:

NinjaFirewall fragt, ob die Installation im Full WAF mode oder im WordPress WAF mode durchgeführt werden soll.

Full WAF mode

Im Full WAF Modus wird NinjaFirewall jede HTTP und HTTPS Anfrage, die an ein PHP Skript gesendet wird, abfangen, scannen, ablehnen oder sanitisieren, bevor sie WordPress, seine Plugins oder sogar die Datenbank erreicht. Alle Skripte, die sich in den Blog-Installationsverzeichnissen und Unterverzeichnissen befinden, werden geschützt, auch solche, die nicht Teil des WordPress-Pakets sind. – Security.

Selbst verschlüsselte PHP Skripte (z.B. ionCube), potentielle Backdoors und Shell Skripte (z.B. c99, r57) werden von der Firewall gefiltert.

Das macht NinjaFirewall zu einer echten Firewall und gibt Ihnen das höchstmögliche Maß an Schutz: Sicherheit ohne Kompromisse. Um NinjaFirewall im Full WAF Modus zu betreiben, muss Ihr Server die Verwendung der auto_prepend_file PHP Direktive erlauben.

PHP Direktive auto_prepend_file wird benötigt, um den PHP-Interpreter anzuweisen, die Firewall vor WordPress oder einem anderen Skript zu laden. In den meisten Fällen funktioniert dies sofort, oder es sind nur einige kleine Anpassungen erforderlich. Aber in einigen wenigen Fällen, vor allem wegen der Beschränkungen einiger Shared-Hosting-Angebote, kann es einfach überhaupt nicht funktionieren.

WordPress WAF mode

Der WordPress WAF Modus erfordert das Laden von NinjaFirewall über das WordPress wp-config.php Skript. Dieser Prozess macht es einfach zu installieren und die Installation wird immer erfolgreich sein, unabhängig von den Einschränkungen Ihres Hostingplans. NinjaFirewall wird noch vor WordPress, seinen Plugins und der Datenbank geladen und läuft genauso schnell wie der Full WAF Modus.

Der Nachteil dieses Modus ist, dass NinjaFirewall nur HTTP-Anfragen an WordPress abfangen und filtern kann. Einige Funktionen wie File Guard, URL Access Control und Web Filter (nur WP+ Edition) sind eingeschränkt. Obwohl er weniger leistungsfähig ist als der Full WAF Modus, bietet er dennoch ein höheres Schutzniveau und eine höhere Leistung als jedes andere Sicherheitsplugin.
Installation

Wir empfehlen, zunächst die Option Full WAF Mode zu wählen. Sollte dies nicht gelingen, können Sie mit diesem Installationsprogramm problemlos zum WordPress-WAF-Modus wechseln.

Übersetzt mit www.DeepL.com/Translator

 

Plug-in NinjaFirewall und
der Full WAF mode

„Wenn ich den Schutz schon installiere, dann will ich auch so viel Schutz wie möglich.“

Damit NinjaFirewall anstatt WAF-WP-Modus  im vollständigen WAF*-Modus ausgeführt werden kann, muss der Server die Verwendung der PHP-Direktive auto_prepend_file zulassen.

*WAF ist eine Web Application Firewall oder Web Schild, ein Verfahren, das Webanwendungen vor Angriffen über das Hypertext Transfer Protocol (HTTP) schützen soll. S. Web Application Firewall

Betreff Full WAF-Mode Host-Support

Plug-in NinjaFirewall vollständigen WAF-Modus würde die PHP-Direktive auto_prepend_file gebraucht. Meine Frage: Ist das über Webhosting „bplaced pro“ möglich?

Die Antwort

Dem sollte nichts im Wege stehen. Die Regel auto_prepend_file ist in der PHP-Installation standardmässig auf no value gestellt. S. auch phpinfo.bplaced.net.

Du kannst da selbst eine .php.ini Datei erstellen (der Punkt vor dem PHP ist wichtig, denn so wird sie als Systemdatei erkannt). Das mit dem Eintrag:

php_value auto_prepend_file on

… und in das Webseitenverzeichnis – also in den Ordner www – uploaden. Auf dem Webspace sollte nach Minuten die Funktion aktiv sein.

So weit das zum Security auf Wegerl-Array.

NinjaFirewall: Die Konfiguration

Jetzt kommen wir zur Konfiguration. Es gibt diverse Einstellungen.

Firewall Options

Update sind von oben nach unten.

UPDATE
Wegen der DSGVO die Einstellung für IP anonymization auf ON gestellt. Weitere Infos stehen unter Rechtssicherheit weiter unten im Beitrag.

WordPress Plugin NinjaFirewall IP anonymization
Dashboard | NinjaFirewall | Firewall Options

UPDATE
Seit Version 3.6.2 gibt es die angekündigte Option, die Log-Einträge nach einer vor­ge­ge­be­nen Zeit zu löschen. Dadurch kann auf die IP-Anonymisierung verzichtet werden. Option wieder deaktiviert.

Firewall Policies

Standardeinstellungen plus folgende Änderungen.

Basic Policies

Protect against username enumeration: Through the author archives, Through the login page, Through the WordPress REST API

Mit dieser Einstellung, – die wirklich funktioniert, wird der richtige Benutzername geschützt. Bei Eingabe von https://tekki-tipps.de?author=x wird die Startseite angezeigt und nicht der URL-Pfad mit https://tekki-tipps.de/author/benutzername. Der wirkliche, für das Log-in wichtige Benutzername kann dadurch geschützt werden.

Ein sehr gutes Feature. Viele Berichte weisen bei Log-in schützenden Maßnahmen immer darauf hin, dass der Log-in Benutzername kein Schutz ist. Weil über die o. g. Abfrage jeder Benutzername herausgefunden werden kann. Auch das verhindert NinjaFirewall.

File Guard

Enable File Guard: Yes – warten Sie die ersten E-Mails ab. In den E-Mails wird genau angegeben, welche Files auf dem Server verändert wurden. Für diese Pfade können Sie dann ein Exclude einrichten.

File Check

Snapshot erstellen.
Enable scheduled scans: Hourly

Event Notifications

Hier habe ich nichts geändert.

Log-in Protection

Enable brute force attack protection: Yes, if under attack.
XML-RPC API: Apply the protection to the xmlrpc.php script as well.
Signature: Disable the Brute-force protection by NinjaFirewall signature on the protection page.

Eine „brute force” Attacke – siehe dazu auch https://de.wikipedia.org/wiki/Brute-Force-Methode – ist der Versuch, durch automatisierte, tausendfache Eingabe von Benutzername und Passwort das Log-in eines Benutzers festzustellen. WordPress hat standardmäßig kei­nen Schutz, um dies zu verhindern und was genauso schlimm ist, kein Log, in dem solche Versuche dokumentiert werden.

Sie bemerken also überhaupt nicht, dass jemand versucht, in Ihre WordPress-Website einzubrechen.

Auch davor schützt Sie NinjaFirewall. Allerdings müssen Sie dies in den Einstellungen von „Log-in Protection“ zulassen. NinTechnet verwendet dazu die „HTTP-Authentifizierung“ – siehe dazu https://de.wikipedia.org/wiki/HTTP-Authentifizierung. Es wird also ein zusätzliches Log-in vor der eigentlichen Log-in-Seite von WordPress hinzugefügt. Aber keine Angst, die zu­sätz­liche HTTP-Authentification wird nur im “brute force”-Fall abgefragt. So nervt sie im Nor­mal­fall nicht.

Original Hilfetext von NinjaFirewall

NinjaFirewall verarbeitet eingehende HTTP-Anfragen vor Ihrem Blog und seinen Plugins und ist damit das einzige Plugin für WordPress, das in der Lage ist, es vor sehr großen Brute-Force-Angriffen zu schützen, einschließlich verteilter Angriffe von mehreren tausend verschiedenen IPs.

HTTP-Authentifizierung für das WP-Log-in

NinjaFirewall bietet zwei Möglichkeiten der HTTP-Authentifizierung für die WordPress Login Protection an.

  • Always ON, das bedeutet, es wird generell vor der wp-login.php Seite ein weiteres Login im Stil von WordPress geschaltet.
  • Yes, if under attack, wenn die Login Seite angegriffen wird, wird die HTTP-Authentifizierung automatisch davor geschaltet.

Der Benutzername und das Passwort für die HTTP-Authentifizierung wird auf der Kon­fi­gu­ra­tions­seite gespeichert. Das Log kann auch in Server AUTH log geschrieben werden. Dies ist auf gemieteten Webspace nicht möglich und sollte deswegen nicht aktiviert werden. Wenn die Konfiguration auf „Yes, if under attack“ eingestellt wird, werden die „brute force“ Attacken im Firewall log dokumentiert.

NinTechnet vergleicht im folgenden Link NinjaFirewall, WordPress selber und diverse Plug-ins in Bezug auf „brute force“ Attacken: https://blog.nintechnet.com/wordpress-brute-force-attack-detection-plugins-comparison-2015/

Weitere interessante Seiten:

Relevante Einschränkung der Login Protection

Die Login Protection von ähnlichen WordPress Plugins ba­sie­ren darauf, dass immer dieselbe IP-Adresse für die „brute force“ Attacke benutzt wird. Je professioneller die Attacke ist, umso eher wird die IP-Adresse bei jedem Zugriff gewechselt. Ich hoffe, Nintechnet hält, was es ver­spricht und wehrt auch Angriffe mit dauernd wechselnden IP-Adressen ab. Ein möglichst täg­licher Blick in das Log ist aber trotzdem notwendig.

Firewall Log

Auto delete log auf 7 Tage eingestellt.

Rechtssicherheit und Security

Dies ist keine Juristische und keine Rechtsberatung. Dieser Hinweis ist leider nötig. :-/

Update sind von oben nach unten.

UPDATE
Das Speichern von IP-Adressen ist durch die ab Mai 2018 geltenden neuen Da­ten­schutz­be­stim­mungen der DSGVO (EU GDPR) noch problematischer als vorher. Da es noch keine Ge­richts­ur­tei­le gibt, weiß auch niemand so genau, wie hart die Bestimmungen ausgelegt wer­den.

Aber wenn gespeichert wird, dann nur für kurze Zeit. NinjaFirewall bietet zurzeit eine be­grenz­te Speicherung in den Log-Files nicht an. Die IP-Adressen können aber anonymisiert wer­den. In einem Supportbeitrag hat der Hersteller Nintechnet die Bereitschaft signalisiert, die IP-Adresse nach einem Zeitraum zu anonymisieren und wenn das nicht gehen wird, die IP-Adresse zu löschen. So war dann die Einstellung unter ‚Firewall Options‘ erst einmal auf ano­ny­mi­sie­ren zu stellen.

UPDATE
Seit Version 3.6.2 gibt es die angekündigte Option, die Log-Einträge nach einer vor­ge­ge­be­nen Zeitraum zu löschen. Dadurch kann auf die IP-Anonymisierung verzichtet werden. Op­ti­on wieder deaktiviert und unter ‚Logs‘ Zeitraum eingestellt.

Statistik von Hackversuchen, bspw.

Monat Critical High Medium Gesamt
2020-01 30 165  82 277
2020-02 2 41 98 141
2020-03 29 64 58 151
2020-04 0 1 11 12
2020-05 179 60 99 338
2020-06 2 94 61 157

Einarbeitung brauch es zum Know-how.