Django 관리자 페이지는 해커들의 주요 공격 대상 중 하나입니다. 이번 글에서는 서드파티 패키지인 django-admin-honeypot을 활용해 가짜 관리자 로그인 페이지를 구성하는 방법을 알아보겠습니다.
핵심 아이디어는 간단합니다. 기존의 /admin/ 경로에는 가짜 로그인 페이지를 배치하고, 실제 관리자 페이지는 별도의 비밀 경로로 이동시키는 것입니다. 그러면 누군가 가짜 페이지에서 올바른 비밀번호를 입력하더라도 로그인할 수 없으며, 모든 로그인 시도 내역과 시도자의 IP 주소가 데이터베이스 테이블에 기록됩니다. 이를 통해 관리자 페이지를 노리는 공격 시도를 추적하고 분석할 수 있습니다.
아래 단계를 순서대로 따라 하면 손쉽게 적용할 수 있습니다.
사전 준비: 기본 설정
먼저 프로젝트의 기본 urls.py 설정이 완료되어 있어야 하며, 생성한 앱은 settings.py의 INSTALLED_APPS에 등록되어 있어야 합니다.
1단계: 패키지 설치
pip install django-admin-honeypot
2단계: settings.py 수정
settings.py에 다음 내용을 추가합니다.
INSTALLED_APPS += ['admin_honeypot']
허니팟 기능을 사용하려면 설치된 앱 목록에 admin_honeypot을 반드시 등록해야 합니다.
3단계: 프로젝트 urls.py 수정
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', include('admin_honeypot.urls', namespace='admin_honeypot')),
path('secret/', admin.site.urls),
]여기서 핵심은 실제 관리자 페이지를 다른 엔드포인트로 옮기고, 원래 /admin/ 경로에는 가짜 관리자 페이지를 연결하는 것입니다. 예제의 secret/은 임의의 값이므로, 추측하기 어려운 본인만의 고유한 문자열로 변경하는 것이 좋습니다.
4단계: 마이그레이션 실행
python manage.py makemigrations python manage.py migrate
마이그레이션을 완료하면 모든 설정이 끝납니다. 데이터베이스에는 세션 ID 및 IP 주소와 함께 관리자 로그인 시도를 저장할 테이블이 자동으로 생성되며, 실제 관리자 페이지는 /secret/ 엔드포인트에서만 접근할 수 있습니다.
실행 결과 확인
브라우저에서 https://127.0.0.1/admin/ 에 접속하면 다음과 같은 화면을 볼 수 있습니다.

이것이 바로 가짜 허니팟 관리자 페이지입니다. 올바른 계정 정보를 입력하든 잘못된 정보를 입력하든 여기서는 절대 로그인할 수 없으며, 모든 시도는 테이블에 기록됩니다.
반면 https://127.0.0.1/secret/ 에 접속하여 관리자 계정의 아이디와 비밀번호로 로그인하면 정상적으로 관리자 페이지에 진입할 수 있습니다.

로그인 시도 기록은 Django 관리자 인터페이스의 테이블에서 확인할 수 있습니다. 시도한 IP 주소, 입력한 사용자명, 시각 등 상세한 정보가 함께 저장되어 있어, 누가 언제 어떤 경로로 관리자 페이지 침입을 시도했는지 쉽게 파악할 수 있습니다.
마무리
django-admin-honeypot은 설정이 매우 간단하면서도 관리자 페이지 보안을 크게 향상시킬 수 있는 유용한 패키지입니다. 다만 허니팟은 어디까지나 공격 시도를 탐지하고 기록하는 도구일 뿐이므로, 강력한 비밀번호 사용, 2단계 인증(2FA) 적용, HTTPS 사용 등 기본적인 보안 조치와 함께 활용하는 것을 권장합니다.