Ini adalah paket "firewall lunak". Tujuannya adalah untuk membantu orang mencegah akses tidak sah ke rute berdasarkan alamat IP . Ia mampu melacak IP, negara dan host (ip dinamis), dan mengarahkan pengguna yang tidak sah ke, misalnya, halaman "Segera Hadir", sambil membiarkan IP yang masuk daftar putih memiliki akses ke seluruh situs. Kini ia juga mampu mendeteksi dan memblokir serangan (terlalu banyak permintaan) dari satu IP atau seluruh negara.
Paket ini dapat mencegah beberapa masalah dan membantu Anda memblokir beberapa akses ke aplikasi Anda, namun tidak dapat menggantikan firewall dan peralatan, untuk serangan di tingkat jaringan, Anda masih memerlukan firewall yang sebenarnya.
Semua alamat IP dalam daftar tersebut tidak akan dapat mengakses rute yang difilter oleh filter daftar hitam.
Alamat IP, rentang, atau negara tersebut bisa
Firewall mampu mendeteksi serangan sederhana terhadap halaman Anda, dengan menghitung permintaan dari IP atau negara yang sama. Aktifkan saja di config/firewall.php
Anda dan, untuk menerima notifikasi, konfigurasikan layanan Slack di config/services.php
:
' slack ' => [
' webhook_url ' => env ( ' SLACK_WEBHOOK_URL ' ),
],
dan tambahkan metode pemberitahuan rute ke model pengguna Anda:
/**
* Route notifications for the Slack channel.
*
* @return string
*/
public function routeNotificationForSlack ()
{
return config ( ' services.slack.webhook_url ' );
}
Daftar IP (putih dan hitam) dapat disimpan dalam array, file dan database. Awalnya akses basis data ke daftar dinonaktifkan, jadi, untuk menguji konfigurasi Firewall, Anda dapat mempublikasikan file konfigurasi dan mengedit susunan blacklist
atau 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',
),
File (misalnya /usr/bin/firewall/blacklisted.txt
) harus berisi satu IP, rentang atau nama file per baris, dan, ya, itu akan mencari file secara rekursif, sehingga Anda dapat memiliki file file jika Anda membutuhkannya :
127.0.0.2
10.0.0.0-10.0.0.100
/tmp/blacklist.txt
Alamat IP yang tidak masuk daftar putih dapat diblokir atau dialihkan. Untuk mengonfigurasi pengalihan, Anda harus mempublikasikan file config.php
dan mengonfigurasi:
' redirect_non_whitelisted_to ' => ' coming/soon ' ,
Anda memiliki akses ke perintah berikut:
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.
Itu adalah hasil dari 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 | |
+-----------------------+-----------+-----------+
Anda juga dapat menggunakan Firewall Facade
untuk mengelola daftar:
$ 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 );
}
Kembalikan respons pemblokiran akses:
return Firewall:: blockAccess ();
Peristiwa mencurigakan akan dicatat (jika Anda mau), jadi tail
saja:
php artisan tail
Anda dapat memblokir suatu negara dengan, alih-alih menggunakan alamat IP, berikan country:<2-letter ISO code>
. Jadi, untuk memblokir semua alamat IP Brasil, Anda melakukan:
php artisan firewall:blacklist country:br
Anda harus menambahkan persyaratan ini ke file composer.json
Anda:
"geoip/geoip": "~1.14"
atau
"geoip2/geoip2": "~2.0"
Anda perlu mengaktifkan pencarian negara di file konfigurasi firewall.php Anda:
' enable_country_search ' => true,
Dan Anda dapat menjadwalkan perintah ini untuk memperbarui database GeoIp kota Anda secara berkala:
php artisan firewall:updategeoip
Anda dapat menemukan kode-kode tersebut di sini: isocodes
Anda dapat memblokir pengguna agar tidak mengakses beberapa halaman hanya untuk sesi saat ini, dengan menggunakan metode berikut:
Firewall:: whitelistOnSession ( $ ip );
Firewall:: blacklistOnSession ( $ ip );
Firewall:: removeFromSession ( $ ip );
Klik di sini untuk melihatnya berfungsi dan jika Anda memerlukan bantuan untuk mencari tahu, cobalah repositori ini.
Memerlukan paket Firewall menggunakan Composer:
composer require pragmarx/firewall
Laravel 5.5 dan lebih tinggi
Anda tidak perlu melakukan apa pun lagi, paket ini menggunakan fitur Package Auto-Discovery, dan akan tersedia segera setelah Anda menginstalnya melalui Composer.
Laravel 5.4 dan di bawahnya
Tambahkan Penyedia Layanan dan Fasad ke app/config/app.php Anda:
PragmaRX Firewall Vendor Laravel ServiceProvider::class,
' Firewall ' => PragmaRX Firewall Vendor Laravel Facade::class,
Tambahkan middleware ke aplikasi/Http/Kernel.php Anda
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,
];
atau
protected $ middlewareGroups = [
' web ' => [
...
],
' api ' => [
...
],
' firewall ' => [
PragmaRX Firewall Middleware FirewallBlacklist::class,
PragmaRX Firewall Middleware BlockAttacks::class,
],
];
Kemudian Anda dapat menggunakannya di rute Anda:
Route:: group ([ ' middleware ' => ' fw-block-blacklisted ' ], function ()
{
Route:: get ( ' / ' , ' HomeController@index ' );
});
Atau Anda bisa menggunakan keduanya. Dalam contoh berikut, grup izin akan memberikan akses gratis ke halaman 'segera hadir' dan memblokir atau hanya mengalihkan alamat IP yang tidak masuk daftar putih ke alamat lain, sambil tetap memblokir akses ke alamat IP yang masuk daftar hitam.
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 ' );
});
});
Catatan: Anda dapat menambahkan middleware lain yang telah Anda buat ke grup baru hanya dengan menambahkannya ke grup middleware fw-allow-wl
atau fw-block-bl
.
Migrasikan basis data Anda
php artisan migrate
Peringatan: Jika Anda sudah menginstal dan memigrasikan paket Firewall, Anda perlu memperbarui nama migrasi Anda, di tabel migrations
, menjadi 2014_02_01_311070_create_firewall_table
, jika tidak, perintah migrasi akan gagal dan memberi tahu Anda bahwa tabel sudah ada.
Untuk mempublikasikan file konfigurasi Anda harus:
Laravel 4
php artisan config:publish pragmarx/firewall
Laravel 5
php artisan vendor:publish --provider="PragmaRXFirewallVendorLaravelServiceProvider"
Antonio Carlos Ribeiro
Firewall dilisensikan di bawah Lisensi 3-Klausul BSD - lihat file LICENSE
untuk rinciannya
Permintaan tarik dan masalah sangat diterima.