WordPress Plugin – NinjaFirewall

WordPress Plugin NinjaFirewall

Was kann das Plugin?

NinjaFirewall ist eigentlich kein Plugin, 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. 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 NinjaFirewall zu einer echten Fire­wall. Und wahrscheinlich zu einer der stärksten Sicherheits-Anwendung 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 von NinjaFirewall, hält sich nach eigener Aussage strikt an die WordPress Plugin 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.

Weitere Eigenschaften des WordPress Plugin NinjaFirewall

Wenn Sie bei einem Webhoster ein ganz normales 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 von NinjaFirewall 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.

wordpress.org: Plugin NinjaFirewall
nintechnet.com: Troubleshoot Ninja Firewall installation problems

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 Plugins 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 NinjaFirewall (WP-Edition) 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.

Eine Erklärung wird mitgeliefert – hier der Originaltext

Full WAF mode

In Full WAF mode, NinjaFirewall will hook, scan, reject or sanitise any HTTP and HTTPS request sent to a PHP script before it reaches WordPress, its plugins or even the database. All scripts located inside the blog installation directories and sub-directories will be protected, including those that aren’t part of the WordPress package. Even encoded PHP scripts (e.g., ionCube), potential backdoors and shell scripts (e.g., c99, r57) will be filtered by NinjaFirewall.

That makes it a true firewall and gives you the highest possible level of protection: security without compromise. To run NinjaFirewall in Full WAF mode, your server must allow the use of the auto_prepend_file PHP directive. It is required to instruct the PHP interpreter to load the firewall before WordPress or any other script. Most of the time it works right out of the box, or may require some very little tweaks. But in a few cases, mostly because of some shared hosting plans restrictions, it may simply not work at all.

WordPress WAF mode

The WordPress WAF mode requires to load NinjaFirewall via the WordPress wp-config.php script. This process makes it easy to setup and the installation will always be successful, regardless of your hosting plan restrictions. NinjaFirewall will still load before WordPress, its plugins and the database and will run as fast as the Full WAF mode.

However, the downside of this mode is that NinjaFirewall will be able to hook and filter HTTP requests sent to WordPress only. A few features such as File Guard, the URL Access Control and Web Filter (WP+ Edition only) will be limited. Despite being less powerful than the Full WAF mode, it still offers a level of protection and performance higher than any other security plugin.
Installation

We recommend to select the Full WAF mode option first. If it fails, this installer will let you switch to the WordPress WAF mode easily.

Ich habe Full WAF mode ausgewählt

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

System configuration

Select your HTTP server and your PHP server API ( SAPI ):

  • Apache – PHP7 Modul
  • Apache + CGI/FastCGI (recommended)
  • Apache + suPHP
  • Nginx + CGI or PHP-FPM
  • Lightspeed
  • Other Webserver + CGI/FastCGI
  • Other Webserver + HHVM

Select the PHP initialization file supported by your server:

  • php.ini – Used by most shared hosting accounts
  • user.ini – Used by most dedicated / VPS servers, as well as shared hosting accounts that do not support php.ini
  • php5.ini – A few shared hosting accounts …

Checking if WordPress root directory is writable: Yes
The /www/********/php.ini file must be created, and the following lines of code added to it:
; BEGIN NinjaFirewall
auto_prepend_file = /www/********/wp-content/nfwlog/ninjafirewall.php
; END NinjaFirewall

Please click the button below to test if the firewall integration was successful.
Test Firewall – Button gedrückt

Error: the firewall is not loaded


Warum kann es nicht einfach funktionieren. Die Pfadangaben weiter oben habe ich hier aus Sicherheitsgründen für die Anzeige mit * gekürzt. Eine einfache Möglichkeit wäre jetzt den Button “Switch to the WordPress WAF mode installer” zu drücken, aber der einfache Weg ist nicht immer der sicherste Weg.

Ein Auszug aus der Troubleshoot-Seite von Nintechnet.com:

Failed installation
This is the most common problem experienced by some users. At the end of the installation process, it displays the Error: the firewall is not loaded message.
You need to inform PHP to load NinjaFirewall before any other PHP scripts. This is done by adding the auto_prepend_file directive to your PHP user configuration file, usually named php.ini or .user.ini if you are running PHP as CGI/FCGI (see also PHP: The configuration file), or via a .htaccess` file if you are running Apache with PHP as a module. As long as you do not provide the installer with the correct instructions, PHP will fail to load the firewall and the installer will keep displaying this error message.

Keine Angst

Den Browser mit dem angemeldeten Administrator lassen Sie auf jeden Fall offen. Nicht abmelden. In einem anderen Browser rufen Sie dann Ihre Website auf – läuft immer noch – die NinjaFirewall wird einfach nicht richtig aufgerufen und deshalb verändert sich zu diesem Zeitpunkt auch nichts. Und kaputt ist auch nichts, wenn Sie nicht die Nerven für eine weitere Fehlersuche haben, können Sie das Plugin jetzt löschen.

Wenn Sie weitermachen, kommt es darauf an, dass Sie ein gutes Support-Team bei Ihrem Provider zur Verfügung haben. Meinen Provider ALL-INKL.COM * kann ich nur empfehlen. Die kannten bis zu diesem Zeitpunkt das Plugin zwar auch noch nicht und mussten selber etwas rumprobieren, aber es hat letztendlich funktioniert. Damit Sie eine Anleitung haben, wie Sie in so einem Fall vorgehen, beschreibe ich jetzt meinen Fall:

Als erstes habe ich per SFTP nachgeschaut ob das Plugin, wie oben beschrieben, eine php.ini im WordPress Verzeichnis erstellt hat. Hatte es, mit dem o.g. Inhalt. Dann habe ich vermutet, dass ALL-INKL.COM * auto_prepend_file verbietet und es deshalb nicht funk­tio­niert. Also habe ich per Support E-Mail genau aufgeschrieben was ich installiert habe und was das Plugin gemacht hat. 5 Minuten später hatte ich die Antwort vom Support.

Ja, auto_prepend_file wird standardmäßig auf no value gesetzt, was wahrscheinlich den Fehler auslöst. Ich sollte den folgenden Befehl in die .htaccess von WordPress einfügen: php_value auto_prepend_file on

Eventuell müssen Sie die Anzeige von „versteckten Dateien“ in Ihrem SFTP-Programm zu­las­sen, damit Sie die .htaccess im WordPress Hauptverzeichnis sehen können. Datei down­loa­den, mit einem ASCII-Editor, in meinem Fall TextEdit von macOS, öffnen und oberhalb von dem Kommentar # BEGIN WordPress den oben genannten Befehl eingeben. Spei­chern und hochladen. Die Website in einem Browser aufrufen.

Crash ..

Im Browser wurde nur folgendes auf einer weißen Seite angezeigt:
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
Fatal error: Unknown: Failed opening required ‘on’ (include_path=’.:/usr/share/php:..’) in Unknown on line 0

Damit ich andere Fehler ausschließen konnte, habe ich den Eintrag in der .htaccess aus­kom­men­tiert und neu hochgeladen. Das Ergebnis – die Website war wieder fehlerfrei da.

Wieder eine Support E-Mail mit den o.g. Fehlermeldungen verschickt. Diesmal hat es ca. 15 Minuten gedauert und jemand anderes hat geantwortet. Mir wurden 3 mögliche Einträge für die .htaccess genannt. Ich sollte sie nacheinander austesten und wieder bescheid sagen. Bei der 2. Möglichkeit hat alles funktioniert. Der richtige Eintrag in der .htaccess lautet:

php_value auto_prepend_file /www/***********/wp-content/nfwlog/ninjafirewall.php

Congratulations, NinjaFirewall is up and running!

Im Browser hatte ich immer noch den Admin im Dashboard angemeldet, abmelden und neu anmelden – alles OK!

Konfiguration

Jetzt kommen wir zur Konfiguration. Es gibt diverse Einstellungen:

Firewall Options

[UPDATE vom 30.03.2018]
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]

[UPDATE vom 12.04.2018]
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.
[/UPDATE]

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 Login wichtige Benutzername kann dadurch geschützt werden.

Ein sehr gutes Feature. Viele Berichte weisen bei Login schützenden Maßnahmen immer darauf hin, dass der Login 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.

Login 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 Login 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 „Login Protection“ zulassen. NinTechnet verwendet dazu die „HTTP-Authentifizierung“ – siehe dazu https://de.wikipedia.org/wiki/HTTP-Authentifizierung. Es wird also ein zusätzliches Login vor der eigentlichen Login-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:

By processing incoming HTTP requests before your blog and any of its plugins, NinjaFirewall is the only plugin for WordPress able to protect it against very large brute-force attacks, including distributed attacks coming from several thousands of different IPs.

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 das 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 Plugins in Bezug auf „brute force“ Attacken: https://blog.nintechnet.com/wordpress-brute-force-attack-detection-plugins-comparison-2015/

Weitere interessante Seiten:
https://blog.nintechnet.com/brute-force-attack-protection-in-a-production-environment/
https://nintechnet.com/ninjafirewall/wp-edition/help/

Sicherheitsrelevante 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, um so 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

Ich bin kein Jurist und dies ist keine Rechtsberatung. Dieser Hinweis ist leider nötig. :-/

[UPDATE vom 30.03.2018]
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 Support Beitrag 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. Abwarten was da kommt. Habe die Einstellung erst einmal auf ano­ny­mi­sie­ren gestellt.
[/UPDATE]

[UPDATE vom 12.04.2018]
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 Zeitraum eingestellt.
[/UPDATE]

Fazit

Dieses Plugin habe ich auf einer anderen Website vor einem Jahr installiert, d.h. ein Jahr Erfahrung. Insgesamt wurden 2017 von NinjaFirewall 896 mit Medium, 10 mit High und 504 mit Critical bewertete Hackversuche abgewehrt. Die alte Website ist wie die Neue eine ein­fache Hobby-Website mit sehr wenig Besuchern.

Plugin Beurteilung am 26.12.2017
rating-5-stars
ab 3.6
ab Version 4.9.1
20.000+
Wenn bei mir nach einem Plugin-Update Fehler auftreten, werde ich diese hier mit Versionsnummer beschreiben.
Etwas kompliziertere Installation. Umfangreicher Schutz. Daten werden auf eigenem Webspace gespeichert und nicht irgendwo. Bisher keine Probleme.

 

Kontrolle des SEO Fokus-Keyword: NinjaFirewall

Das Fokus-Keyword dieser Seite ist NinjaFirewall, zusammen mit den mehrfach vor­han­de­nen Wörtern wordpress plugin wird daraus folgende SEO-Kontroll-Suche:

Google Kontrollsuche

In dem Beitrag WordPress Plugin – Yoast SEO beschreibe ich die Kontroll- und Op­ti­mie­rungs­mög­lich­kei­ten von dem auch für diesen Beitrag benutzten SEO Plugin. Dieser Beitrag wird vom Yoast Seo Plugin mit Lesbarkeit = “Muss verbessert werden” und SEO = “Gut” bewertet.

Wie bewerten Sie diesen Beitrag?

Eine schnelle Klick-Bewertung - möglichst mit 5 Sternen - wäre nett. Ein Kommentar mit Ihren Erfahrungen zu diesem Thema würde mich noch mehr freuen. Beides zusammen ...

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (5 Bewertung(en), durchschnittlich: 5,00 von 5 Sternen)
Loading...

3 Kommentare

  1. Vielen Dank für die Super Anleitung! Wegen der DSGVO bin ich gerade von Wordfence auf NinjaFirewall umgestiegen, im Juli 2018 klappt das bei All-Inkl auf Anhieb ohne manuelles .htaccess editieren.

  2. Hallo! – zur Installation Full WAF mode

    Meiner Nachfrage am Host “bplaced” und Erfolg:
    Eine ” .php.ini ” Datei (der Punkt vor dem PHP ist wichtig, damit sie als Systemdatei erkannt wird) erstellen, mit folgendem Eintrag: ” php_value auto_prepend_file on ” und in das Webseitenverzeichnis (www) uploaden. Auf dem Webspace sollte nach einigen Minuten die Funktion aktiv sein.

    Tekky-tipps, Danke für den Beitrag! – insbesondere zu den Einstellungen. – ich erlaube mir, auf deinen Beitrag hinzuweisen.

    Servus

Ihr Kommentar fehlt hier

Ihre E-Mailadresse wird nicht öffentlich angezeigt. Erforderliche Felder sind mit * markiert.

Wenn im Kommentar ein Link vorhanden ist, muss der Kommentar von mir freigeschaltet werden. Dies kann manchmal etwas dauern. Sie erhalten eine E-Mail wenn der Kommentar freigeschaltet wurde.

Ihre E-Mailadresse wird wegen der Avatar-Integration mit gravatar.com abgeglichen. Nähere Informationen entnehmen Sie bitte meiner Datenschutzerklärung.

Durch die wei­te­re Nut­zung der Web­site stim­men Sie der Ver­wen­dung von Cookies zu. Wei­te­re In­for­ma­tio­nen er­hal­ten Sie unter Cookies und in mei­ner Da­ten­schutz­er­klä­rung.

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen