LaravelでIP制限をかけるミドルウェアの作成方法!初心者向け完全ガイド
生徒
「Laravelで特定のIPアドレスからしかアクセスできないようにしたいんですけど、どうすればいいですか?」
先生
「それなら、ミドルウェアを作成してIP制限を実装する方法があります。」
生徒
「ミドルウェアって難しそうですが、初心者でも作れますか?」
先生
「大丈夫です。順を追って説明しますので安心してください。まず、ミドルウェアの基本を理解しましょう。」
1. ミドルウェアとは?
Laravelのミドルウェアは、リクエスト(アクセス)とレスポンス(返答)の間に入る中間処理のことです。例えば、ログインしているかどうかを確認したり、IPアドレスをチェックしたりする処理をまとめることができます。簡単に言うと、「門番」のような役割を果たして、アクセスを制御する仕組みです。
2. IP制限ミドルウェアの作成手順
まず、Laravelでミドルウェアを作成するには、Artisanコマンドを使います。ArtisanはLaravelのコマンドラインツールで、アプリ開発を効率化してくれます。
php artisan make:middleware IpCheck
このコマンドで app/Http/Middleware/IpCheck.php が作成されます。
3. ミドルウェアの中身を編集する
作成された IpCheck ミドルウェアを開き、アクセスを許可するIPアドレスを指定します。
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class IpCheck
{
protected $allowedIps = [
'123.45.67.89', // 許可するIPアドレスをここに追加
'111.22.33.44',
];
public function handle(Request $request, Closure $next)
{
if (!in_array($request->ip(), $this->allowedIps)) {
abort(403, 'このIPアドレスからのアクセスは許可されていません。');
}
return $next($request);
}
}
ポイントは $request->ip() でアクセス元のIPを取得し、許可リストと照合していることです。abort(403) は、アクセスを拒否するためのLaravelの関数で、HTTPステータスコード403(Forbidden)を返します。
4. ミドルウェアをルートに適用する
作成したIP制限ミドルウェアをルートに登録します。まず、app/Http/Kernel.php を開き、$routeMiddleware 配列に追加します。
protected $routeMiddleware = [
'ip.check' => \App\Http\Middleware\IpCheck::class,
];
その後、ルートに適用します。
Route::get('/admin', [AdminController::class, 'index'])
->middleware('ip.check');
これで /admin にアクセスすると、許可されたIPアドレスのみ通過できるようになります。
5. ルートグループでまとめてIP制限を適用する
複数のルートに同じIP制限を適用したい場合は、ルートグループを使うと便利です。
Route::middleware(['ip.check'])->group(function () {
Route::get('/admin', [AdminController::class, 'index']);
Route::get('/dashboard', [DashboardController::class, 'index']);
});
これで、グループ内のすべてのルートに同じミドルウェアが適用されます。
6. 注意点と補足
IPアドレスはプロキシやVPNを使うと実際のアクセス元と異なる場合があります。そのため、開発環境やセキュリティ要件に応じて柔軟に対応することが大切です。また、許可リストは.envファイルなどで管理すると、環境ごとに変更しやすくなります。
初心者でも、上記の手順を順番に行えば、簡単にIP制限を実装でき、アクセス制御の基本を学ぶことができます。