84 lines
6.2 KiB
Markdown
84 lines
6.2 KiB
Markdown
---
|
|
title: zlambda
|
|
updated: 2026-04-13
|
|
tags: [infra, host, nixos, tokyo, linode]
|
|
type: host
|
|
host_kind: vm
|
|
location: tokyo
|
|
provider: linode
|
|
status: active
|
|
ssh_host: zlambda
|
|
public_ip: 139.162.71.52
|
|
tailscale_ip: 100.78.51.18
|
|
lan_ip: null
|
|
os: NixOS 25.05
|
|
cpu_cores: 1
|
|
ram_gb: 2
|
|
k3s_role: null
|
|
critical: false
|
|
monthly_cost_usd: 5
|
|
aliases: [sandbox-tokyo]
|
|
---
|
|
|
|
## 역할
|
|
|
|
NixOS 베이스 호스트 (도쿄, Linode nano). 이전 `sandbox-tokyo` 장비를 2026-04-08에 Debian → NixOS로 전환. 경량 docker + tailscale + sshd.
|
|
|
|
## 이전된/제거된 구성
|
|
|
|
- APISIX + etcd (Netbis DR) — 제거
|
|
- microsocks — 제거
|
|
- tlsproxy, vault-prod, wg-easy — 제거
|
|
|
|
## 현재 구성
|
|
|
|
- sshd, tailscale, docker
|
|
- Linode 프로필: kernel `linode/direct-disk`
|
|
- BBR + fq + sysctl 튜닝
|
|
- NixOS configuration: Gitea [kaffa/nixos-infra](https://gitea.inouter.com/kaffa/nixos-infra)
|
|
- kaffa-macmini: `~/nixos-infra/`
|
|
- zlambda: `/root/nixos-infra/`
|
|
|
|
### Docker 컨테이너
|
|
|
|
| 컨테이너 | 역할 | 비고 |
|
|
|----------|------|------|
|
|
| apisix / apisix-etcd | APISIX (Netbis 관련) | host network |
|
|
| vector-relay | 로그 릴레이 | |
|
|
| tlsproxy | SearXNG Google 우회 (Chrome TLS fingerprint), `:8443` | [[../../services/searxng]] |
|
|
| nginx (stream) | inbest SFTP 포워딩 `:2201` → 10.100.1.158:22. **2026-06-11 socat→nginx stream 교체** | 아래 참조 |
|
|
|
|
### inbest SFTP 포트포워딩 (2026-06-10 구성, 2026-06-11 nginx 교체)
|
|
|
|
- **공개 엔드포인트: `139.162.71.52:2201`** (SFTP)
|
|
- 경로: `외부 → zlambda 공인IP:2201 → (tailscale 100.78.51.18 → 10.100.1.158) → kr2 inbest 프로젝트 sftp 컨테이너:22`
|
|
- 릴레이: **NixOS `services.nginx` stream TCP proxy** (nixos-infra `inbest-sftp-fwd.nix`, `streamConfig` upstream → 10.100.1.158:22, `proxy_timeout 1h`). flake 빌드: `nixos-rebuild switch --flake /root/nixos-infra#zlambda`
|
|
- 이력: 수동 docker(alpine/socat) → 2026-06-10 systemd socat 서비스 → **2026-06-11 nginx stream 교체** (socat 경유 파일 전송 장애 보고). nginx는 http 가상호스트 미정의로 80/443 미점유, stream 만 사용
|
|
- 백엔드 sshd 호스트키(ED25519): `SHA256:bHy58AE10LPS/C4I8DXnFNCDaEsH3MFUreoDz8cnCPs` (= sftp 컨테이너 키, 평문 TCP relay라 MITM 없음). 백엔드 sshd: OpenSSH 10.0p2 Debian
|
|
- 인증: sftp 컨테이너 자체 sshd (publickey/password). **chroot 미사용**(`ChrootDirectory none`), `Match User inbest` → `ForceCommand internal-sftp`, home `/data`(소유 `inbest:sftponly`), 고객 사이트별 디렉토리(in-best-com, leewell-com 등). 비밀번호 yescrypt(`$y$`). 계정 시크릿은 Vault. 2026-06-11 검증: password/키 인증·10MB 업다운로드 정상(40/40)
|
|
- ⚠️ 2201이 2026-06-10 인터넷 개방됨 → sshd 무차별 대입 스캔 노출. inbest 계정 약한 비밀번호 → 키 전용 전환 또는 fail2ban 검토 권장
|
|
|
|
#### 2026-06-11 inbest SFTP "전송만 안 됨" 장애 — 실제 원인은 클라이언트(FileZilla)
|
|
|
|
- **증상**: FileZilla로 접속·디렉토리 이동은 되는데 파일 업로드/다운로드만 실패. 진입점 `139.162.71.52:2201`. (원격지원으로 "디렉토리는 다 돌아다님, 전송만 실패" 확인)
|
|
- **★ 실제 근본원인 (클라이언트)**: 고객 FileZilla가 **탐색 연결은 올바른 비번으로 인증**해 살려두고, 전송용으로 **새로 여는 연결에는 틀린 저장 비밀번호**를 보냄 → 백엔드에 `Failed password` / `unix_chkpwd: password check failed`가 전송 시점마다 찍힘(약 7~8초 간격 = FileZilla 재시도). 그래서 "이동은 되는데 전송만 실패".
|
|
- **해결**: 고객 FileZilla 사이트관리자 → 로그온 유형 **Normal** + 저장 비밀번호 `inbest1004` 재입력(복붙 금지) + 전송설정 탭 **"동시 연결 수 제한 = 1"**(전송이 인증된 단일 연결을 재사용 → 틀린 비번 가는 2번째 연결 제거). 적용 후 백엔드 로그 전부 `Accepted password`로 전환, 전송 정상.
|
|
- **서버는 무죄**: 서버·릴레이·계정 모두 정상이었음. 검증 — kappa 로컬·사용자 맥 양쪽에서 password/키 인증·순차/동시(9/9, 8/8) 10MB 업다운 전부 성공. `inbest1004`는 유효(shadow yescrypt 해시 일치).
|
|
|
|
##### 진단 중 적용한 서버측 개선 (원인 아님, 유지)
|
|
|
|
- **socat → nginx stream 릴레이 교체** (위 본문). socat·nginx 둘 다 전송 자체는 정상이었으나 nginx로 일원화.
|
|
- **PerSourcePenalties 면제**: `/etc/ssh/sshd_config.d/00-relay-penalty-exempt.conf` → `PerSourcePenaltyExemptList 192.168.9.1` + `systemctl restart ssh`. 백엔드 sshd(OpenSSH 10.0, penalties 기본 활성)는 릴레이→OpenWrt SNAT로 **모든 외부 클라이언트가 단일 source `192.168.9.1`**로 보여, 한 클라이언트(스캐너 등)의 인증 실패가 공유 source 전체를 페널티→정상 고객 새 연결 드롭 위험. 릴레이 뒤 per-source 페널티는 무의미·유해하므로 면제. (이번 장애의 직접 원인은 아니었지만 잠재 collateral 차단 예방)
|
|
- **잔여 권고**: 면제로 릴레이 경유 brute-force 방어 공백 → zlambda nginx `limit_conn`/fail2ban 또는 Linode 방화벽 소스 제한. inbest 약한 비밀번호 키 전용 전환 권장.
|
|
- **Linode Cloud Firewall**: zlambda는 공인 IP에서 **22만 기본 개방**, 나머지(80/443/8443/9999)는 차단. 2201은 2026-06-10 인바운드 허용 추가(zlambda 소속 Linode 계정은 Vault `cloud/linode`(ironclad/apisix-osaka)와 **다른 계정** — 토큰 미보유, 방화벽은 사용자가 대시보드에서 관리)
|
|
- [[../../services/sftpgo|SFTPGo]] / [[../../network/sshpiper|sshpiper]]와 역할 구분 (이건 단순 TCP relay)
|
|
|
|
> **운영 메모 (2026-06-10)**: zlambda `/root/nixos-infra` git remote가 SSH(git@gitea)였는데 root 키 인증 실패로 `git pull` 안 됨 → **HTTPS+토큰으로 교체**(해결). 또한 **flake는 git에 tracked된 파일만** `/nix/store`로 복사하므로, 새 .nix 추가 시 `git add` 필수(안 하면 `path ... does not exist` 빌드 실패). rebuild: `nixos-rebuild switch --flake /root/nixos-infra#zlambda`
|
|
|
|
## 용도 검토
|
|
|
|
- K3s worker 편입 후보 (taint geo=tokyo) — [[k3s-migration|검토 중]]
|
|
- 도쿄 POP 엣지 워크로드 용도
|
|
|
|
상세 인프라 컨텍스트: [[infra-hosts]]
|