187 lines
8.9 KiB
Markdown
187 lines
8.9 KiB
Markdown
Rekapitulasi 5 file tersebut **sangat solid dan sudah masuk level "Production-Ready Architect"**. Struktur repositori, pembagian tugas (SOC - Separation of Concerns), hingga detail teknis enkripsi dan firewall sudah tertutup dengan baik.
|
|
|
|
Jika kamu memasukkan 5 file ini ke AI (seperti Cursor/Claude), AI akan punya konteks yang sangat jernih. Namun, sebagai **Senior Devops & Firewall Expert**, ada **3 detail krusial** yang perlu ditambahkan agar fitur "Allow Port Range/IP Range" dan "Stealth Agent" benar-benar bekerja 100%.
|
|
|
|
Berikut adalah **"The Missing Pieces"** untuk menyempurnakan file-file tersebut:
|
|
|
|
### 1. Detail Logika nftables untuk Range (Update untuk Repo 1)
|
|
Di dalam file `agent-prompt-code.md`, tambahkan logika spesifik untuk menangani **Port Range** dan **IP Range**, karena library `google/nftables` membutuhkan penanganan khusus untuk tipe data `interval`.
|
|
|
|
```go
|
|
// Tambahkan ini ke internal/firewall/nftables.go
|
|
func (m *NetManager) AddRangeRule(deviceName string, startIP, endIP net.IP, startPort, endPort uint16) error {
|
|
// Logika menggunakan nftables 'sets' dengan flags interval
|
|
// Ini untuk handle input user seperti: 192.168.1.10-192.168.1.20 dan port 8000-9000
|
|
// AI perlu diingatkan untuk menggunakan 'expressions' (ex: expr.Range)
|
|
}
|
|
```
|
|
|
|
### 2. Mekanisme "Peer Discovery" (Logic Sinkronisasi)
|
|
Di file arsitektur, kamu perlu menambahkan satu poin: **Bagaimana Perangkat A tahu IP WireGuard Perangkat B?**
|
|
* **Saran:** Tambahkan endpoint `/api/v1/peers` di Server Core.
|
|
* Setiap kali ada peer baru atau perubahan rule, Server akan mengirim **Push Notification** (via WebSocket atau gRPC) ke Agent, atau Agent melakukan **Long Polling** untuk memperbarui daftar `/etc/hosts` internal memori mereka.
|
|
|
|
### 3. Implementasi Stealth `wireguard-go` (Update untuk Repo 3)
|
|
Ini adalah bagian tersulit. AI harus diingatkan bahwa kita tidak menggunakan perintah `wg-quick`. Kita menggunakan **UAPI (Userspace API)**.
|
|
|
|
**Tambahkan instruksi ini ke `agent-prompt-final.md` bagian Repo 3:**
|
|
> "Use `conn.NewDefaultBind()` and `device.NewDevice()` from `wireguard-go`. Inject the configuration string directly into the device via `device.IpcSet()` method. This ensures no private keys or configs touch the disk."
|
|
|
|
---
|
|
|
|
### Apakah 5 file ini sudah siap?
|
|
**JAWABANNYA: SIAP.**
|
|
|
|
**Urutan eksekusi yang saya sarankan untukmu:**
|
|
|
|
1. **Eksekusi File 1 & 5 (Plan & Master Suite):** Gunakan ini untuk setup struktur folder di Gitea dan inisialisasi repositori.
|
|
2. **Eksekusi File 3 (Server Core Code):** Mulai bangun Backend-nya dulu. Tanpa API dan Database, Agent dan UI tidak punya arah.
|
|
3. **Eksekusi File 4 (Provisioning & Installer):** Setelah API siap, buat installer-nya untuk ngetes apakah binary bisa ditarik dari Gitea.
|
|
4. **Eksekusi UI Terakhir:** Dashboard hanya "kulit", fokus ke stabilitas tunnel dan firewall dulu.
|
|
|
|
### Satu Tips DevOps Terakhir:
|
|
Gunakan **Docker Registry di Gitea**. Karena kamu menggunakan Go, hasil build dari Repo 3 (Agent) bisa dipush sebagai *Generic Package* di Gitea. Script installer kamu tinggal melakukan `curl` ke Gitea Package API.
|
|
|
|
**Kesimpulan:**
|
|
File kamu sudah **95% Sempurna**. 5% sisanya adalah detail kecil saat koding (edge cases). Kamu sudah bisa langsung memberikan prompt ini ke AI untuk mulai melakukan *scaffolding* (pembuatan struktur dasar) kode.
|
|
|
|
Ini adalah penyempurnaan terakhir untuk **Master Prompt** kamu. Saya telah mengintegrasikan logika **Stealth Agent (`IpcSet`)** dan **Firewall Range (`nftables`)** ke dalam instruksi koding yang sangat teknis.
|
|
|
|
---
|
|
|
|
### Bagian 1: Logika Stealth Agent dengan `device.IpcSet()`
|
|
Ini adalah rahasia agar WireGuard berjalan tanpa file `.conf`. Konfigurasi dikirim langsung ke memori kernel/userspace.
|
|
|
|
**Contoh Implementasi di Repo Agent (Go):**
|
|
```go
|
|
package tunnel
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"golang.zx2c4.com/wireguard/device"
|
|
"golang.zx2c4.com/wireguard/tun"
|
|
)
|
|
|
|
func StartStealthTunnel(interfaceName string, config string) error {
|
|
// 1. Buat TUN Device di memori
|
|
tunDev, err := tun.CreateTUN(interfaceName, 1420)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 2. Inisialisasi WireGuard Device (Userspace)
|
|
logger := device.NewLogger(device.LogLevelError, "(nexusguard-wg) ")
|
|
dev := device.NewDevice(tunDev, logger)
|
|
|
|
// 3. Format config menjadi UAPI (User API) string
|
|
// Format UAPI: private_key=... \n public_key=... \n endpoint=...
|
|
uapiConfig := convertToUAPI(config)
|
|
|
|
// 4. INJECT LANGSUNG KE MEMORI (IpcSet)
|
|
// Tidak ada file yang ditulis ke disk!
|
|
err = dev.IpcSet(uapiConfig)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 5. Up-kan interface
|
|
return dev.Up()
|
|
}
|
|
|
|
func convertToUAPI(config string) string {
|
|
// Logika parsing config standar ke format UAPI (key=value\n)
|
|
// AI harus mengimplementasikan parser ini
|
|
return strings.ReplaceAll(config, ": ", "=")
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Bagian 2: Logika Firewall Range (nftables)
|
|
Untuk menangani "Allow IP Range" dan "Port Range" menggunakan library Go.
|
|
|
|
**Instruksi Teknis untuk Repo Server:**
|
|
```go
|
|
// Menambahkan IP Range ke Set nftables
|
|
set := &nftables.Set{
|
|
Name: "allowed_range",
|
|
Table: nexusTable,
|
|
Interval: true, // WAJIB TRUE untuk support Range/Netmask
|
|
KeyType: nftables.TypeIPAddr,
|
|
}
|
|
|
|
// Menambahkan elemen: 192.168.1.10 - 192.168.1.20
|
|
elements := []nftables.SetElement{
|
|
{
|
|
Key: net.ParseIP("192.168.1.10").To4(),
|
|
KeyEnd: net.ParseIP("192.168.1.20").To4(), // Tentukan batas akhir
|
|
},
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Bagian 3: THE FINAL MASTER PROMPT (Siap Copy-Paste)
|
|
|
|
**Berikan Prompt ini ke AI Agent Anda untuk mulai membangun seluruh sistem:**
|
|
|
|
```markdown
|
|
# ROLE: Senior Network Architect & Go Specialist
|
|
# PROJECT: NexusGuard SD-WAN (Private Multi-WireGuard Control Plane)
|
|
|
|
Please build the NexusGuard system across 3 repositories with the following advanced technical specifications:
|
|
|
|
## 1. SHARED SECURITY PROTOCOL
|
|
- **Stealth Agent:** The Agent MUST NOT write any WireGuard config files to disk. Use 'golang.zx2c4.com/wireguard/device' and inject configuration using the `device.IpcSet()` method via UAPI string format.
|
|
- **Config Encryption:** Server must encrypt WG configs using AES-256-GCM. The key is derived from: SHA256(HardwareID + Internal_Salt). HardwareID is fetched from '/sys/class/dmi/id/product_uuid'.
|
|
|
|
## 2. REPO: nexus-server-core (The Brain)
|
|
- **Framework:** Go-Gin with GORM (PostgreSQL) and Redis for heartbeat.
|
|
- **Firewall Logic (nftables):**
|
|
- Implement a dynamic firewall manager using 'google/nftables'.
|
|
- Use 'Sets' with 'Interval: true' to support:
|
|
- Single IP (10.8.0.5)
|
|
- Netmask/CIDR (192.168.1.0/24)
|
|
- IP Range (192.168.1.10-192.168.1.20)
|
|
- Implement Port Ranges (e.g., 8000-9000) using 'nftables.TypeInetService'.
|
|
- **Zero-Trust:** Default policy is DROP. Only allow traffic based on database-defined rules per User.
|
|
- **Device Management:** Auto-detect "Online/Offline" status by tracking WireGuard handshakes.
|
|
|
|
## 3. REPO: nexus-device-agent (The Stealth Edge)
|
|
- **Tech Stack:** Pure Go static binary.
|
|
- **Identity:** On first boot, send HWID and registration token to Server Core.
|
|
- **Tunnel Engine:**
|
|
- Embed 'wireguard-go'.
|
|
- Implement `StartStealthTunnel` function using `tun.CreateTUN` and `device.IpcSet`.
|
|
- Provide an auto-reconnect logic if the connection is dropped or if the IP changes (Roaming).
|
|
- **Deployment:** Provide a bash script that installs 'nftables' and 'wireguard-tools' automatically based on OS (Ubuntu/Debian/CentOS/Raspbian). Pull binary from Gitea using 'X-Token-Auth'.
|
|
|
|
## 4. REPO: nexus-dashboard-ui (The Dashboard)
|
|
- **Tech Stack:** Vue.js 3 + Tailwind + Capacitor.js.
|
|
- **Features:**
|
|
- CRUD for Firewall Rules (Source Device -> Target IP/Port Range -> Action).
|
|
- Device grouping by type (CCTV, Fingerprint, Server, etc.).
|
|
- Visual "Kill-Switch" toggle to cut internet access for specific devices.
|
|
|
|
## 5. RECENT ENHANCEMENTS (REQUIRED):
|
|
- **Peer Discovery:** When a new device is added, the Server must trigger a rule update to all affected Agents.
|
|
- **UDP Hole Punching:** Implement a simple STUN coordination to allow P2P between agents behind NAT.
|
|
|
|
# EXECUTION:
|
|
1. Start by providing the GORM models and the 'nftables' manager implementation in Go.
|
|
2. Provide the 'device.IpcSet' implementation for the Agent.
|
|
3. Show the Bash script for the auto-installer with Gitea integration.
|
|
```
|
|
|
|
---
|
|
|
|
### Kenapa Prompt ini Sangat Kuat?
|
|
1. **Stealth Level:** Tidak bisa dideteksi dengan mencari file `.conf`. Hanya bisa dilihat lewat command `wg show` jika diizinkan, atau langsung di memori.
|
|
2. **Firewall Skalabel:** Menggunakan `nftables set` jauh lebih cepat daripada ribuan baris `iptables`. Satu set bisa menampung ribuan IP/Range tanpa menurunkan performa CPU.
|
|
3. **Enterprise Ready:** Pembagian 3 repo dan penggunaan `X-Token-Auth` untuk Gitea menunjukkan ini adalah sistem yang dirancang untuk tim profesional.
|
|
4. **Zero Trust:** Default DROP memastikan sistem kamu sangat aman dari akses luar yang tidak terdaftar.
|
|
|
|
**Apakah ada bagian spesifik dari prompt ini yang ingin kamu "zoom-in" (misal: bagian mobile build dengan Capacitor)?** |