Este es un paquete de "cortafuegos suave". Su propósito es ayudar a las personas a prevenir el acceso no autorizado a rutas por dirección IP . Es capaz de realizar un seguimiento de las IP, los países y los hosts (IP dinámica) y redirigir a los usuarios no autorizados, por ejemplo, a una página "Próximamente", al tiempo que permite que las IP incluidas en la lista blanca tengan acceso a todo el sitio. Ahora también es capaz de detectar y bloquear ataques (demasiadas solicitudes) de direcciones IP individuales o de países enteros.
Este paquete puede evitar algunos dolores de cabeza y ayudarle a bloquear algunos accesos a sus aplicaciones, pero no puede reemplazar los firewalls ni los dispositivos; para ataques a nivel de red, aún necesitará un firewall real.
Todas las direcciones IP en esas listas no podrán acceder a las rutas filtradas por el filtro de lista negra.
Esas direcciones IP, rangos o países pueden
El firewall es capaz de detectar ataques simples a su página, contando las solicitudes de la misma IP o país. Simplemente habilítelo en su config/firewall.php
y, para recibir notificaciones, configure el servicio Slack en config/services.php
:
' slack ' => [
' webhook_url ' => env ( ' SLACK_WEBHOOK_URL ' ),
],
y agregue el método de notificación de ruta a su modelo de usuario:
/**
* Route notifications for the Slack channel.
*
* @return string
*/
public function routeNotificationForSlack ()
{
return config ( ' services.slack.webhook_url ' );
}
Las listas de IP (blancas y negras) se pueden almacenar en matrices, archivos y bases de datos. Inicialmente, el acceso a las listas de la base de datos está deshabilitado, por lo tanto, para probar la configuración de su Firewall, puede publicar el archivo de configuración y editar las matrices blacklist
o 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',
),
El archivo (por ejemplo /usr/bin/firewall/blacklisted.txt
) debe contener una IP, rango o nombre de archivo por línea y, sí, buscará archivos de forma recursiva, por lo que puede tener un archivo de archivos si lo necesita. :
127.0.0.2
10.0.0.0-10.0.0.100
/tmp/blacklist.txt
Las direcciones IP que no están en la lista blanca se pueden bloquear o redirigir. Para configurar la redirección tendrás que publicar el archivo config.php
y configurar:
' redirect_non_whitelisted_to ' => ' coming/soon ' ,
Tienes acceso a los siguientes comandos:
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.
Esos son resultados 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 | |
+-----------------------+-----------+-----------+
También puedes utilizar Firewall Facade
para gestionar las listas:
$ 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 );
}
Devolver una respuesta de bloqueo de acceso:
return Firewall:: blockAccess ();
Los eventos sospechosos se registrarán (si lo desea), así que tail
:
php artisan tail
Puede bloquear un país, en lugar de una dirección IP, ingresando country:<2-letter ISO code>
. Entonces, para bloquear todas las direcciones IP de Brasil, debes hacer lo siguiente:
php artisan firewall:blacklist country:br
Tendrás que agregar este requisito a tu archivo composer.json
:
"geoip/geoip": "~1.14"
o
"geoip2/geoip2": "~2.0"
Debe habilitar la búsqueda de países en su archivo de configuración firewall.php:
' enable_country_search ' => true,
Y puedes programar este comando para actualizar la base de datos GeoIp de tu ciudad regularmente:
php artisan firewall:updategeoip
Puedes encontrar esos códigos aquí: isocódigos
Puede impedir que los usuarios accedan a algunas páginas solo durante la sesión actual, utilizando estos métodos:
Firewall:: whitelistOnSession ( $ ip );
Firewall:: blacklistOnSession ( $ ip );
Firewall:: removeFromSession ( $ ip );
Haga clic aquí para verlo funcionar y, en caso de que necesite ayuda para resolver cosas, pruebe este repositorio.
Requerir el paquete Firewall usando Composer:
composer require pragmarx/firewall
Laravel 5.5 y superior
No tiene que hacer nada más, este paquete utiliza la función de descubrimiento automático de paquetes y debería estar disponible tan pronto como lo instale a través de Composer.
Laravel 5.4 y abajo
Agregue el proveedor de servicios y la fachada a su app/config/app.php:
PragmaRX Firewall Vendor Laravel ServiceProvider::class,
' Firewall ' => PragmaRX Firewall Vendor Laravel Facade::class,
Agregue middlewares a su aplicación/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,
];
o
protected $ middlewareGroups = [
' web ' => [
...
],
' api ' => [
...
],
' firewall ' => [
PragmaRX Firewall Middleware FirewallBlacklist::class,
PragmaRX Firewall Middleware BlockAttacks::class,
],
];
Entonces podrás utilizarlos en tus rutas:
Route:: group ([ ' middleware ' => ' fw-block-blacklisted ' ], function ()
{
Route:: get ( ' / ' , ' HomeController@index ' );
});
O podrías usar ambos. En el siguiente ejemplo, el grupo permitido dará acceso gratuito a la página "próximamente" y bloqueará o simplemente redirigirá las direcciones IP que no están en la lista blanca a otra, mientras sigue bloqueando el acceso a las que están en la lista negra.
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 ' );
});
});
Nota: Puede agregar otro middleware que ya haya creado a los nuevos grupos simplemente agregándolo al grupo de middleware fw-allow-wl
o fw-block-bl
.
Migra tu base de datos
php artisan migrate
Advertencia: si ya tiene un paquete de Firewall instalado y migrado, debe actualizar el nombre de su migración, en la tabla migrations
, a 2014_02_01_311070_create_firewall_table
; de lo contrario, el comando de migración fallará y le indicará que la tabla ya existe.
Para publicar el archivo de configuración tendrás que:
laravel 4
php artisan config:publish pragmarx/firewall
laravel 5
php artisan vendor:publish --provider="PragmaRXFirewallVendorLaravelServiceProvider"
Antonio Carlos Ribeiro
Firewall tiene la licencia BSD de 3 cláusulas; consulte el archivo LICENSE
para obtener más detalles.
Las solicitudes de extracción y los problemas son más que bienvenidos.