Files
obsidian/services/netbis.md
kappa ddf403ef99 sandbox-tokyo → zlambda 통일
호스트네임/Tailscale 노드 이름/git 레포 모두 zlambda로 통일하면서 obsidian 정리.

변경:
- infra/sandbox-tokyo-nixos.md → infra/zlambda.md (git mv, alias frontmatter 추가)
- zlambda.md 내용 갱신: 접속 명령, configuration 위치, 커널/sysctl 튜닝, 후속 변경 메모
- infra/infra-hosts.md 표: sandbox-tokyo 행을 zlambda로 갱신, 위키링크 [[zlambda]]
- infra/vault.md SSH CA 등록 호스트 목록: [[zlambda]] 위키링크
- services/netbis.md: title/aliases/호스트명/SSH 명령 갱신
- dev/nixos-manual/_index.md: 관련 문서 링크 [[zlambda]]로 갱신

postgresql-ha.md, crowdsec-safeline.md, services/searxng.md의 sandbox-tokyo 언급은
역사적 기록(과거 운영 상태)이라 그대로 유지.
2026-04-08 16:45:53 +09:00

10 KiB

title, updated, aliases, tags
title updated aliases tags
Netbis 예비서버 (zlambda) 2026-04-08 NixOS 전환으로 APISIX 미가동
netbis-sandbox-tokyo
netbis
apisix
dr
cloudflare
nixos

개요

Netbis 팀 도메인의 예비(DR) 리버스 프록시 서버. 평소에는 트래픽을 받지 않으며, 유사시 Cloudflare DNS를 수동 전환하여 활성화.

기존 Ironclad 인프라(apisix, crowdsec-safeline)와는 별도 구성.

2026-04-08 상태: 호스트 OS를 Debian 12 → NixOS 25.05로 교체하면서 APISIX/etcd 컨테이너가 모두 제거됨. 호스트 이름도 sandbox-tokyozlambda로 통일. 현재 베이스 시스템(sshd + tailscaled + docker)만 떠 있고 DR 역할은 미가동. 재가동하려면 docker compose로 APISIX/etcd 재배포 필요. NixOS configuration은 Gitea zlambda flake에서 관리.

서버 정보

항목
호스트명 zlambda (구 sandbox-tokyo, 2026-04-08 변경)
Linode 라벨 zlambda (id 47271589)
공인 IP 139.162.71.52
Tailscale IP 100.78.51.18 (2026-04-08 변경, 이전 100.79.87.48)
위치 Linode Tokyo (ap-northeast, lish-tokyo2)
OS NixOS 25.05 (Warbler), x86_64-linux
Linode kernel linode/direct-disk (NixOS 자체 GRUB)
디스크 sda 49.5G ext4 (/), sdb 510M swap
SSH ssh root@zlambda (또는 alias ssh root@sandbox-tokyo, 공인 IP ssh root@139.162.71.52)
LISH 사용자 netbis@lish-tokyo2.linode.com (kaffa-Macmini SSH key)

APISIX 구성

Docker Compose (/opt/apisix/)로 배포.

컨테이너 이미지 포트
apisix apache/apisix:3.15.0-debian 80(→9080), 443(→9443), 9180
apisix-etcd gcr.io/etcd-development/etcd:v3.5.11 2379 (내부)
  • Admin API: http://127.0.0.1:9180 (0.0.0.0/0 허용)
  • Admin Key: edd1c9f034335f136f87ad84b625c8f1
  • APISIX 컨테이너 ulimits: nofile 655360

global_rules

  • real-ip — source: http_cf_connecting_ip, trusted: Cloudflare IP 대역
  • http-logger → CrowdSec http://10.253.100.240:8085/apisix-logs (auth: apisix-crowdsec-log-2024)

커널 튜닝

/etc/sysctl.d/99-apisix-tuning.conf 적용 완료:

  • TCP BBR, conntrack 262144, fin_timeout 10s, keepalive 300s
  • syncookies, netdev_backlog 16384, port range 1024-65535
  • fs.file-max 1048576

Cloudflare 계정 (Netbis)

항목
이메일 netbis@netbis.io
Account ID 8fcf3c7876332aba33e974cbbfdad951
Global API Key sandbox-tokyo /root/.config/cloudflare/cf-global-api-key
Linode API Key e7cd3103ca76b865df2533b32eee5c8d7799c963fb29848274245dee142d21b0
API Token (바운서용) crowdsec-cf-bouncer-netbis (Workers, Turnstile, WAF, Zone 권한)
Workers 플랜 Paid ($5/월, 1000만 요청 포함)

Zone 목록

Zone Zone ID 플랜 현재 오리진
fall-vip.com 662312b0ca619d1d5c8f4c112150d749 Pro 42.125.196.86
fall-mvp.com 6c171579912a271c0fc89c8187493b0f Free 139.162.73.240
fall-vip7.com a8832b9d3b546f96505abeadea4750d1 Free 139.162.73.240
psd777.com a14533c2937b19e5b7ed19cbecd58679 Pro 139.162.114.197
rss-555.com 6d4b084940520c1f820927e5d8ade2c6 Pro 139.162.73.17
rss-7790.com d9db9e50e202339326498baa340a9d16 Pro 139.162.73.17

모든 zone은 Cloudflare Flexible SSL, 프록시(오렌지 구름) 사용.

라우트 및 업스트림

라우트 ID 호스트 업스트림 (오리진 IP)
fall-vip-com fall-vip.com 42.125.196.86
fall-mvp-com fall-mvp.com 139.162.73.240
fall-vip7-com fall-vip7.com 139.162.73.240
psd777-com psd777.com 139.162.114.197
rss-555-com rss-555.com 139.162.73.17
rss-7790-com rss-7790.com 139.162.73.17
ev-fall-vip-com ev.fall-vip.com 42.125.196.115
ev-fall-vip7-com ev.fall-vip7.com 42.125.196.115
ev-psd777-com ev.psd777.com 42.125.196.115
vi-rss-555-com vi.rss-555.com 42.125.196.115
vi-rss-7790-com vi.rss-7790.com 42.125.196.115

모든 라우트에 proxy-rewrite (Host 전달) 적용.

SSL 인증서

acme.sh + Cloudflare DNS-01 챌린지로 발급. 크론 자동 갱신.

도메인 SAN 발급기관 만료
fall-vip.com *.fall-vip.com ZeroSSL 2026-07-02
fall-mvp.com *.fall-mvp.com ZeroSSL 2026-07-02
fall-vip7.com *.fall-vip7.com ZeroSSL 2026-07-02
psd777.com *.psd777.com ZeroSSL 2026-07-02
rss-555.com *.rss-555.com ZeroSSL 2026-07-02
rss-7790.com *.rss-7790.com ZeroSSL 2026-07-02

인증서 경로: /root/.acme.sh/{domain}_ecc/

CrowdSec 연동

http-logger

APISIX global_rule로 모든 요청 로그를 CrowdSec(jp1)로 전송.

  • 엔드포인트: http://10.253.100.240:8085/apisix-logs
  • 인증: auth_header: apisix-crowdsec-log-2024
  • 파서: custom/apisix-json-logs (기존 파서 공유)

Cloudflare Worker Bouncer (netbis-cf)

항목
컨테이너 jp1 incus netbis-cf-bouncer (10.253.103.33)
바운서 이름 netbis-cf (CrowdSec LAPI 등록)
LAPI 키 FR/PbHA110b6+m/gkByp9itNOaQMdbM8BwKR3DerCTI
설정 파일 /etc/crowdsec/bouncers/crowdsec-cloudflare-worker-bouncer.yaml
동작 CrowdSec ban → Cloudflare Worker + Turnstile captcha
적용 범위 Netbis 계정 전체 6개 zone

기존 cs-cf-worker-bouncer (Kappa 계정용)와 별도 컨테이너로 분리 운영.

Cloudflare 보안 설정

Rate Limiting (2026-04-05 변경: 600→120/분)

Zone 제한 액션 차단시간
fall-vip.com 120/분 managed_challenge 60초
psd777.com 120/분 managed_challenge 60초
rss-555.com 120/분 managed_challenge 60초
rss-7790.com 120/분 managed_challenge 60초
fall-mvp.com 20/10초 (~120/분) block (Free 제한) 10초
fall-vip7.com 20/10초 (~120/분) block (Free 제한) 10초

정상 사용자 IP당 ~10 req/분 기준, 12배 여유. 공격 IP(230+/분)는 확실히 차단.

Super Bot Fight Mode (2026-04-03 설정)

Pro zone 4개(fall-vip.com, psd777.com, rss-555.com, rss-7790.com)에 적용:

  • Definitely automated → managed_challenge
  • Verified bots → allow
  • Static resource protection → true

Free zone(fall-mvp.com, fall-vip7.com)은 미적용.

DDoS Protection

기본 활성화 상태 (Cloudflare managed ruleset). 감도는 기본값(Medium).

공격 이력

2026-03-31 ~ 04-01 대규모 봇 공격

도메인 3/31 요청 4/1 요청 출처
rss-555.com 3050만 (threats 1700만) 3000만 (threats 2300만) JP 99%
fall-vip.com 2560만 (threats 1160만) 1540만 (threats 1000만) JP 99%
fall-mvp.com 정상 738만 (threats 340만) JP
  • 일본 IP에서 집중된 L7 DDoS 공격
  • Cloudflare가 threat으로 분류했으나 완전 차단하지 않음
  • 정상 트래픽 일 130~180만 대비 30배 이상 폭주
  • 대응: Rate Limiting + SBFM 사후 설정

정상 트래픽 기준 (30일 평균)

일 평균 약 140만 요청. 월 환산 약 4200만.

로그 분석

사용 가능

  • CF GraphQL Analytics API — 시간별/국가별/threat 데이터 조회 (보관 30일)
  • APISIX http-logger → CrowdSec — 오리진 도달 요청 분석

Logpush (Enterprise 전용, 현재 불가)

Cloudflare Logpush(HTTP 요청 로그를 R2 등으로 전송)는 Enterprise 플랜 전용. Pro 플랜에서는 사용 불가.

Workers Logpush (준비만 완료)

Workers Paid에 포함. CrowdSec Worker Bouncer 요청 로그를 R2에 저장 가능.

  • R2 버킷 cf-logs 생성 완료 (APAC region)
  • R2 API Token: r2-logpush-cf-logs (id: 6450de0b6fc95f6d47affa8be3804a75)
  • 비용: 월 2000만 건 포함, 초과분 $0.60/100만 건
  • 정상 트래픽 기준 약 $13/월 추가 발생 예상
  • 공격 시 비용 폭증 가능 → 필요 시에만 활성화 권장, 현재 미활성

Workers 비용 예상

시나리오 월 요청 Workers 비용
정상 ~4200만 ~$14.6
폭주 포함 ~1.6억 ~$50
Rate Limit 적용 후 정상 ~4200만 ~$14.6
Rate Limit 적용 후 폭주 대폭 감소 예상 ~$15-20

NPM 서버 (오리진)

호스트명 IP 비고
NPM-1 172.104.100.11
NPM-2 139.162.114.197 SSH 비밀번호 인증 → 키 등록 완료
NPM-3 139.162.73.17 rss-555.com, rss-7790.com 오리진
NPM-4 139.162.73.240 fall-vip.com, fall-mvp.com, fall-vip7.com 오리진
NPM-5 172.104.70.137
npm-6 172.105.226.218

6대 모두 커널 튜닝 완료 (/etc/sysctl.d/99-proxy-tuning.conf):

  • TCP BBR, conntrack 262144, fin_timeout 10s, keepalive 300s, port range 1024-65535
  • limits.conf nofile 655360 (Docker 컨테이너 반영은 compose ulimits 추가 필요, 서비스 중이라 미적용)

NPM-4 추가 튜닝 (2026-04-05)

  • 커널: tcp_tw_reuse=1, rmem_max/wmem_max 16MB, tcp_max_tw_buckets 131072, tcp_max_orphans 32768
  • Nginx: worker_connections 10240, proxy_buffers 16 32k, keepalive_requests 1000, open_file_cache
  • real_ip_header: X-Real-IP → CF-Connecting-IP (컨테이너 내 sed, 재시작 시 초기화 주의)

유사시 전환 절차

  1. Cloudflare DNS에서 각 도메인 A 레코드를 139.162.71.52로 변경 (수동)
  2. APISIX 라우트/SSL 사전 등록 완료 상태이므로 즉시 서비스 가능
  3. 전환 후 CrowdSec 로그 수신 및 바운서 차단 자동 동작 확인

이전에 운영했던 서비스 (제거됨)

sandbox-tokyo에서 기존 운영하던 아래 서비스는 2026-04-03 중지, 2026-04-08 NixOS 전환으로 완전 제거:

  • APISIX 3.15.0 + apisix-etcd (Docker Compose)
  • vault-prod (HashiCorp Vault)
  • wg-easy (WireGuard VPN)
  • nginx-tcp-proxy
  • socks5-v4 (microsocks) — searxng가 사용 중이었음
  • tlsproxy
  • Caddy (systemd, disabled)

재구성 시 참고: NixOS 위에 Docker는 이미 설치돼 있으므로 docker compose 디렉토리만 다시 만들면 됨.