Files
ttipo 93147b88b7 feat(docker): 대용량 첨부 — ClamAV 검사기 · 공개 내려받기 호스트 · 받기 동시 연결 상한
- ClamAV 1.4.6 LTS 를 둘로 나눴다: clamd 는 백엔드와만 닿는 internal 네트워크(바깥 길 없음 · 서명 볼륨 읽기 전용),
  freshclam 은 자기 바깥 길에만. 비-root · cap_drop ALL. 운영은 늘 뜨고 개발은 profile clamav.
  clamd.conf 는 한 파일 한도 2047M 까지 끝까지 검사하고 암호 · 한도 초과를 판정으로 알린다(실측표는 mail/README).
  검사 중에 죽으면 남던 임시 파일을 띄울 때 지운다.
- nginx 를 포털 · 공개 내려받기(files.) 두 server 로 가른다(SHARE_PUBLIC_URL 과 CORS_ORIGIN 의 호스트 비교 — 같으면 포털이 함께 연다).
  조각 PUT 17m, 받기는 버퍼링 · 압축 끔 + X-Accel-Buffering 넘김 + 머리글 버퍼 16k,
  limit_conn 은 X-Forwarded-For 마지막 칸으로 IP 마다 공개 10 · 앱 안 30, 전체 공개 400 · 앱 안 200.
  받기 location 은 /api/ 블록 안의 대소문자를 가리지 않는 정규식이다(리뷰 — /FILES/ 같은 변형이 상한을 비켜 갔다).
  접근 로그는 경로 모양과 43자 토큰 모양으로 토큰을 가린다.
- 파일은 named volume <PROJECT_NAME>_files(개발도 — builder 단계가 /app/files 를 node 소유로 만든다), 백업하지 않는다.
- CI infra 잡: nginx 두 꼴 · 받기 경로 변형 시험(가짜 백엔드) · clamconf(-n 없이 기본값까지) · 틀린 SHARE_PUBLIC_URL 거부.
- mail/README: 악성 검사 · 공개 호스트 · NPM 칸(Advanced 다섯 줄) · 메모리 예산 · 문제 해결.

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

28 lines
2.0 KiB
Plaintext

# ==========================================
# freshclam — ClamAV 서명(바이러스 DB) 갱신 · docker-compose.yml 의 clamav-updater 가 읽는다 (mail/README.md "악성 검사 (ClamAV)")
#
# 서명을 받아 볼륨 <PROJECT_NAME>_clamav-db 에 쓴다. 검사기(clamd — compose 의 clamav)는 같은 볼륨을 읽기 전용으로 붙이고
# 바뀐 서명을 스스로 다시 읽는다(clamd.conf 의 SelfCheck) — 두 컨테이너는 네트워크로 잇지 않는다(NotifyClamd 를 쓰지 않는다).
# 바깥(database.clamav.net — HTTPS · DNS)에 나가는 것은 이 컨테이너뿐이다. 바깥에서 온 파일을 여는 검사기는 바깥 길이 없다.
#
# 이미지의 기본 설정을 이 파일로 통째로 바꾼다. compose 가 처음부터 비-root(이미지의 clamav 사용자 100:101)로 띄우므로
# 이 파일은 그 사용자가 읽을 수 있어야 한다(644 — 저장소를 umask 077 로 클론하지 않는다).
# 바꾼 뒤에는 docker compose … up -d --force-recreate clamav-updater (설정 파일만 바뀌면 compose 가 다시 만들지 않는다)
# ==========================================
DatabaseDirectory /var/lib/clamav
# 로그는 표준 출력으로만(docker logs — compose 가 --stdout 을 준다). 파일에 남기지 않는다
LogTime yes
Foreground yes
# 서명을 받는 곳 — ClamAV 공식 CDN. 새 판이 있는지는 DNS(TXT current.cvd.clamav.net)로 먼저 묻고, 있을 때만 받는다
DatabaseMirror database.clamav.net
# 하루 12번(2시간마다) 묻는다 — ClamAV 기본값. CDN 은 1시간에 한 번보다 자주 묻지 말라고 한다(넘으면 잠시 막는다 — 문제 해결 "서명 갱신 실패")
Checks 12
# 바뀐 만큼만 받는다(cdiff) — 서명 전체를 매번 받지 않게
ScriptedUpdates yes
# 받은 서명을 바꿔 넣기 전에 따로 읽어 본다 — 깨진 서명이 검사기를 멈추지 않게. 읽는 동안 메모리를 잠시 더 쓴다(compose 의 한도)
TestDatabases yes