diff --git a/infra/apisix.md b/infra/apisix.md index b11552e..053390d 100644 --- a/infra/apisix.md +++ b/infra/apisix.md @@ -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) diff --git a/infra/sftpgo.md b/infra/sftpgo.md new file mode 100644 index 0000000..8c86e1c --- /dev/null +++ b/infra/sftpgo.md @@ -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 접근 관리 diff --git a/infra/sshpiper.md b/infra/sshpiper.md index 7feb3db..17b727f 100644 --- a/infra/sshpiper.md +++ b/infra/sshpiper.md @@ -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 예시 diff --git a/services/gitea.md b/services/gitea.md index 38ed9c3..a30d791 100644 --- a/services/gitea.md +++ b/services/gitea.md @@ -10,7 +10,7 @@ K3s 클러스터에서 Helm 차트(gitea/gitea 12.5.0)로 운영. 네임스페 - Gitea 1.25.4 + PostgreSQL 16 + Valkey - 도메인: gitea.anvil.it.com - 트래픽: 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 각각) - 시크릿: Vault `secret/apps/gitea` - Deployment strategy: Recreate (RWO PVC 충돌 방지)