Il s'agit d'un package "soft-firewall". Son objectif est d'aider les gens à empêcher l'accès non autorisé aux itinéraires par adresse IP . Il est capable de garder une trace des IP, des pays et des hôtes (IP dynamique), et de rediriger les utilisateurs non autorisés vers, par exemple, une page « Coming Soon », tout en permettant aux IP sur liste blanche d'accéder à l'ensemble du site. Il est désormais également capable de détecter et de bloquer les attaques (trop de requêtes) provenant d’adresses IP uniques ou de pays entiers.
Ce package peut éviter certains maux de tête et vous aider à bloquer certains accès à vos applications, mais ne peut pas remplacer les pare-feu et les appliances, pour les attaques au niveau du réseau, vous aurez toujours besoin d'un véritable pare-feu.
Toutes les adresses IP de ces listes ne pourront pas accéder aux routes filtrées par le filtre de liste noire.
Ces adresses IP, plages ou pays peuvent
Le pare-feu est capable de détecter des attaques simples sur votre page, en comptant les requêtes provenant de la même adresse IP ou du même pays. Activez-le simplement sur votre config/firewall.php
et, pour recevoir des notifications, configurez le service Slack dans config/services.php
:
' slack ' => [
' webhook_url ' => env ( ' SLACK_WEBHOOK_URL ' ),
],
et ajoutez la méthode de notification d'itinéraire à votre modèle utilisateur :
/**
* Route notifications for the Slack channel.
*
* @return string
*/
public function routeNotificationForSlack ()
{
return config ( ' services.slack.webhook_url ' );
}
Les listes IP (blanche et noire) peuvent être stockées dans un tableau, des fichiers et une base de données. Initialement, l'accès à la base de données aux listes est désactivé. Ainsi, pour tester la configuration de votre pare-feu, vous pouvez publier le fichier de configuration et modifier les tableaux blacklist
ou whitelist
:
' 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',
),
Le fichier (par exemple /usr/bin/firewall/blacklisted.txt
) doit contenir une adresse IP, une plage ou un nom de fichier par ligne et, oui, il recherchera les fichiers de manière récursive, vous pouvez donc avoir un fichier de fichiers si vous en avez besoin. :
127.0.0.2
10.0.0.0-10.0.0.100
/tmp/blacklist.txt
Les adresses IP non sur liste blanche peuvent être bloquées ou redirigées. Pour configurer la redirection vous devrez publier le fichier config.php
et configurer :
' redirect_non_whitelisted_to ' => ' coming/soon ' ,
Vous avez accès aux commandes suivantes :
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.
Ce sont les résultats de 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 | |
+-----------------------+-----------+-----------+
Vous pouvez également utiliser la Firewall Facade
pour gérer les listes :
$ 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 );
}
Renvoie une réponse de blocage d'accès :
return Firewall:: blockAccess ();
Les événements suspects seront (si vous le souhaitez) enregistrés, alors tail
-les :
php artisan tail
Vous pouvez bloquer un pays en transmettant, au lieu d'une adresse IP, country:<2-letter ISO code>
. Donc, pour bloquer toutes les adresses IP du Brésil, vous faites :
php artisan firewall:blacklist country:br
Vous devrez ajouter cette exigence à votre fichier composer.json
:
"geoip/geoip": "~1.14"
ou
"geoip2/geoip2": "~2.0"
Vous devez activer la recherche de pays sur votre fichier de configuration firewall.php :
' enable_country_search ' => true,
Et vous pouvez programmer cette commande pour mettre régulièrement à jour la base de données GeoIp de vos villes :
php artisan firewall:updategeoip
Vous pouvez trouver ces codes ici : isocodes
Vous pouvez empêcher les utilisateurs d'accéder à certaines pages uniquement pour la session en cours, en utilisant ces méthodes :
Firewall:: whitelistOnSession ( $ ip );
Firewall:: blacklistOnSession ( $ ip );
Firewall:: removeFromSession ( $ ip );
Cliquez ici pour le voir fonctionner et si vous avez besoin d'aide pour comprendre les choses, essayez ce référentiel.
Exiger le package Firewall à l'aide de Composer :
composer require pragmarx/firewall
Laravel 5.5 et plus
Vous n'avez rien d'autre à faire, ce package utilise la fonctionnalité de découverte automatique de package et devrait être disponible dès que vous l'installez via Composer.
Laravel 5.4 et versions antérieures
Ajoutez le fournisseur de services et la façade à votre app/config/app.php :
PragmaRX Firewall Vendor Laravel ServiceProvider::class,
' Firewall ' => PragmaRX Firewall Vendor Laravel Facade::class,
Ajoutez des middlewares à votre application/Http/Kernel.php
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,
];
ou
protected $ middlewareGroups = [
' web ' => [
...
],
' api ' => [
...
],
' firewall ' => [
PragmaRX Firewall Middleware FirewallBlacklist::class,
PragmaRX Firewall Middleware BlockAttacks::class,
],
];
Vous pourrez ensuite les utiliser dans vos itinéraires :
Route:: group ([ ' middleware ' => ' fw-block-blacklisted ' ], function ()
{
Route:: get ( ' / ' , ' HomeController@index ' );
});
Ou vous pouvez utiliser les deux. Dans l'exemple suivant, le groupe d'autorisation donnera un accès gratuit à la page « à venir » et bloquera ou redirigera simplement les adresses IP non sur liste blanche vers une autre, tout en bloquant l'accès à celles sur liste noire.
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 ' );
});
});
Remarque : Vous pouvez ajouter d'autres middlewares que vous avez déjà créés aux nouveaux groupes en l'ajoutant simplement au groupe de middlewares fw-allow-wl
ou fw-block-bl
.
Migrez votre base de données
php artisan migrate
Avertissement : Si un package de pare-feu est déjà installé et migré, vous devez mettre à jour le nom de votre migration, dans la table migrations
, en 2014_02_01_311070_create_firewall_table
, sinon la commande migrate échouera et vous indiquera que la table existe déjà.
Pour publier le fichier de configuration, vous devrez :
Laravel4
php artisan config:publish pragmarx/firewall
Laravel5
php artisan vendor:publish --provider="PragmaRXFirewallVendorLaravelServiceProvider"
Antonio Carlos Ribeiro
Le pare-feu est sous licence BSD à 3 clauses - voir le fichier LICENSE
pour plus de détails
Les demandes de tirage et les problèmes sont plus que bienvenus.