Dies ist ein „Soft-Firewall“-Paket. Sein Zweck besteht darin, Menschen dabei zu helfen, unbefugten Zugriff auf Routen anhand der IP-Adresse zu verhindern. Es ist in der Lage, IPs, Länder und Hosts zu verfolgen (dynamische IP) und nicht autorisierte Benutzer beispielsweise auf eine „Coming Soon“-Seite umzuleiten, während IPs auf der Whitelist Zugriff auf die gesamte Website haben. Es ist nun auch in der Lage, Angriffe (zu viele Anfragen) von einzelnen IPs oder ganzen Ländern zu erkennen und zu blockieren.
Dieses Paket kann einige Kopfschmerzen verhindern und Ihnen dabei helfen, den Zugriff auf Ihre Apps teilweise zu blockieren, kann jedoch Firewalls und Appliances nicht ersetzen. Für Angriffe auf Netzwerkebene benötigen Sie weiterhin eine echte Firewall.
Alle IP-Adressen in diesen Listen können nicht auf Routen zugreifen, die vom Blacklist-Filter gefiltert werden.
Diese IP-Adressen, Bereiche oder Länder können
Die Firewall kann einfache Angriffe auf Ihre Seite erkennen, indem sie Anfragen von derselben IP oder demselben Land zählt. Aktivieren Sie es einfach in Ihrer config/firewall.php
und konfigurieren Sie den Slack-Dienst in config/services.php
, um Benachrichtigungen zu erhalten:
' slack ' => [
' webhook_url ' => env ( ' SLACK_WEBHOOK_URL ' ),
],
und fügen Sie die Routenbenachrichtigungsmethode zu Ihrem Benutzermodell hinzu:
/**
* Route notifications for the Slack channel.
*
* @return string
*/
public function routeNotificationForSlack ()
{
return config ( ' services.slack.webhook_url ' );
}
IP-Listen (weiße und schwarze Listen) können in Arrays, Dateien und Datenbanken gespeichert werden. Der Datenbankzugriff auf Listen ist zunächst deaktiviert. Um Ihre Firewall-Konfiguration zu testen, können Sie die Konfigurationsdatei veröffentlichen und die blacklist
oder whitelist
Arrays bearbeiten:
' blacklist ' => array (
' 127.0.0.1 ' ,
' 192.168.17.0/24 '
' 127.0 . 0.1 / 255.255 . 255.255 '
' 10.0.0.1-10.0.0.255 '
' 172.17 .* . * '
'country:br'
' /usr/bin/firewall/blacklisted.txt',
),
Die Datei (zum Beispiel /usr/bin/firewall/blacklisted.txt
) muss eine IP-Adresse, einen Bereich oder einen Dateinamen pro Zeile enthalten, und ja, sie sucht rekursiv nach Dateien, sodass Sie bei Bedarf über eine Datei mit Dateien verfügen können :
127.0.0.2
10.0.0.0-10.0.0.100
/tmp/blacklist.txt
Nicht auf der Whitelist stehende IP-Adressen können blockiert oder umgeleitet werden. Um die Umleitung zu konfigurieren, müssen Sie die Datei config.php
veröffentlichen und Folgendes konfigurieren:
' redirect_non_whitelisted_to ' => ' coming/soon ' ,
Sie haben Zugriff auf die folgenden Befehle:
firewall:cache:clear Clear the firewall cache.
firewall:list List all IP address, white and blacklisted.
firewall:updategeoip Update the GeoIP database.
firewall:blacklist Add an IP address to blacklist.
firewall:clear Remove all ip addresses from white and black lists.
firewall:remove Remove an IP address from white or black list.
firewall:whitelist Add an IP address to whitelist.
Das sind Ergebnisse von firewall:list
:
+--------------+-----------+-----------+
| IP Address | Whitelist | Blacklist |
+--------------+-----------+-----------+
| 10.17.12.7 | | X |
| 10.17.12.100 | X | |
| 10.17.12.101 | X | |
| 10.17.12.102 | X | |
| 10.17.12.200 | | X |
+--------------+-----------+-----------+
+-----------------------+-----------+-----------+
| IP Address | Whitelist | Blacklist |
+-----------------------+-----------+-----------+
| 172.0.0.0-172.0.0.255 | | X |
| country:br | | X |
| host:mypc.myname.com | X | |
+-----------------------+-----------+-----------+
Sie können die Listen auch mit der Firewall Facade
verwalten:
$ whitelisted = Firewall:: isWhitelisted ( ' 10.17.12.1 ' );
$ blacklisted = Firewall:: isBlacklisted ( ' 10.0.0.3 ' );
Firewall:: whitelist ( ' 192.168.1.1 ' );
Firewall:: blacklist ( ' 10.17.12.1 ' , true ); /// true = force in case IP is whitelisted
Firewall:: blacklist ( ' 127.0.0.0-127.0.0.255 ' );
Firewall:: blacklist ( ' 200.212.331.0/28 ' );
Firewall:: blacklist ( ' country:br ' );
if (Firewall:: whichList ( $ ip ) !== false ) // returns false, 'whitelist' or 'blacklist'
{
Firewall:: remove ( $ ip );
}
Geben Sie eine blockierende Zugriffsantwort zurück:
return Firewall:: blockAccess ();
Verdächtige Ereignisse werden (falls gewünscht) protokolliert, also tail
Folgendes:
php artisan tail
Sie können ein Land blockieren, indem Sie anstelle einer IP-Adresse country:<2-letter ISO code>
übergeben. Um also alle brasilianischen IP-Adressen zu blockieren, gehen Sie wie folgt vor:
php artisan firewall:blacklist country:br
Sie müssen diese Anforderung zu Ihrer composer.json
-Datei hinzufügen:
"geoip/geoip": "~1.14"
oder
"geoip2/geoip2": "~2.0"
Sie müssen die Ländersuche in Ihrer Firewall.php-Konfigurationsdatei aktivieren:
' enable_country_search ' => true,
Und Sie können diesen Befehl so planen, dass die GeoIP-Datenbank Ihrer Städte regelmäßig aktualisiert wird:
php artisan firewall:updategeoip
Sie finden diese Codes hier: Isocodes
Mit den folgenden Methoden können Sie Benutzern den Zugriff auf einige Seiten nur für die aktuelle Sitzung verweigern:
Firewall:: whitelistOnSession ( $ ip );
Firewall:: blacklistOnSession ( $ ip );
Firewall:: removeFromSession ( $ ip );
Klicken Sie hier, um zu sehen, wie es funktioniert. Wenn Sie Hilfe beim Herausfinden benötigen, probieren Sie dieses Repository aus.
Fordern Sie das Firewall-Paket mit Composer an:
composer require pragmarx/firewall
Laravel 5.5 und höher
Sie müssen nichts weiter tun, dieses Paket nutzt die Funktion „Package Auto-Discovery“ und sollte verfügbar sein, sobald Sie es über Composer installieren.
Laravel 5.4 und niedriger
Fügen Sie den Dienstanbieter und die Fassade zu Ihrer app/config/app.php hinzu:
PragmaRX Firewall Vendor Laravel ServiceProvider::class,
' Firewall ' => PragmaRX Firewall Vendor Laravel Facade::class,
Fügen Sie Middleware zu Ihrer app/Http/Kernel.php hinzu
protected $ routeMiddleware = [
...
' fw-only-whitelisted ' => PragmaRX Firewall Middleware FirewallWhitelist::class,
' fw-block-blacklisted ' => PragmaRX Firewall Middleware FirewallBlacklist::class,
' fw-block-attacks ' => PragmaRX Firewall Middleware BlockAttacks::class,
];
oder
protected $ middlewareGroups = [
' web ' => [
...
],
' api ' => [
...
],
' firewall ' => [
PragmaRX Firewall Middleware FirewallBlacklist::class,
PragmaRX Firewall Middleware BlockAttacks::class,
],
];
Dann können Sie sie in Ihren Routen verwenden:
Route:: group ([ ' middleware ' => ' fw-block-blacklisted ' ], function ()
{
Route:: get ( ' / ' , ' HomeController@index ' );
});
Oder Sie könnten beide verwenden. Im folgenden Beispiel gewährt die Zulassungsgruppe freien Zugriff auf die Seite „Bald verfügbar“ und blockiert IP-Adressen, die nicht auf der Whitelist stehen, oder leitet sie einfach an eine andere um, während der Zugriff auf die IP-Adressen auf der Blacklist weiterhin blockiert wird.
Route:: group ([ ' middleware ' => ' fw-block-blacklisted ' ], function ()
{
Route:: get ( ' coming/soon ' , function ()
{
return " We are about to launch, please come back in a few days. " ;
});
Route:: group ([ ' middleware ' => ' fw-only-whitelisted ' ], function ()
{
Route:: get ( ' / ' , ' HomeController@index ' );
});
});
Hinweis: Sie können weitere Middleware, die Sie bereits erstellt haben, zu den neuen Gruppen hinzufügen, indem Sie sie einfach zur Middleware-Gruppe fw-allow-wl
oder fw-block-bl
hinzufügen.
Migrieren Sie Ihre Datenbank
php artisan migrate
Warnung: Wenn Sie bereits ein Firewall-Paket installiert und migriert haben, müssen Sie Ihren Migrationsnamen in der migrations
auf 2014_02_01_311070_create_firewall_table
aktualisieren. Andernfalls schlägt der Migrationsbefehl fehl und zeigt Ihnen an, dass die Tabelle bereits vorhanden ist.
Um die Konfigurationsdatei zu veröffentlichen, müssen Sie Folgendes tun:
Laravel 4
php artisan config:publish pragmarx/firewall
Laravel 5
php artisan vendor:publish --provider="PragmaRXFirewallVendorLaravelServiceProvider"
Antonio Carlos Ribeiro
Firewall ist unter der BSD 3-Clause-Lizenz lizenziert – Einzelheiten finden Sie in der LICENSE
Datei
Pull-Requests und Issues sind mehr als willkommen.