Это пакет «мягкого брандмауэра». Его цель — помочь людям предотвратить несанкционированный доступ к маршрутам по IP-адресу . Он способен отслеживать IP-адреса, страны и хосты (динамический IP-адрес) и перенаправлять неавторизованных пользователей, например, на страницу «Скоро», позволяя IP-адресам из белого списка иметь доступ ко всему сайту. Теперь он также может обнаруживать и блокировать атаки (слишком много запросов) с отдельных IP-адресов или целых стран.
Этот пакет может избавить вас от некоторых головных болей и помочь вам заблокировать некоторый доступ к вашим приложениям, но не может заменить брандмауэры и устройства: для атак на сетевом уровне вам все равно понадобится настоящий брандмауэр.
Все IP-адреса в этих списках не смогут получить доступ к маршрутам, отфильтрованным фильтром черного списка.
Эти IP-адреса, диапазоны или страны могут
Брандмауэр способен обнаруживать простые атаки на вашу страницу, подсчитывая запросы с одного и того же IP-адреса или страны. Просто включите его в своем config/firewall.php
и для получения уведомлений настройте сервис Slack в config/services.php
:
' slack ' => [
' webhook_url ' => env ( ' SLACK_WEBHOOK_URL ' ),
],
и добавьте метод уведомления о маршруте в свою пользовательскую модель:
/**
* Route notifications for the Slack channel.
*
* @return string
*/
public function routeNotificationForSlack ()
{
return config ( ' services.slack.webhook_url ' );
}
Списки IP-адресов (белые и черные) могут храниться в массиве, файлах и базе данных. Изначально доступ к базе данных к спискам отключен, поэтому для проверки конфигурации вашего брандмауэра вы можете опубликовать файл конфигурации и отредактировать массивы blacklist
или 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',
),
Файл (например, /usr/bin/firewall/blacklisted.txt
) должен содержать один IP-адрес, диапазон или имя файла в строке, и да, он будет искать файлы рекурсивно, поэтому при необходимости вы можете иметь файл файлов. :
127.0.0.2
10.0.0.0-10.0.0.100
/tmp/blacklist.txt
IP-адреса, не внесенные в белый список, могут быть заблокированы или перенаправлены. Чтобы настроить перенаправление, вам необходимо опубликовать файл config.php
и настроить:
' redirect_non_whitelisted_to ' => ' coming/soon ' ,
У вас есть доступ к следующим командам:
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.
Это результаты из 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 | |
+-----------------------+-----------+-----------+
Вы также можете использовать Firewall Facade
для управления списками:
$ 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 );
}
Вернуть ответ о блокировке доступа:
return Firewall:: blockAccess ();
Подозрительные события будут (если хотите) регистрироваться, поэтому tail
за ними:
php artisan tail
Вы можете заблокировать страну, указав вместо IP-адреса country:<2-letter ISO code>
. Итак, чтобы заблокировать все IP-адреса Бразилии, вам нужно:
php artisan firewall:blacklist country:br
Вам нужно будет добавить это требование в файл composer.json
:
"geoip/geoip": "~1.14"
или
"geoip2/geoip2": "~2.0"
Вам необходимо включить поиск по стране в файле конфигурации firewall.php:
' enable_country_search ' => true,
И вы можете запланировать эту команду для регулярного обновления базы данных GeoIp ваших городов:
php artisan firewall:updategeoip
Вы можете найти эти коды здесь: изокоды
Вы можете заблокировать пользователям доступ к некоторым страницам только для текущего сеанса, используя следующие методы:
Firewall:: whitelistOnSession ( $ ip );
Firewall:: blacklistOnSession ( $ ip );
Firewall:: removeFromSession ( $ ip );
Нажмите здесь, чтобы увидеть, как это работает, и, если вам понадобится помощь, попробуйте этот репозиторий.
Требуйте пакет брандмауэра с помощью Composer:
composer require pragmarx/firewall
Ларавел 5.5 и выше
Больше ничего делать не нужно, этот пакет использует функцию автоматического обнаружения пакетов и должен быть доступен сразу после установки через Composer.
Ларавел 5.4 и ниже
Добавьте поставщика услуг и фасад в ваш app/config/app.php:
PragmaRX Firewall Vendor Laravel ServiceProvider::class,
' Firewall ' => PragmaRX Firewall Vendor Laravel Facade::class,
Добавьте промежуточное ПО в свое приложение/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,
];
или
protected $ middlewareGroups = [
' web ' => [
...
],
' api ' => [
...
],
' firewall ' => [
PragmaRX Firewall Middleware FirewallBlacklist::class,
PragmaRX Firewall Middleware BlockAttacks::class,
],
];
Затем вы можете использовать их в своих маршрутах:
Route:: group ([ ' middleware ' => ' fw-block-blacklisted ' ], function ()
{
Route:: get ( ' / ' , ' HomeController@index ' );
});
Или вы можете использовать оба. В следующем примере группа разрешения предоставит бесплатный доступ к странице «Скоро» и заблокирует или просто перенаправит IP-адреса, не внесенные в белый список, на другой, при этом блокируя доступ к адресам из черного списка.
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 ' );
});
});
Примечание. Вы можете добавить другое промежуточное программное обеспечение, которое вы уже создали, в новые группы, просто добавив его в группу промежуточного программного обеспечения fw-allow-wl
или fw-block-bl
.
Перенесите вашу базу данных
php artisan migrate
Предупреждение. Если у вас уже установлен и перенесен пакет брандмауэра, вам необходимо обновить имя миграции в таблице migrations
на 2014_02_01_311070_create_firewall_table
, иначе команда миграции завершится неудачей и сообщит вам, что таблица уже существует.
Чтобы опубликовать файл конфигурации, вам необходимо:
Ларавел 4
php artisan config:publish pragmarx/firewall
Ларавел 5
php artisan vendor:publish --provider="PragmaRXFirewallVendorLaravelServiceProvider"
Антонио Карлос Рибейро
Межсетевой экран лицензируется по лицензии BSD из 3 пунктов — подробности см. в файле LICENSE
Запросы на включение и проблемы более чем приветствуются.