[ubuntu/Laravel]ブルートフォースアタック対策

ブルートフォースアタックとは

簡単に言うとパスワード認証を通すために何回もidとpwを試してログイン認証を突破する攻撃手法です。

この攻撃手法は単純な実施方法ですが、定義しているパスワードが強力なものであっても時間とコンピュータリソースさえあれば攻撃者に突破される事が可能です。

昨今ではクラウドサーバーやレンタルサーバーなど誰でもサーバーを立ち上げやすくなっているので要注意です。

Ubuntuでの対策

サーバー側の設定です。

ブルートフォースアタックをさせないためにPWでのログインではなく鍵認証でのログインのみを有効にすることがベストな対策です。(むしろやらないと駄目です。)

 

Ubuntuでの対策はSSHファイルを編集します。

sudo nano /etc/ssh/sshd_config

 

ファイル内で以下の行をコメントアウト。
やりたいことはパスワードによるSSH接続を許可するかどうかを制御

#PasswordAuthentication yes

 

ファイル内で以下の行を追記。
やりたいことはパスワードが空の場合でもSSH接続を制御
※上記のPasswordAuthenticationで制御しているので必須ではない。むしろ不要かも。

PermitEmptyPasswords no

 

最後にsshサービスの再起動。

sudo systemctl restart sshd

 

Laravelでの対策

アプリケーション側での設定です。

 

Laravelでは、既存のファイルを編集することで対策可能です。

app/Http/Requests/Auth/LoginRequest.phpを編集。

ログイン回数の設定

tooManyAttemptsの引数:ログイン試行回数の設定

public function ensureIsNotRateLimited(): void
    {
        if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
            return;
        }

        event(new Lockout($this));

        $seconds = RateLimiter::availableIn($this->throttleKey());

        throw ValidationException::withMessages([
            'email' => trans('auth.throttle', [
                'seconds' => $seconds,
                'minutes' => ceil($seconds / 60),
            ]),
        ]);
    }

ログイン停止時間の設定

RateLimiter::hitの引数:停止時間の設定
※秒数指定。10分なら600。

public function authenticate(): void
{
        if (! Auth::guard($guard)->attempt(
                [$credentials_key['id'] => $email, $credentials_key['pw'] => $password],
                $remenber)
            ) {
            RateLimiter::hit($this->throttleKey(),60);

            throw ValidationException::withMessages([
                'email' => trans('auth.failed'),
            ]);
        }
}

 

 

Twitterでフォローしよう

読んでみーな
おすすめの記事