SFTPGo 설치, relay4wd 포트 재할당(22→SFTPGo, 2202→Gitea SSH), 역할 분리 정리
This commit is contained in:
@@ -19,8 +19,9 @@ updated: 2026-03-27
|
||||
- etcd: incus-jp1 db 프로젝트 `etcd-1` (10.253.102.11:2379), prefix `/apisix-sandbox`
|
||||
- 설정 파일: `/opt/apisix/` (config.yaml, docker-compose.yml)
|
||||
- 모드: stream only (HTTP proxy 비활성화, 9080 미사용)
|
||||
- 방화벽: 2201-2299/tcp + 443/tcp 개방, SSH는 Tailscale 경유 포트 2222
|
||||
- 443 → iptables REDIRECT → 8443 (privileged 포트 우회)
|
||||
- 방화벽: 22/tcp + 2201-2299/tcp + 443/tcp 개방, SSH는 Tailscale 경유 포트 2222
|
||||
- 22 → iptables REDIRECT → 9022 (SFTPGo용, privileged 포트 우회)
|
||||
- 443 → iptables REDIRECT → 8443 (Teleport용, privileged 포트 우회)
|
||||
- 2026-03-17 AWS EC2에서 Lightsail nano($5/월)로 이전
|
||||
- **주의**: config.yaml의 stream_proxy.tcp에 privileged 포트(1-1023)를 넣으면 비특권 컨테이너에서 bind 실패로 크래시. 2026-03-27 포트 22 추가로 장애 발생, 제거하여 복구
|
||||
|
||||
@@ -28,7 +29,9 @@ updated: 2026-03-27
|
||||
|
||||
| 포트 | 용도 | 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 광고 경유 |
|
||||
| 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 리다이렉트 |
|
||||
|
||||
### 오사카 (apisix-osaka)
|
||||
|
||||
69
infra/sftpgo.md
Normal file
69
infra/sftpgo.md
Normal 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 접근 관리
|
||||
@@ -66,6 +66,15 @@ SSH 세션을 통째로 프록시하므로 SSH로 할 수 있는 것 전부 지
|
||||
## 현재 Pipe 목록
|
||||
|
||||
- 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 예시
|
||||
|
||||
|
||||
Reference in New Issue
Block a user