Π₯Π°ΠΊΠ΅ΡΡ ΠΈ DevOps Π»ΠΈΠΊΡΡΡ! Π ΡΠ΅ΡΠΈ Π²ΡΠΏΠ»ΡΠ» Pangolin β open source Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Cloudflare Tunnels. π ΠΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½Ρ Π·Π°ΠΌΠΎΡΠΎΡΠΊΠΈ Ρ VPN Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ. ΠΡΠΎΡΡΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡ ΡΡΠ½Π½Π΅Π»Ρ β ΠΈ ΡΠ²ΠΎΠΉ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ ΡΠΆΠ΅ Π² ΡΠ΅ΡΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈ Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ Π·Π°ΡΡΠ°Ρ. πΈ ΠΠ²ΡΠΎΡ ΠΏΠΈΡΠ΅Ρ, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠ²Π΅Ρ Π½Π° ΡΠ΅Π½Π½ΠΈΠΊΠΈ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΏΡΠΈΠ΅ΡΠ°ΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ. Π£ΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π½Π° GitHub β ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ ΡΠ²ΠΎΠΈ Π½ΡΠΆΠ΄Ρ. π¨βπ» ΠΠ»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ ΡΡΡΠ°Π» ΠΏΠ»Π°ΡΠΈΡΡ Π·Π° Π²ΠΎΠ·Π΄ΡΡ ΠΈ Π»ΡΠ±ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΎΠΉ. ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ²ΡΡΡΠ΅ΡΠ΅ΡΡ Π² ΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ Kubernetes! π οΈ #DevOps #Cloud #OpenSource
Pangolin: Self-Hosted Zero Trust Π’ΡΠ½Π½Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΡ Π‘ΡΠ΅Π΄
Executive Technical Summary
Pangolin ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΈΠ½Π½ΠΎΠ²Π°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ open source ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° tunneled reverse proxy, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Cloudflare Tunnels. Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠ΅ WireGuard-ΡΡΠ½Π½Π΅Π»ΠΈ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΡΠΊΡΡΡΠΈΡ ΠΏΠΎΡΡΠΎΠ² (firewall punching). ΠΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ β ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° RBAC-Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ OAuth2/OIDC. ΠΡΠΎΠ΅ΠΊΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Newt, ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΠΈ Π½Π° Π±Π°Π·Π΅ Traefik ΠΈ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΠΊ enterprise-Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· Docker Compose.
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠΉ Deep Dive
Core Components
- Π’ΡΠ½Π½Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π΅ WireGuard: ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Newt Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ NAT/firewall Ρ Π°Π³ΡΠ΅Π³Π°ΡΠΈΠ΅ΠΉ ΡΡΠ°ΡΠΈΠΊΠ°
- ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° HTTP/HTTPS ΠΈ raw TCP/UDP ΠΏΠΎΠ²Π΅ΡΡ TLS-ΡΡΠ½Π½Π΅Π»Π΅ΠΉ
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ²: ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Let’s Encrypt Π΄Π»Ρ lifecycle-ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ SSL
# ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΡΠ½Π½Π΅Π»Ρ Π² Newt
[Interface]
PrivateKey = PRIVATE_KEY
Address = 10.8.0.2/24
[Peer]
PublicKey = SERVER_PUBKEY
Endpoint = pangolin.example.com:51820
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25ΠΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡ
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Ρ Traefik (CrowdSec Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΎΡ Π°ΡΠ°ΠΊ, Geoblock Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π³Π΅ΠΎΠ»ΠΎΠΊΠ°ΡΠΈΠΈ) ΡΠ΅ΡΠ΅Π· Π΅Π΄ΠΈΠ½ΡΠΉ API. Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΉΡΠΎΠ² Π² ΡΠ°ΠΌΠΊΠ°Ρ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ Ρ Π°Π±Π°.
Identity & Access Management
ΠΠΈΠ±ΠΊΠ°Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ
- Π ΠΎΠ»Π΅Π²Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ (RBAC) Ρ Π³ΡΠ°Π½ΡΠ»ΡΡΠ½ΡΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎ IP/CIDR/URL
- ΠΡΠ»ΡΡΠΈΡΠ°ΠΊΡΠΎΡΠ½Π°Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ: TOTP + ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° OAuth2/OIDC ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ²: Keycloak, Okta, Authentik
Security Patterns
# ΠΡΠΈΠΌΠ΅Ρ ACL-ΠΏΡΠ°Π²ΠΈΠ»Π° Π² YAML
- resource: "db-admin"
rules:
- path: "/admin/*"
allowed_roles: ["superadmin"]
ip_ranges: ["192.168.10.0/24"]
auth_methods: ["oidc", "totp"]ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ Π‘ΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΠ½Π°Π»ΠΈΠ·
| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | Pangolin | Cloudflare Tunnels |
|---|---|---|
| ΠΡΠΎΠΏΡΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ | 1.2 Gbps* | ΠΠ°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ°ΡΠΈΡΠ° |
| ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° TCP/UDP | ΠΠ° | Π’ΠΎΠ»ΡΠΊΠΎ HTTP/HTTPS |
| Π¦Π΅Π½Π° (Π±Π°Π·ΠΎΠ²ΡΠΉ VPS) | $12/Π³ΠΎΠ΄ | ΠΡ $5/ΠΌΠ΅Ρ |
* ΠΠ° ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ c 2 vCPU, Ubuntu 22.04
Π Π΅Π°Π»ΡΠ½ΡΠ΅ ΠΠ΅ΠΉΡΡ ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΡ
ΠΠΎΠΌΠ°ΡΠ½ΡΡ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΡ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌ ISP
ΠΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ Π½Π° ΠΏΠΎΡΡΡ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°: ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ Pangolin Π½Π° VPS ($12/Π³ΠΎΠ΄) Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Ρ ΠΎΡΡΠΎΠ² ΡΠ΅ΡΠ΅Π· Newt ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ HTTP/S-ΡΠ΅ΡΠ²ΠΈΡΡ Π±Π΅Π· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠΎΡΡΠ΅ΡΠ°.
ΠΠΈΠ±ΡΠΈΠ΄Π½Π°Ρ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½Π°Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΠΌ Keycloak ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΅Π΄ΠΈΠ½ΡΠΉ Π²Ρ ΠΎΠ΄ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ Π² ΡΠ°ΡΡΠ½ΡΡ ΠΎΠ±Π»Π°ΠΊΠ°Ρ ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ DC ΡΠ΅ΡΠ΅Π· ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΡΡΠ°Π» Ρ Π°ΡΠ΄ΠΈΡΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ°.
Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ IoT-ΡΠ΅ΡΠΈ
ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ² Π² Π΅Π΄ΠΈΠ½ΡΠΉ security perimeter ΡΠ΅ΡΠ΅Π· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ Newt Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²/Π³ΡΡΠΏΠΏ.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ Roadmap
- Π’Π΅ΠΊΡΡΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ: ΠΠ΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ WAF (ΡΡΠ΅Π±ΡΠ΅Ρ CrowdSec), ΠΊΠ²ΠΎΡΠ° Π½Π° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
- Roadmap: Kubernetes Operator, QUIC-ΡΡΠ°Π½ΡΠΏΠΎΡΡ, GUI Π΄Π»Ρ ACL-ΠΏΡΠ°Π²ΠΈΠ»
- ΠΠΈΡΠ΅Π½Π·ΠΈΡ: AGPLv3/Fossorial Commercial Ρ API Π΄Π»Ρ enterprise-ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΉ
ΠΠΊΡΠΏΠ΅ΡΡΠ½ΡΠ΅ Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ
Pangolin Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ Π·ΡΠ΅Π»ΠΎΡΡΡ Π΄Π»Ρ high-trust ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΡ WireGuard ΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. ΠΠ»Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ:
- ΠΠ°ΡΠΈΠ½Π°ΠΉΡΠ΅ Ρ Docker Compose Π½Π° VPS (2 vCPU/4GB RAM)
- ΠΠ½ΡΠ΅Π³ΡΠΈΡΡΠΉΡΠ΅ OIDC-ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ Π½Π° ΡΡΠ°ΠΏΠ΅ onboarding
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Newt Π΄Π»Ρ edge-ΡΡΡΡΠΎΠΉΡΡΠ² Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ WireGuard
Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ secure access Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠ΅Π΄, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ enterprise-ΡΡΠ½ΠΊΡΠΈΠΈ Π² community-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.