Files
arasystem/frontend/nginx-share-api-closed.conf
ttipo d1ef0da488 feat(docker): 12단계 계정 보안 — 엔진 웹훅 · /api/internal 닫기 · 요청 대상 400
메일 프로그램(IMAP · SMTP) 로그인 기록을 엔진 웹훅으로 받는다.
- 루트 env MAIL_WEBHOOK_SECRET(setup · backend 공용, 운영 필수)과 backend 의 APP_NETWORK_SUBNET
- setup 이 엔진 웹훅을 맞추고(표시 머리글 — 소금 + 키 지문) 서명한 빈 묶음으로 받는 곳을 확인한다
  키를 바꾼 실행 · 게이트웨이 OTP · 테스트 직원의 402 를 따로 다룬다
- nginx 두 server 가 /api/internal/ 을 닫고, 요청 대상의 날 \(경로) · # · 0x80 이상은 location 전에 400
  Express 가 이런 대상을 다시 읽어 닫은 경로(/api/internal · /api/health)가 백엔드에서 열렸다(2026-10-31 리뷰)
- CI "닫는 경로 시험"(두 server × 세 경로의 변형) · 지시어만 세는 정적 검사
- mail/README: 웹훅 · 12단계 전부터 운영 중인 서버를 올리는 차례 · 휴대폰을 잃은 직원(관리 API 명령)
엔진 DNS 가 Custom(운영)이어도 웹훅은 backend 를 푼다 — 메일 컨테이너가 도커 DNS 를 쓴다(개발에서 확인).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 17:45:23 +09:00

17 lines
1.3 KiB
Plaintext

# ==========================================
# 포털에서는 대용량 첨부의 공개 API 를 열지 않는다 — 공개 호스트(SHARE_PUBLIC_URL)를 따로 둘 때 (11단계 — 계약 4절 "공개 호스트")
#
# 포털 server 의 location ^~ /api/ 블록 **안에** 넣는다(nginx.conf — nginx-env.envsh 의 NGINX_PORTAL_SHARE=closed).
# 템플릿이 아니다(/etc/nginx/snippets/share-api-closed.conf). 없는 경로와 같은 404 RES_001(JSON — @api_not_found) —
# 백엔드도 같은 판정으로 막는다(두 겹 — modules/file-sharing/public-host.ts). 본문 한도(1m)를 넘는 요청도 JSON 413 FILE_002 다.
# 대소문자를 가리지 않는다(~*) — /api/Public-Links/… 도 닫는다(백엔드 라우팅은 대소문자를 가리지 않는다 — nginx.conf 머리말)
# [/\x5c] — %5C(인코딩한 역슬래시 — nginx 가 \ 로 풀어 고른다)도 닫는다. 날 \(경로) · # · 0x80 이상 바이트는 server 단계에서 400 이다
# (nginx.conf 의 $request_target_rejected — 백엔드의 url.parse 되읽기가 \ 를 / 로 바꿔 이 닫기를 비켜 갔다, 2026-10-31 리뷰)
# ==========================================
location ~* ^/api/public-links(?:[/\x5c]|$) {
error_page 404 @api_not_found;
error_page 413 @api_payload_too_large;
return 404;
}