# QA Report - Redmine #3823 (dev)

- Generated: 2026-07-29T17:08:08+09:00
- Redmine: https://itsm.bix.bz/issues/3823
- QA Redmine: https://itsm.bix.bz/issues/3905
- Subject: Fail2ban 정책 설정·차단·화이트리스트 검증
- Workflow Status: 종료
- Status: PASS
- Result JSON: artifacts/result-summary.json
- Roles: ADMIN
- Route Candidates: not recorded

## Scope

개발계 기본 ADMIN 정책 관리 권한과 기본 BO/CO/VE 로그인 계정을 사용해 Fail2ban 정책 저장·수정, 로그인 실패 및 Account Spraying 차단, 화이트리스트 범위, 기간형/영구 BAN, 수동 차단 해제를 자동 검증하고 원래 설정을 복원한다.

## Checklist

1. 저장 후 설정값 정상 표시
2. 정책 수정 가능
3. 로그인 실패 정책 ON/OFF 동작
4. Account Spraying 정책 ON/OFF 동작
5. 로그인 실패 횟수 초과 시 차단
6. 서로 다른 계정 수 초과 시 차단
7. 동일 계정 반복 실패 중복 집계 제외
8. tenantId가 달라도 동일 IP 기준 합산
9. 기간형 BAN 만료 후 정상 로그인
10. 영구 BAN 동작
11. 최초 BAN 시간 적용
12. 반복 BAN 시간 증가
13. 설정 회차 이후 영구 BAN
14. 예외 없음 scope에서 두 정책 적용
15. 로그인 실패 정책 whitelist 동작
16. Account Spraying whitelist 동작
17. 전체 Fail2ban whitelist 동작
18. BAN 중 올바른 비밀번호 입력 시에도 403
19. 차단 해제 후 정상 로그인

## Setup Steps

1. [required] 기존 Fail2ban 설정과 화이트리스트 백업 (admin/ADMIN / kind: state-verify / mutation: temporary / guard: QA_3823_ALLOW_FAIL2BAN_MUTATION / restore: required) - 대상 테넌트의 기존 정책과 실행 IP 화이트리스트를 백업하고 모든 테스트 종료 후 원복한다.
2. [required] Fail2ban 정책 및 BAN 상태 자동 검증 (admin/ADMIN / kind: state-verify / mutation: temporary / guard: QA_3823_ALLOW_FAIL2BAN_MUTATION / restore: required) - 실제 실패 로그인 요청으로 기간형·반복·영구 BAN과 화이트리스트 범위를 검증한다.

## Source Text

송인준님의 QA 요청입니다. 부서 설정 관리에서 Fail2ban 로그인 실패/Account Spraying 정책과 화이트리스트 범위를 설정하고, 실제 로그인 실패를 통해 기간형·반복·영구 BAN, 권한별 403, 차단 해제 흐름을 검증합니다.

## Execution Summary

- Passed: 19
- Failed: 0
- Skipped: 0
- Blocked: 0
- Flaky: 0
- Duration: 224843ms


## 한눈에 보는 결과

| 확인한 항목 | 계정 | 화면 | 수행한 동작 | 결과 | 증거 자료 |
|---|---|---|---|---|---|
| 저장 후 설정값 정상 표시 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [스크린샷 1](artifacts/screenshots/01-부서-설정-관리-ADMIN-saved-policy.png)<br>[실행 기록 1](artifacts/logs/01-부서-설정-관리-ADMIN-saved-policy.md) |
| 정책 수정 가능 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/02-부서-설정-관리-ADMIN-policy-edit.md) |
| 로그인 실패 정책 ON/OFF 동작 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/03-부서-설정-관리-ADMIN-login-policy-off.md) |
| Account Spraying 정책 ON/OFF 동작 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/04-부서-설정-관리-ADMIN-spray-policy-off.md) |
| 로그인 실패 횟수 초과 시 차단 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/05-차단-IP-관리-ADMIN-login-threshold-ban.md) |
| BAN 중 올바른 비밀번호 입력 시에도 403 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/06-비스킷링크-비스킷페이-로그인-ADMIN-correct-password-during-ban.md) |
| 기간형 BAN 만료 후 정상 로그인 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/07-비스킷페이-로그인-ADMIN-temporary-ban-expired.md) |
| 동일 계정 반복 실패 중복 집계 제외 | ADMIN | [ADMIN] role | ADMIN 계정으로 새로고침과 재조회 전후 거래 ID 출현 횟수를 비교 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/08-차단-IP-관리-ADMIN-same-account-deduplicated.md) |
| 서로 다른 계정 수 초과 시 차단 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/09-차단-IP-관리-ADMIN-distinct-account-ban.md) |
| tenantId가 달라도 동일 IP 기준 합산 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/10-차단-IP-관리-ADMIN-cross-tenant-aggregate.md) |
| 최초 BAN 시간 적용 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/11-차단-IP-관리-ADMIN-first-ban-duration.md) |
| 반복 BAN 시간 증가 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/12-차단-IP-관리-ADMIN-ban-duration-multiplier.md) |
| 설정 회차 이후 영구 BAN | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/13-차단-IP-관리-ADMIN-permanent-stage.md) |
| 영구 BAN 동작 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/14-비스킷페이-로그인-ADMIN-permanent-ban.md) |
| 예외 없음 scope에서 두 정책 적용 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/15-차단-IP-관리-ADMIN-whitelist-none.md) |
| 로그인 실패 정책 whitelist 동작 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/16-차단-IP-관리-ADMIN-whitelist-login-only.md) |
| Account Spraying whitelist 동작 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/17-차단-IP-관리-ADMIN-whitelist-spray-only.md) |
| 전체 Fail2ban whitelist 동작 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [실행 기록 1](artifacts/logs/18-차단-IP-관리-ADMIN-whitelist-all.md) |
| 차단 해제 후 정상 로그인 | ADMIN | [ADMIN] role | ADMIN 계정으로 [ADMIN] role 항목을 확인 | 기대한 동작과 일치했습니다. | [스크린샷 1](artifacts/screenshots/02-차단-IP-관리-ADMIN-unban-completed.png)<br>[실행 기록 1](artifacts/logs/19-차단-IP-관리-ADMIN-unban-completed.md) |

## 실패 또는 확인 불가 상세

- 실패 또는 확인 불가 항목이 없습니다.

## 수동 재현 필요

- 수동 재현이 필요한 항목이 없습니다.

## 스크린샷

- ADMIN / [ADMIN] role / 저장 후 설정값 정상 표시: [스크린샷 1](artifacts/screenshots/01-부서-설정-관리-ADMIN-saved-policy.png)
- ADMIN / [ADMIN] role / 차단 해제 후 정상 로그인: [스크린샷 1](artifacts/screenshots/02-차단-IP-관리-ADMIN-unban-completed.png)

## 화면 재현 기록

- 화면 재현 기록 자료가 없습니다.
- 화면 재현 기록은 기본적으로 실패/확인불가 항목에 한해 포함합니다. PASS 항목 trace까지 필요하면 `QA_PUBLISH_TRACE=1 npm run qa:report -- --issue <id> --env <env>`로 내부 제출용 산출물을 생성합니다.

## 실행 기록

- ADMIN / [ADMIN] role / 저장 후 설정값 정상 표시: [실행 기록 1](artifacts/logs/01-부서-설정-관리-ADMIN-saved-policy.md)
- ADMIN / [ADMIN] role / 정책 수정 가능: [실행 기록 1](artifacts/logs/02-부서-설정-관리-ADMIN-policy-edit.md)
- ADMIN / [ADMIN] role / 로그인 실패 정책 ON/OFF 동작: [실행 기록 1](artifacts/logs/03-부서-설정-관리-ADMIN-login-policy-off.md)
- ADMIN / [ADMIN] role / Account Spraying 정책 ON/OFF 동작: [실행 기록 1](artifacts/logs/04-부서-설정-관리-ADMIN-spray-policy-off.md)
- ADMIN / [ADMIN] role / 로그인 실패 횟수 초과 시 차단: [실행 기록 1](artifacts/logs/05-차단-IP-관리-ADMIN-login-threshold-ban.md)
- ADMIN / [ADMIN] role / BAN 중 올바른 비밀번호 입력 시에도 403: [실행 기록 1](artifacts/logs/06-비스킷링크-비스킷페이-로그인-ADMIN-correct-password-during-ban.md)
- ADMIN / [ADMIN] role / 기간형 BAN 만료 후 정상 로그인: [실행 기록 1](artifacts/logs/07-비스킷페이-로그인-ADMIN-temporary-ban-expired.md)
- ADMIN / [ADMIN] role / 동일 계정 반복 실패 중복 집계 제외: [실행 기록 1](artifacts/logs/08-차단-IP-관리-ADMIN-same-account-deduplicated.md)
- ADMIN / [ADMIN] role / 서로 다른 계정 수 초과 시 차단: [실행 기록 1](artifacts/logs/09-차단-IP-관리-ADMIN-distinct-account-ban.md)
- ADMIN / [ADMIN] role / tenantId가 달라도 동일 IP 기준 합산: [실행 기록 1](artifacts/logs/10-차단-IP-관리-ADMIN-cross-tenant-aggregate.md)
- ADMIN / [ADMIN] role / 최초 BAN 시간 적용: [실행 기록 1](artifacts/logs/11-차단-IP-관리-ADMIN-first-ban-duration.md)
- ADMIN / [ADMIN] role / 반복 BAN 시간 증가: [실행 기록 1](artifacts/logs/12-차단-IP-관리-ADMIN-ban-duration-multiplier.md)
- ADMIN / [ADMIN] role / 설정 회차 이후 영구 BAN: [실행 기록 1](artifacts/logs/13-차단-IP-관리-ADMIN-permanent-stage.md)
- ADMIN / [ADMIN] role / 영구 BAN 동작: [실행 기록 1](artifacts/logs/14-비스킷페이-로그인-ADMIN-permanent-ban.md)
- ADMIN / [ADMIN] role / 예외 없음 scope에서 두 정책 적용: [실행 기록 1](artifacts/logs/15-차단-IP-관리-ADMIN-whitelist-none.md)
- ADMIN / [ADMIN] role / 로그인 실패 정책 whitelist 동작: [실행 기록 1](artifacts/logs/16-차단-IP-관리-ADMIN-whitelist-login-only.md)
- ADMIN / [ADMIN] role / Account Spraying whitelist 동작: [실행 기록 1](artifacts/logs/17-차단-IP-관리-ADMIN-whitelist-spray-only.md)
- ADMIN / [ADMIN] role / 전체 Fail2ban whitelist 동작: [실행 기록 1](artifacts/logs/18-차단-IP-관리-ADMIN-whitelist-all.md)
- ADMIN / [ADMIN] role / 차단 해제 후 정상 로그인: [실행 기록 1](artifacts/logs/19-차단-IP-관리-ADMIN-unban-completed.md)

## 자동화 원본 결과

| Scenario | Status | Duration | Screenshot | 화면 재현 기록 | Log | Error |
|---|---:|---:|---|---|---|---|
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 저장 후 설정값 정상 표시 | PASS | 6875ms | [스크린샷 1](artifacts/screenshots/01-부서-설정-관리-ADMIN-saved-policy.png) |  | [로그 1](artifacts/logs/01-부서-설정-관리-ADMIN-saved-policy.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 정책 수정 가능 | PASS | 1241ms |  |  | [로그 1](artifacts/logs/02-부서-설정-관리-ADMIN-policy-edit.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 로그인 실패 정책 ON/OFF 동작 | PASS | 6648ms |  |  | [로그 1](artifacts/logs/03-부서-설정-관리-ADMIN-login-policy-off.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / Account Spraying 정책 ON/OFF 동작 | PASS | 3973ms |  |  | [로그 1](artifacts/logs/04-부서-설정-관리-ADMIN-spray-policy-off.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 로그인 실패 횟수 초과 시 차단 | PASS | 11003ms |  |  | [로그 1](artifacts/logs/05-차단-IP-관리-ADMIN-login-threshold-ban.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / BAN 중 올바른 비밀번호 입력 시에도 403 | PASS | 187ms |  |  | [로그 1](artifacts/logs/06-비스킷링크-비스킷페이-로그인-ADMIN-correct-password-during-ban.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 기간형 BAN 만료 후 정상 로그인 | PASS | 58923ms |  |  | [로그 1](artifacts/logs/07-비스킷페이-로그인-ADMIN-temporary-ban-expired.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 동일 계정 반복 실패 중복 집계 제외 | PASS | 7295ms |  |  | [로그 1](artifacts/logs/08-차단-IP-관리-ADMIN-same-account-deduplicated.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 서로 다른 계정 수 초과 시 차단 | PASS | 8950ms |  |  | [로그 1](artifacts/logs/09-차단-IP-관리-ADMIN-distinct-account-ban.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / tenantId가 달라도 동일 IP 기준 합산 | PASS | 3805ms |  |  | [로그 1](artifacts/logs/10-차단-IP-관리-ADMIN-cross-tenant-aggregate.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 최초 BAN 시간 적용 | PASS | 3890ms |  |  | [로그 1](artifacts/logs/11-차단-IP-관리-ADMIN-first-ban-duration.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 반복 BAN 시간 증가 | PASS | 3ms |  |  | [로그 1](artifacts/logs/12-차단-IP-관리-ADMIN-ban-duration-multiplier.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 설정 회차 이후 영구 BAN | PASS | 33042ms |  |  | [로그 1](artifacts/logs/13-차단-IP-관리-ADMIN-permanent-stage.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 영구 BAN 동작 | PASS | 57ms |  |  | [로그 1](artifacts/logs/14-비스킷페이-로그인-ADMIN-permanent-ban.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 예외 없음 scope에서 두 정책 적용 | PASS | 16980ms |  |  | [로그 1](artifacts/logs/15-차단-IP-관리-ADMIN-whitelist-none.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 로그인 실패 정책 whitelist 동작 | PASS | 12371ms |  |  | [로그 1](artifacts/logs/16-차단-IP-관리-ADMIN-whitelist-login-only.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / Account Spraying whitelist 동작 | PASS | 15651ms |  |  | [로그 1](artifacts/logs/17-차단-IP-관리-ADMIN-whitelist-spray-only.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 전체 Fail2ban whitelist 동작 | PASS | 5249ms |  |  | [로그 1](artifacts/logs/18-차단-IP-관리-ADMIN-whitelist-all.md) |  |
| 3823/dev/fail2ban-policy.spec.ts / [3823][dev] Fail2ban 정책 설정·차단·화이트리스트 검증 / [ADMIN] role / 차단 해제 후 정상 로그인 | PASS | 21105ms | [스크린샷 1](artifacts/screenshots/02-차단-IP-관리-ADMIN-unban-completed.png) |  | [로그 1](artifacts/logs/19-차단-IP-관리-ADMIN-unban-completed.md) |  |

## Notes

- Playwright 실행 결과를 기준으로 작성되었습니다.
- QA PR merge, 공개 보고서 확인, QA subissue 종료 상태 갱신이 반영되었습니다.
