inbest SFTP 장애 근본원인: PerSourcePenalties (공유 SNAT source 페널티), 면제로 해결
This commit is contained in:
@@ -57,6 +57,14 @@ NixOS 베이스 호스트 (도쿄, Linode nano). 이전 `sandbox-tokyo` 장비
|
||||
- 백엔드 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 장애 근본원인: OpenSSH PerSourcePenalties (★ 진짜 원인)
|
||||
|
||||
- **증상**: FileZilla로 접속·폴더 목록은 되는데 파일 업로드/다운로드만 실패. 진입점 `139.162.71.52:2201`.
|
||||
- **근본원인**: 백엔드 sshd(OpenSSH 10.0p2)의 `PerSourcePenalties`(10.0 기본 활성, `authfail:5 noauth:1 ... netblocksize 32`). 릴레이(nginx)→tailscale→**OpenWrt subnet-router SNAT** 경유라 모든 외부 클라이언트가 **단일 source `192.168.9.1`**로 보임. 스캐너/오타/FileZilla 재시도 중 한 건이라도 인증 실패하면 공유 source 전체에 페널티 누적 → 그 source의 **새 연결을 드롭**. 이미 인증된 탐색 연결(폴더 목록)은 유지되고, FileZilla가 전송용으로 **새로 여는 연결만 드롭** → "목록은 보이나 전송 실패". (socat/nginx 릴레이는 무관 — socat·nginx 둘 다 전송 자체는 정상이었음)
|
||||
- **수정**: 컨테이너 sshd 드롭인 `/etc/ssh/sshd_config.d/00-relay-penalty-exempt.conf` → `PerSourcePenaltyExemptList 192.168.9.1` + `systemctl restart ssh`(누적 페널티 메모리 초기화). 릴레이 뒤에선 per-source 페널티가 무의미·유해하므로 면제.
|
||||
- **검증(2026-06-11)**: 인증 실패 8연발 직후 정상연결 5/5, 동시 키 전송 8/8(5MB 업다운 체크섬 일치), password 인증 10MB 업다운 3/3.
|
||||
- **잔여 권고**: 면제로 릴레이 경유 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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user