C.W.K.
Stream
Lesson 04 of 05 · published

Blacklist — 저장, lift, audit

~15 min · blacklist, auto-lift, admin

Level 0Greenhorn
0 XP0/53 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

Blacklist 가 brute force 성공 전 마지막 방어선. 필요한 거: 내구성 (재시작 살아남음), 들어올리기 가능 (잘못 blacklist 된 IP 풀어줌 — 보통 네 자신), auditable (각 entry 왜 추가됐는지 봄).

Entry release — admin 만

Auto-lift vs 수동 lift — trade

모드방법장점단점
수동필요 시 admin unblock 클릭loop 에 사람 강제; 패턴 알아챔자가 lockout 시 lockout 머신에서 unblock 못 함
시간 기반 auto-lift예: 24시간 후 expireself-healing; 영원히 자가 lockout X지속적 공격자가 24h 기다리고 retry
Hybrid"exceeded_retry" 1h 후 auto-lift; "honeypot" 영원히둘 다 best코드 더 (가치 있음)

Code

Schema (Track 5 에도)·sql
CREATE TABLE security_blacklist (
  ip          TEXT PRIMARY KEY,
  reason      TEXT,
  blocked_at  INTEGER NOT NULL
);
Admin 전용 unblock 엔드포인트·python
@app.post("/admin/security/unblock")
async def unblock(request: Request, ip: str = Form(...)):
    require_admin(request)
    db.execute("DELETE FROM security_blacklist WHERE ip = ?", (ip,))
    db.execute("DELETE FROM security_attempts  WHERE ip = ?", (ip,))
    db.commit()
    return RedirectResponse("/admin/security", status_code=302)
Hybrid auto-lift sweep·python
RETRY_BLOCK_TTL = 3600   # 1 hour

def auto_lift_blacklist():
    cutoff = now() - RETRY_BLOCK_TTL
    db.execute("""
      DELETE FROM security_blacklist
      WHERE reason = 'exceeded_retry' AND blocked_at < ?
    """, (cutoff,))
    db.commit()

# 앱 시작 시; 또는 주기적 task; 또는 로그인 시도 전마다

External links

Exercise

Unblock 엔드포인트와 auto_lift_blacklist 함수 추가. FastAPI startup 이벤트나 background task 로 auto_lift_blacklist 스케줄. 테스트: lockout trigger, 1시간 기다림 (또는 일시적으로 RETRY_BLOCK_TTL=10), entry 사라짐 확인. Honeypot entry 는 남아야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.