SFTPGo 설치, relay4wd 포트 재할당(22→SFTPGo, 2202→Gitea SSH), 역할 분리 정리

This commit is contained in:
kappa
2026-03-27 14:46:50 +09:00
parent 268c6c53e0
commit 679f827440
4 changed files with 84 additions and 3 deletions

View File

@@ -19,8 +19,9 @@ updated: 2026-03-27
- etcd: incus-jp1 db 프로젝트 `etcd-1` (10.253.102.11:2379), prefix `/apisix-sandbox` - etcd: incus-jp1 db 프로젝트 `etcd-1` (10.253.102.11:2379), prefix `/apisix-sandbox`
- 설정 파일: `/opt/apisix/` (config.yaml, docker-compose.yml) - 설정 파일: `/opt/apisix/` (config.yaml, docker-compose.yml)
- 모드: stream only (HTTP proxy 비활성화, 9080 미사용) - 모드: stream only (HTTP proxy 비활성화, 9080 미사용)
- 방화벽: 2201-2299/tcp + 443/tcp 개방, SSH는 Tailscale 경유 포트 2222 - 방화벽: 22/tcp + 2201-2299/tcp + 443/tcp 개방, SSH는 Tailscale 경유 포트 2222
- 443 → iptables REDIRECT → 8443 (privileged 포트 우회) - 22 → iptables REDIRECT → 9022 (SFTPGo용, privileged 포트 우회)
- 443 → iptables REDIRECT → 8443 (Teleport용, privileged 포트 우회)
- 2026-03-17 AWS EC2에서 Lightsail nano($5/월)로 이전 - 2026-03-17 AWS EC2에서 Lightsail nano($5/월)로 이전
- **주의**: config.yaml의 stream_proxy.tcp에 privileged 포트(1-1023)를 넣으면 비특권 컨테이너에서 bind 실패로 크래시. 2026-03-27 포트 22 추가로 장애 발생, 제거하여 복구 - **주의**: config.yaml의 stream_proxy.tcp에 privileged 포트(1-1023)를 넣으면 비특권 컨테이너에서 bind 실패로 크래시. 2026-03-27 포트 22 추가로 장애 발생, 제거하여 복구
@@ -28,7 +29,9 @@ updated: 2026-03-27
| 포트 | 용도 | upstream | 비고 | | 포트 | 용도 | upstream | 비고 |
|------|------|----------|------| |------|------|----------|------|
| 9022 (외부 22) | SFTPGo SFTP | 192.168.9.55:22 | K3s MetalLB → SFTPGo, iptables 22→9022 리다이렉트 |
| 2201 | inbest SSH | 10.100.1.158:22 | inbest 전용 SSH 포트, OpenWrt Tailscale 광고 경유 | | 2201 | inbest SSH | 10.100.1.158:22 | inbest 전용 SSH 포트, OpenWrt Tailscale 광고 경유 |
| 2202 | Gitea SSH | 192.168.9.54:22 | K3s MetalLB → Gitea SSH |
| 8443 (외부 443) | Teleport | 192.168.9.52:443 | K3s MetalLB → Teleport proxy, iptables 443→8443 리다이렉트 | | 8443 (외부 443) | Teleport | 192.168.9.52:443 | K3s MetalLB → Teleport proxy, iptables 443→8443 리다이렉트 |
### 오사카 (apisix-osaka) ### 오사카 (apisix-osaka)

69
infra/sftpgo.md Normal file
View File

@@ -0,0 +1,69 @@
---
title: SFTPGo (SFTP/SSH 서버)
updated: 2026-03-27
tags: [infra, sftp, ssh, k3s]
---
## 개요
SFTPGo - 고객용 SFTP/SSH/WebDAV 서버. 사용자 관리, 키 관리, 웹 파일 관리 UI 내장.
## 배포 정보
K3s 클러스터(kr3 컨텍스트)에 Helm으로 설치 (2026-03-27)
| 항목 | 값 |
|------|-----|
| Namespace | sftpgo |
| Chart | oci://ghcr.io/sftpgo/helm-charts/sftpgo 0.44.0 |
| App | SFTPGo 2.7.1 |
| SFTP | LoadBalancer 192.168.9.55:22 |
| Web UI | 8080 (Traefik HTTPRoute 경유) |
| Storage | Longhorn 1Gi (SQLite DB) |
| 관리자 | Vault `secret/apps/sftpgo` (admin_user, admin_password) |
## 외부 접근 경로
### 웹 UI (HTTPS)
```
sftp.inouter.com → Cloudflare (proxied) → 220.120.65.245
→ OpenWrt HAProxy :443 → Traefik 192.168.9.53:443
→ HTTPRoute → SFTPGo 8080
```
### SFTP (포트 22)
```
sftp.inouter.com:22 (또는 52.79.45.166:22)
→ relay4wd:22 → iptables REDIRECT :9022
→ APISIX stream_route → 192.168.9.55:22
→ SFTPGo Pod
```
## 웹 UI
| URL | 용도 |
|-----|------|
| https://sftp.inouter.com/web/admin | 관리자 - 사용자/설정 관리 |
| https://sftp.inouter.com/web/client | 고객 - 파일 업로드/다운로드, 패스워드 변경 |
## API
```bash
# 토큰 발급
TOKEN=$(curl -s https://sftp.inouter.com/api/v2/token -u 'kaffa:패스워드' | jq -r .access_token)
# 사용자 목록
curl -s -H "Authorization: Bearer $TOKEN" https://sftp.inouter.com/api/v2/users
# 사용자 생성
curl -s -X POST https://sftp.inouter.com/api/v2/users \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"username":"user1","password":"pass","status":1,"home_dir":"/srv/sftpgo/data/user1","permissions":{"/":["*"]}}'
```
## 관련 문서
- [[apisix]] - relay4wd stream_route로 SFTP 포워딩
- [[sshpiper]] - SSH 리버스 프록시 (내부 서버 접근용)
- [[teleport]] - 관리자 SSH/K8s 접근 관리

View File

@@ -66,6 +66,15 @@ SSH 세션을 통째로 프록시하므로 SSH로 할 수 있는 것 전부 지
## 현재 Pipe 목록 ## 현재 Pipe 목록
- pipe-jp1: `jp1``root@100.109.123.1:22` (패스워드 인증) - pipe-jp1: `jp1``root@100.109.123.1:22` (패스워드 인증)
- pipe-test: `test``testuser@sshd-simple.test.svc.cluster.local:22` (패스워드 인증, 테스트용)
## 역할 분리
| 용도 | 도구 |
|------|------|
| 고객 SFTP/SSH | [[sftpgo]] — 사용자/키 관리 내장, 웹 UI |
| 내부 서버 SSH 프록시 | sshpiper — 라우팅 프록시 |
| 관리자 SSH/K8s | [[teleport]] — 감사 로그, MFA |
## Pipe CRD 예시 ## Pipe CRD 예시

View File

@@ -10,7 +10,7 @@ K3s 클러스터에서 Helm 차트(gitea/gitea 12.5.0)로 운영. 네임스페
- Gitea 1.25.4 + PostgreSQL 16 + Valkey - Gitea 1.25.4 + PostgreSQL 16 + Valkey
- 도메인: gitea.anvil.it.com - 도메인: gitea.anvil.it.com
- 트래픽: BunnyCDN(actions) → APISIX 서울 → K3s Traefik → gitea svc:3000 - 트래픽: BunnyCDN(actions) → APISIX 서울 → K3s Traefik → gitea svc:3000
- SSH 활성화, HTTPS only - SSH 활성화, 외부 포트 2202 (relay4wd 경유: `ssh -p 2202 git@git.inouter.com`), MetalLB 192.168.9.54:22, SSH_DOMAIN: git.inouter.com
- 스토리지: Longhorn PVC 5Gi (data + PostgreSQL 각각) - 스토리지: Longhorn PVC 5Gi (data + PostgreSQL 각각)
- 시크릿: Vault `secret/apps/gitea` - 시크릿: Vault `secret/apps/gitea`
- Deployment strategy: Recreate (RWO PVC 충돌 방지) - Deployment strategy: Recreate (RWO PVC 충돌 방지)