Skip to content
KitploitKITPLOIT
도구블로그
Log in
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/jazzband/django-defender
Defensive ToolsPassword AttacksWeb SecurityAuthentication
GitHubjazzband/django-defender

django-defender

로그인 무차별 대입 공격을 차단하는 간단하고 매우 빠른 Django 재사용 가능 앱

저장소 보기
1.1k144288개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

django-defender

.. image:: https://jazzband.co/static/img/badge.svg :target: https://jazzband.co/ :alt: Jazzband

.. image:: https://img.shields.io/pypi/pyversions/django-defender.svg :alt: 지원되는 Python 버전 :target: https://pypi.org/project/django-defender/

.. image:: https://img.shields.io/pypi/djversions/django-defender.svg :target: https://pypi.org/project/django-defender/ :alt: 지원되는 Django 버전

.. image:: https://github.com/jazzband/django-defender/workflows/Test/badge.svg :target: https://github.com/jazzband/django-defender/actions :alt: GitHub Actions

.. image:: https://codecov.io/gh/jazzband/django-defender/branch/master/graph/badge.svg :target: https://codecov.io/gh/jazzband/django-defender :alt: 커버리지

.. image:: https://readthedocs.org/projects/django-defender/badge/?version=latest :alt: 문서 상태 :target: https://django-defender.readthedocs.io/en/latest/?badge=latest

로그인 시도를 무차별 대입(brute force)하는 사람들을 차단하는 간단한 Django 재사용 가능 앱입니다. 목표는 로그인 속도를 늦추지 않도록 최대한 빠르게 만드는 것입니다.

각 로그인 시도마다 데이터베이스를 확인하기 위해 데이터베이스에 접근하지 않아도 되도록 캐시를 사용합니다. 첫 번째 버전은 Redis를 기반으로 하지만, 사람들이 자신의 필요에 가장 잘 맞는 백엔드를 사용할 수 있도록 구성 가능하게 만드는 것이 목표입니다.

django-defender를 사용하는 사이트

사이트에서 defender를 사용하고 있다면, 목록에 추가할 PR을 제출해 주세요.

  • https://hub.docker.com
  • https://www.mycosbuilder.com

문서

문서는 Read the Docs에서 확인할 수 있습니다:

https://django-defender.readthedocs.io

기능

  • 모든 로그인 시도를 데이터베이스에 기록

  • IP 주소에 대해 다른 헤더를 사용하는 리버스 프록시 지원

  • 다음 기준으로 속도 제한

    • 사용자 이름
    • IP 주소
  • 블랙리스트에 Redis 사용

  • 구성

    • Redis 서버

      • 호스트
      • 포트
      • 데이터베이스
      • 비밀번호
      • 키 접두사
    • 차단 기간

    • 차단 전 허용되는 잘못된 시도 횟수

  • 95% 코드 커버리지

  • 완전한 문서

  • 로그인 시도를 데이터베이스에 저장하는 기능

  • 로그인 시도 데이터베이스 테이블을 정리하는 관리 명령어

  • 관리자 페이지

    • 차단된 사용자 이름 및 IP 주소 목록
    • 최근 로그인 시도 목록
    • 사람들을 차단 해제하는 기능
  • 사용자 정의 인증 방법에 쉽게 적용 가능

  • 사용자 이름 또는 IP 차단 시 신호(signal) 전송

관리자 페이지


.. image:: https://cloud.githubusercontent.com/assets/261601/5950540/8895b570-a729-11e4-9dc3-6b00e46c8043.png :target: https://cloud.githubusercontent.com/assets/261601/5950540/8895b570-a729-11e4-9dc3-6b00e46c8043.png :alt: 대체 태그

.. image:: https://cloud.githubusercontent.com/assets/261601/5950541/88a35194-a729-11e4-981b-3a55b44ef9d5.png :target: https://cloud.githubusercontent.com/assets/261601/5950541/88a35194-a729-11e4-981b-3a55b44ef9d5.png :alt: 대체 태그

요구 사항

  • Python: 3.8, 3.9, 3.10, 3.11, 3.12, PyPy
  • Django: 3.2, 4.2, 5.0, 5.1, 5.2
  • Redis: 5.x, 6.x, 7.x

설치

코드를 다운로드하고, 방법에 따라 다음 중 하나의 방식으로 setup을 실행합니다.

PyPI에서 프로덕션 준비 버전을 설치하려면:

.. code-block:: bash

pip install django-defender

소스 코드를 다운로드한 후 개발 버전을 설치하려면:

.. code-block:: bash

python setup.py install

GitHub 저장소에서 마스터 브랜치 개발 버전을 설치하려면:

.. code-block:: bash

pip install -e git+http://github.com/kencochran django-defender.git#egg=django_defender-dev

먼저, 이 프로젝트를 settings.py의 INSTALLED_APPS 목록에 추가해야 합니다.

.. code-block:: python

INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', # ... 'defender', # ... ]

다음으로, FailedLoginMiddleware 미들웨어를 설치합니다.

.. code-block:: python

MIDDLEWARE_CLASSES = [ 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'defender.middleware.FailedLoginMiddleware', ]

Django 관리자를 통해 차단된 사용자를 관리하려면, urls.py에 다음을 추가하세요.

.. code-block:: python

urlpatterns = [ path('admin/defender/', include('defender.urls')), # defender 관리자 path('admin/', admin.site.urls), # 일반 관리자 # 여러분의 패턴이 이어집니다... ]

마이그레이션


작동에 필요한 테이블을 데이터베이스에 생성해야 합니다.

.. code-block:: bash

python manage.py migrate defender

관리 명령어


cleanup_django_defender

트래픽이 많은 웹사이트가 있다면, AccessAttempts 테이블이 꽤 빨리 가득 찰 것입니다. 데이터를 감사 목적으로 보관할 필요가 없다면, 테이블을 깨끗하게 유지하는 데 도움이 되는 관리 명령어가 있습니다.

이 명령어는 DEFENDER_ACCESS_ATTEMPT_EXPIRATION 설정을 확인하여 삭제할 레코드를 결정합니다. 기본값(지정되지 않은 경우)은 24시간입니다.

.. code-block:: bash

$ python manage.py cleanup_django_defender

이를 매일 또는 매주 크론 작업으로 설정하여 테이블 크기를 줄일 수 있습니다.

.. code-block:: bash

매일 오전 12:24에 실행.

24 0 * * * /usr/bin/python manage.py cleanup_django_defender >> /var/log/django_defender_cleanup.log

장기 목표

  • 플러그 가능한 백엔드, 그래서 사람들이 Redis 외의 것을 사용할 수 있도록
  • 계정이 차단되면 사용자에게 이메일 보내기
  • 절대 차단하지 않을 사용자 이름 및 IP(관리자 등)에 대한 화이트리스트 추가
  • IP 주소에 대한 영구 블랙리스트 추가
  • 알려진 프록시 IP를 검색하고 해당 IP에서 오는 요청을 차단하지 않음 (좋은 IP가 차단될 가능성 감소)
  • 오래된 (구성 가능한) 로그인 시도를 정리하는 관리 명령어 추가

성능


defender의 목표는 로그인 프로세스를 늦추지 않도록 최대한 빠르게 만드는 것입니다. 목표가 달성되고 있는지 확인하기 위해 애플리케이션을 테스트할 방법이 필요합니다. 가장 좋은 방법은 일반 Django 로그인이 defender 및 django-axes와 비교하여 얼마나 빠른지 테스트하는 것입니다.

일반 Django 로그인은 기준선이 되며, 추가 검사가 없기 때문에 세 가지 방법 중 가장 빠를 것으로 예상됩니다.

defender 로그인은 아마도 Django 로그인보다 느리지만, django-axes 로그인보다는 빠를 것으로 기대합니다. 목표는 일반 원시 로그인과 defender 사이의 차이를 최소화하는 것입니다.

django-axes 로그인 속도는 아마도 세 가지 중 가장 느릴 것입니다. 더 많은 검사를 수행하고 많은 데이터베이스 쿼리를 수행하기 때문입니다.

로그인 속도를 결정하는 가장 좋은 방법은 각 설정으로 애플리케이션에 부하 테스트를 수행하고 각 유형의 로그인 시간을 비교하는 것입니다.

부하 테스트


모든 유형의 로그인을 다루기 위해 부하 테스트에서 하나 이상의 테스트가 필요합니다.

#. 모두 성공: 성공적인 로그인만으로 부하 테스트를 수행합니다.

#. 혼합: 일부 성공, 일부 실패: 성공적인 로그인과 실패를 혼합하여 부하 테스트를 수행하여 실패가 성능에 미치는 영향을 확인합니다.

#. 모두 실패: 모든 로그인이 실패하는 부하 테스트를 수행하고 성능 차이를 확인합니다.

부하 테스트에 사용할 샘플 애플리케이션이 필요하며, 유일한 차이점은 defender, axes 또는 둘 다 로드하지 않는 구성입니다.

호스팅된 부하 테스트 서비스 또는 jmeter와 같은 도구를 사용할 수 있습니다. 어떤 방법을 사용하든 모든 테스트에 일관성을 유지해야 합니다. jmeter를 사용하는 경우, 다른 사람들이 자체 테스트를 실행할 수 있도록 jmeter 구성을 제공해야 합니다.

부하 테스트 결과


결과를 여기에 게시할 것입니다. 각 테스트를 설명하고, 결과를 차트와 함께 보여줄 것입니다.

왜 django-axes가 아닌가

django-axes는 훌륭하지만 모든 것을 데이터베이스에 저장하며, 데이터가 많을 때 병목 현상을 일으킵니다. 인증 요청을 200-300ms까지 느리게 만들 수 있습니다. 이는 일부 사이트에서는 크지 않을 수 있지만, 다른 사이트에서는 너무 깁니다.

이 프로젝트는 django-axes의 포크로 시작했으며, 가능한 한 많은 코드를 사용하고 필요하지 않은 부분을 제거하며 조회 속도를 높여 로그인 속도를 개선했습니다.

django-defender 작동 방식

#. 누군가 로그인을 시도하면, 먼저 현재 차단되었는지 확인합니다. 사용하려는 사용자 이름과 IP 주소를 확인합니다. 차단된 경우 5단계로 이동합니다. 차단되지 않은 경우 2단계로 이동합니다.

#. 차단되지 않았으므로 로그인이 유효한지 확인합니다. 유효하면 6단계로 이동합니다. 유효하지 않으면 3단계로 이동합니다.

#. 로그인 시도가 유효하지 않습니다. 이 시도의 사용자 이름과 IP 주소를 캐시에 추가합니다. 이로 인해 한도를 초과하면 차단 목록에 추가한 후 5단계로 이동합니다. 한도를 초과하지 않으면 4단계로 이동합니다.

#. 로그인이 유효하지 않지만 한도를 초과하지 않았습니다. 다시 시도할 수 있도록 로그인 화면으로 되돌려 보냅니다.

#. 사용자가 차단되었습니다: 차단 페이지로 보내 사용자가 차단되었음을 알리고 차단이 해제될 예상 시간을 알려줍니다.

#. 로그인이 유효합니다. 실패한 로그인 시도를 재설정하고 목적지로 전달합니다.

캐시 백엔드

Defender는 실패한 시도를 저장하기 위해 캐시를 사용합니다.

캐시 키


카운터:

  • prefix:failed:ip:[ip] (count, TTL)
  • prefix:failed:username:[username] (count, TTL)

부울 (존재하면 차단됨):

  • prefix:blocked:ip:[ip] (true, TTL)
  • prefix:blocked:username:[username] (true, TTL)

django-defender 사용자 정의

django-defender를 약간 사용자 정의할 수 있는 몇 가지 옵션이 있습니다. 이들은 settings.py 파일에 정의되어야 합니다.

도구 다운로드