이것은 "소프트 방화벽" 패키지입니다. 그 목적은 사람들이 IP 주소를 통해 경로에 대한 무단 액세스를 방지하도록 돕는 것입니다. IP, 국가 및 호스트(동적 IP)를 추적하고 승인되지 않은 사용자를 예를 들어 "출시 예정" 페이지로 리디렉션하는 동시에 화이트리스트에 있는 IP가 전체 사이트에 액세스할 수 있도록 허용합니다. 이제 단일 IP 또는 국가 전체의 공격(요청이 너무 많음)을 탐지하고 차단할 수도 있습니다.
이 패키지는 골치 아픈 문제를 예방하고 앱에 대한 일부 액세스를 차단하는 데 도움이 될 수 있지만 방화벽과 어플라이언스를 대체할 수는 없습니다. 네트워크 수준 공격의 경우 여전히 실제 방화벽이 필요합니다.
해당 목록의 모든 IP 주소는 블랙리스트 필터로 필터링된 경로에 액세스할 수 없습니다.
해당 IP 주소, 범위 또는 국가는
방화벽은 동일한 IP 또는 국가의 요청을 계산하여 페이지에 대한 간단한 공격을 감지할 수 있습니다. config/firewall.php
에서 활성화하고 알림을 받으려면 config/services.php
에서 Slack 서비스를 구성하세요.
' 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
해당 코드는 여기에서 찾을 수 있습니다: isocodes
다음 방법을 사용하여 사용자가 현재 세션 동안 일부 페이지에만 액세스하지 못하도록 차단할 수 있습니다.
Firewall:: whitelistOnSession ( $ ip );
Firewall:: blacklistOnSession ( $ ip );
Firewall:: removeFromSession ( $ ip );
작동하는 모습을 보려면 여기를 클릭하고, 문제를 파악하는 데 도움이 필요한 경우 이 저장소를 사용해 보세요.
Composer를 사용하여 방화벽 패키지가 필요합니다.
composer require pragmarx/firewall
라라벨 5.5 이상
다른 작업을 수행할 필요가 없습니다. 이 패키지는 패키지 자동 검색 기능을 사용하며 Composer를 통해 설치하자마자 사용할 수 있습니다.
라라벨 5.4 이하
서비스 제공자와 Facade를 app/config/app.php에 추가하세요:
PragmaRX Firewall Vendor Laravel ServiceProvider::class,
' Firewall ' => PragmaRX Firewall Vendor Laravel Facade::class,
app/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 주소를 다른 IP 주소로 차단하거나 리디렉션하는 동시에 블랙리스트에 있는 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-Clause 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE
파일을 참조하세요.
끌어오기 요청과 문제는 환영할 만한 일입니다.