スポンサーリンク

django-axesでアクセス制限が簡単に実装できる!

django-axesでログイン制限が簡単にできた

Djangoで開発していくと基本的なセキュリティ対策はデフォルトで組み込まれていますが、ブルートフォース攻撃などのログイン制限や他のいくつかの攻撃には開発者側で対応していく必要があります。

以下pypi(パイピーアイ)からの引用です。

Axes is a Django plugin for keeping track of suspicious login attempts for your Django based website and implementing simple brute-force attack blocking.
(Axesは、DjangoベースのWebサイトへの疑わしいログイン試行を追跡し、単純なブルートフォース攻撃のブロックを実装するためのDjangoプラグインです。)

django-axesを採用したらすごく簡単にブルートフォース攻撃対策と、ログイン履歴の追跡ができたので、忘備録の意味も込めてまとめてみたいと思います。

django-axesでできる事

ログイン試行回数の制限・解除
アカウントロックされているものの確認
アカウントロック時間の調整
IP単位かユーザー単位かユーザーエージェント単位の選択
IPアドレスのホワイトリスト・ブラックリスト
その他Djangoへのアクセス管理

主要な機能としてはこんな感じですが、他にも有用なオプションはたくさんありますので気になった方は公式ドキュメントを読んでみるといいと思います。

django-axesのインストール&実装方法

django-axesのインストール方法はpipを利用してインストールするのが一番簡単なのでpipでサクッとインストールしてしまいましょう。

pip install django-axes

docker-composeで開発している場合はrequirements.txtにも記述しておきましょう。2021年1月現在では5.12.0が最新版になっています。

インストールできましたら設定ファイル(settings.py)に設定を追加していきます。

1:「INSTALLED_APPS」に”axes”を追加します

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'axes', #←これを追加
]

2:「AUTHENTICATION_BACKENDS」の一番上に”axes.backends.AxesBackend”を追加します

AUTHENTICATION_BACKENDS = [
'axes.backends.AxesBackend', #←これを追加
'django.contrib.auth.backends.ModelBackend',
]

※AUTHENTICATION_BACKENDSが無い場合はこのままコピペして貼り付けてください。

3:「MIDDLEWARE」に”axes.middleware.AxesMiddleware”を追加します

MIDDLEWARE = [
# The following is the list of default middleware in new Django projects.
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'axes.middleware.AxesMiddleware', #←これを追加
]

4:文法チェックする

python manage.py check

5:マイグレートする

怪しいアクセスがあったものやログイン履歴などをDBにためるのでmigrateする必要がありますが、本番環境と開発環境では環境が違いますので必ず4の「python manage.py check」を行ってからmigrateするようにしましょう。

python manage.py migrate

実装はこれだけで完了ですので、実際に動くか確認してみてください。

デフォルトでは3回ミスするとアカウントロックされます。

もし、開発環境でエラーが出てしまったら以下の設定を設定ファイルに追記してaxesを無効化して開発を行いましょう。

AXES_ENABLED = False

エラーの内容によってはログイン機能の実装方法が悪い場合もありますので、エラー内容を読んでログイン機能を見直してみましょう。

アカウントロックを解除するコマンド

きちんとアカウントロックされるか確認できましたら、アカウントロックを外してみましょう。

以下のコマンドで、すべてのアカウントロックを解除することができます。

python manage.py axes_reset

実運用のときはすべて解除してしまっては困りますので、実運用の際はこのコマンドを叩かないように気を付けましょう。

他にも管理画面やAPI経由でもアカウントロックを解除することができます。

ブルートフォース攻撃対策まとめ

今回はインストール方法と実装の方法を紹介してきましたが、他にも細かく設定することができますので運用に合わせた設定をしておきましょう。

(細かい設定なんかもまとめられたらまとめてみます)

ここまで読んでいただきありがとうございます!!

コメント