Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • Slash with SPMPlus Slash with SPMPlus
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Artifacts
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Terraform modules
    • Model experiments
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Agung Hendro
  • Slash with SPMPlusSlash with SPMPlus
  • Wiki
  • home id

home id · Changes

Page history
Create home id authored Oct 28, 2026 by Agung Hendro's avatar Agung Hendro
Hide whitespace changes
Inline Side-by-side
home-id.md 0 → 100644
View page @ a891a41b
![Slash with SPMPlus](https://kubeman.unej.ac.id/geohot/slash/-/raw/main/brand/promo-banner-Slash%20with%20SPMPlus.jpg)
[English](home) | **Bahasa Indonesia**
# Slash
**Web server dan reverse proxy dari Rust. HTTP/3 dan HTTPS otomatis.**
Slash menggabungkan web server, reverse proxy, load balancer, proxy TCP/UDP, dan web
application firewall dalam satu binary kecil yang ditulis dengan Rust. Konfigurasinya
cukup satu file yang bisa dibaca seperti kalimat. Bila lebih suka klik daripada mengetik,
**SPMPlus** menyediakan panel web yang mengaturnya.
| <img src="https://kubeman.unej.ac.id/geohot/slash/-/raw/main/brand/slash-logo-fix.png" alt="Slash" width="220"> | <img src="https://kubeman.unej.ac.id/geohot/slash/-/raw/main/brand/logo-spmplus-fix-with-text.png" alt="SPMPlus" width="220"> |
|:---:|:---:|
| **Slash**: web server + reverse proxy | **SPMPlus**: reverse proxy manager |
---
## Empat situs, satu file
```
email admin@example.com
example.com, www.example.com proxy localhost:3000
blog.example.com wordpress /var/www/blog
api.example.com laravel /var/www/api
docs.example.com files /srv/docs
```
Itu konfigurasi lengkap. Sertifikat Let's Encrypt terbit sendiri, HTTP dialihkan ke HTTPS,
HTTP/3 aktif, header keamanan terpasang, dan PHP berjalan lewat php-fpm dengan aturan aman
untuk WordPress dan Laravel. `slash check` memeriksa file sebelum dipakai, lengkap dengan
nomor baris dan saran saat ada salah ketik.
```
# Caddyfile # Slashfile
blog.example.com { blog.example.com wordpress /var/www/blog
root * /var/www/blog
php_fastcgi localhost:9000
file_server
}
```
---
## Kenapa Slash
### Aman sejak baris pertama
- **Memory safe.** Ditulis dengan Rust tanpa `unsafe` di kode Slash sendiri. Kelas bug
buffer overflow dan use-after-free yang selama ini menghantui web server berbasis C
tertutup sejak desain.
- **TLS modern** dengan rustls dan aws-lc: TLS 1.3 sebagai default, kriptografi
post-quantum hybrid, sertifikat yang dirotasi tanpa restart.
- **Security headers aktif otomatis** untuk setiap situs: CSP, X-Frame-Options,
Referrer-Policy, Permissions-Policy, HSTS. Header yang membocorkan versi server dibuang.
- **Secret terenkripsi** saat disimpan; panel memakai argon2id, TOTP, dan passkey.
### AssaultCuirass: WAF bawaan
*Heavy-Duty, Memory-Safe Web Application Firewall Powered by Rust.*
AssaultCuirass menjalankan OWASP Core Rule Set v4, standar industri yang sama yang dipakai
ModSecurity dan Coraza, dengan engine yang ditulis khusus untuk Slash.
- **Kebal ReDoS.** Regex berjalan dalam waktu linear, sehingga payload sepanjang apa pun
diperiksa dengan biaya yang terukur.
- **Body ikut diperiksa:** form, JSON, multipart, dan XML. Serangan XXE ditangkis sebelum
menyentuh aplikasi.
- **Satu baris untuk mengaktifkan:**
```
shop.example.com proxy localhost:3000
waf block
```
- **Mode detect** untuk mengamati trafik lebih dulu, lalu **block** saat sudah yakin.
Pengecualian ditulis sesempit satu parameter: `waf skip 942430 ARGS:search`.
Diukur dengan ±37.000 payload dari
[WAF-Payload-Collection](https://github.com/mgm-sp/WAF-Payload-Collection):
| Kategori serangan | Terhenti (paranoia 2) |
|---|---|
| XSS (20.944 payload) | 100% |
| Log4Shell, Shellshock, XXE | 100% |
| Command injection | 98,5% |
| SQL injection | 97,2% |
| **Total** | **94,8%** |
Biaya per request ±0,13 ms di paranoia 1 dan hanya dibayar oleh route yang memakai WAF.
### Cepat dan hemat
Diukur di satu PC i5-10600 yang sekaligus menjalankan load generator dan upstream dummy:
| | Hasil |
|---|---|
| HTTP/1.1, 1.000 koneksi | **92.169 req/s**, 0 error |
| HTTPS, 1.000 koneksi | **81.501 req/s**, 0 error |
| HTTP/3 (QUIC), 1.000 koneksi | **52.517 req/s**, 0 error |
| 10.000 user bersamaan | 9.704 req/s, p50 1,18 ms, 0 error |
| Memori idle | ±28 MB |
| Memori per koneksi HTTP/2 | ±60 KB |
Binary statis ±15 MB, tanpa dependensi sistem. Berjalan di x86_64 dan ARM64, termasuk VM
1 vCPU dengan RAM 512 MB.
### Reload tanpa drama
Konfigurasi baru divalidasi penuh, lalu ditukar secara atomik. Koneksi yang sedang berjalan
tetap jalan, dan konfigurasi yang keliru ditolak sebelum menyentuh trafik. Slash juga
menyimpan konfigurasi terakhir yang sehat, sehingga tetap melayani walau panel sedang
dimatikan.
### Lebih dari web server
- **PHP** lewat FastCGI dengan preset `wordpress` dan `laravel`: hanya file `.php` asli yang
dieksekusi, `wp-content/uploads` steril, `.env` Laravel tak terjangkau.
- **Reverse proxy** HTTP/1.1, HTTP/2, HTTP/3, WebSocket, dan gRPC, dengan load balancing dan
health check aktif maupun pasif.
- **Proxy TCP dan UDP** untuk database, SSH, MQTT, DNS, game server, dan WireGuard.
- **TLS passthrough berdasarkan SNI** di port 443, berdampingan dengan situs HTTPS biasa.
- **Static files** dengan dukungan SPA dan file pre-compressed, plus kompresi zstd,
Brotli, dan gzip.
- **Rate limiting, access list, micro-cache** per route.
```
tcp :5432 proxy 10.0.0.5:5432 10.0.0.6:5432
allow 10.0.0.0/8
udp :51820 proxy 10.0.0.3:51820
mail.example.com passthrough 10.0.0.7:443
```
---
## Slash di antara web server populer
| | **Slash** | Caddy | Nginx | Apache httpd |
|---|---|---|---|---|
| Bahasa | **Rust** (memory safe) | Go | C | C |
| HTTPS otomatis | **Bawaan**: HTTP-01, TLS-ALPN-01, DNS-01, ARI | Bawaan | certbot / modul | `mod_md` |
| HTTP/3 | **Aktif secara default** | Aktif secara default | Diaktifkan manual | — |
| WAF | **AssaultCuirass bawaan** (OWASP CRS v4) | Plugin Coraza | Modul ModSecurity | Modul ModSecurity |
| Security headers | **Aktif otomatis per situs** | Ditulis di Caddyfile | Ditulis di config | Ditulis di config |
| PHP | **Preset WordPress & Laravel yang aman** | `php_fastcgi` | `fastcgi_pass` manual | `mod_php`, php-fpm |
| TCP/UDP + SNI passthrough | **Bawaan** | Plugin `layer4` | `stream` | — |
| Rate limiting | **Bawaan, per route** | Plugin | `limit_req` | Modul tambahan |
| Reload | **Divalidasi, ditukar atomik** | Graceful | `nginx -s reload` | `graceful` |
| Panel web resmi | **SPMPlus** | Pihak ketiga | Pihak ketiga | Pihak ketiga |
| Konfigurasi | **Slashfile**, satu baris per situs | Caddyfile / JSON | `nginx.conf` | `httpd.conf`, `.htaccess` |
---
## SPMPlus: reverse proxy manager
<img src="https://kubeman.unej.ac.id/geohot/slash/-/raw/main/brand/logo-spmplus-fix-with-text.png" alt="SPMPlus" width="240">
**SPMPlus (Slash Proxy Manager Plus)** adalah panel web untuk Slash, alternatif modern
Nginx Proxy Manager.
- **Preview sebelum terapkan:** setiap perubahan divalidasi penuh, ditampilkan diff-nya,
lalu diterapkan atomik. Setiap versi konfigurasi tercatat beserta audit log-nya.
- **Proxy dan panel terpisah:** Slash terus melayani trafik walau panel sedang di-update.
- **Hosts, Streams, Certificates, Access** dalam satu tempat; tes koneksi upstream langsung
dari jaringan proxy.
- **Dashboard dan Prometheus metrics**, log akses, dan audit log.
- **Akun aman:** multi-admin, passkey, TOTP.
- **Ringan:** dua image Docker distroless, read-only, non-root, atau binary native dengan
systemd.
| | **SPMPlus** | Nginx Proxy Manager |
|---|---|---|
| Engine | **Slash (Rust)** | Nginx (OpenResty) |
| HTTP/3 | **Ya** | — |
| Kompresi | **zstd, Brotli, gzip** | gzip |
| WAF | **AssaultCuirass** | — |
| Stream TCP/UDP | **Ya, plus TLS passthrough (SNI)** | Ya |
| Rate limiting | **Per route, dari panel** | Lewat config manual |
| Apply perubahan | **Validasi, preview diff, swap atomik, riwayat versi** | Tulis config, lalu reload |
| Metrics | **Dashboard + Prometheus** | — |
| Arsitektur | **Proxy dan panel terpisah** | Satu container |
---
## Mulai dalam lima menit
**Slash saja, dengan Slashfile:**
```sh
git clone https://kubeman.unej.ac.id/geohot/slash.git && cd slash
docker build -f docker/Dockerfile.proxy --target final -t slash .
docker run -d --name slash --network host --restart unless-stopped \
-v "$PWD/Slashfile:/etc/slash/Slashfile:ro" -v slash-data:/data/proxy slash
```
**Dengan panel SPMPlus:**
```sh
git clone https://kubeman.unej.ac.id/geohot/slash.git && cd slash/docker
sudo ./gen-secrets.sh
docker compose up -d --build
docker compose logs panel | grep -i "setup token" | tail -1
```
Lalu buka panel lewat SSH tunnel (`ssh -L 8443:127.0.0.1:8443 user@server`) di
`http://localhost:8443`.
**Kebutuhan:** Linux 64-bit (x86_64 atau ARM64), 1 vCPU dan 512 MB RAM sudah cukup untuk
memulai; 2 vCPU dan 2 GB RAM untuk ±10.000 user bersamaan. Port 80, 443/tcp, dan 443/udp.
---
## Dokumentasi
| | |
|---|---|
| [README](https://kubeman.unej.ac.id/geohot/slash/-/blob/main/README.md) | Panduan lengkap dan troubleshooting |
| [Slashfile](https://kubeman.unej.ac.id/geohot/slash/-/blob/main/docs/slashfile.md) | Referensi konfigurasi: situs, PHP, WAF, TCP/UDP |
| [AssaultCuirass](https://kubeman.unej.ac.id/geohot/slash/-/blob/main/docs/waf.md) | Cara kerja WAF, akurasi, penyetelan |
| [Instalasi native](https://kubeman.unej.ac.id/geohot/slash/-/blob/main/docs/install-native.md) | systemd tanpa Docker |
| [Benchmark](https://kubeman.unej.ac.id/geohot/slash/-/blob/main/docs/benchmarks.md) | Metode dan cara mengulang pengukuran |
Open source, dual-licensed [MIT](https://kubeman.unej.ac.id/geohot/slash/-/blob/main/LICENSE-MIT)
atau [Apache-2.0](https://kubeman.unej.ac.id/geohot/slash/-/blob/main/LICENSE-APACHE).
© 2026 Agung Hendro.
Clone repository
  • home id
  • Home