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`
|
- 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
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 목록
|
||||||
|
|
||||||
- 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 예시
|
||||||
|
|
||||||
|
|||||||
@@ -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 충돌 방지)
|
||||||
|
|||||||
Reference in New Issue
Block a user