From d32e4740259e41fa152480a432f54f9d5bf6e92e Mon Sep 17 00:00:00 2001
From: SamNet-dev
Date: Tue, 24 Feb 2026 00:07:58 -0600
Subject: [PATCH] feat: migrate MTProxyMax to Gitea + bump telemt engine to
v3.0.13
- All install/README URLs point to git.samnet.dev
- Container registry switched to Gitea
- GitHub Actions converted to Gitea Actions
- Engine bumped from v3.0.7 to v3.0.13 (TLS full cert, ME stability, pool hardswap)
- Self-update mechanism stays on GitHub (pending account restoration)
---
.gitattributes | 3 +
.gitea/workflows/build-engine.yml | 74 +
.gitignore | 3 +
LICENSE | 21 +
README.md | 557 +++
install.sh | 7 +
main.png | Bin 0 -> 109899 bytes
mtproxymax.sh | 5890 +++++++++++++++++++++++++++++
8 files changed, 6555 insertions(+)
create mode 100644 .gitattributes
create mode 100644 .gitea/workflows/build-engine.yml
create mode 100644 .gitignore
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 install.sh
create mode 100644 main.png
create mode 100644 mtproxymax.sh
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..5db39a8
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,3 @@
+* text=auto
+*.sh text eol=lf
+LICENSE text eol=lf
diff --git a/.gitea/workflows/build-engine.yml b/.gitea/workflows/build-engine.yml
new file mode 100644
index 0000000..0c5542e
--- /dev/null
+++ b/.gitea/workflows/build-engine.yml
@@ -0,0 +1,74 @@
+name: Build Telemt Engine
+
+on:
+ workflow_dispatch:
+ inputs:
+ telemt_commit:
+ description: 'Telemt commit hash to build from'
+ required: true
+ default: 'd38d7f2'
+ version_tag:
+ description: 'Version tag (e.g. 3.0.13-d38d7f2)'
+ required: true
+ default: '3.0.13-d38d7f2'
+
+env:
+ REGISTRY: git.samnet.dev
+ IMAGE_NAME: mtproxymax-telemt
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Set up QEMU (for ARM builds)
+ uses: docker/setup-qemu-action@v3
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+
+ - name: Log in to Gitea Container Registry
+ uses: docker/login-action@v3
+ with:
+ registry: ${{ env.REGISTRY }}
+ username: ${{ gitea.actor }}
+ password: ${{ secrets.REGISTRY_TOKEN }}
+
+ - name: Create Dockerfile
+ run: |
+ cat > Dockerfile <<'DEOF'
+ FROM rust:1-bookworm AS builder
+ ARG TELEMT_REPO=telemt/telemt
+ ARG TELEMT_COMMIT
+ RUN apt-get update && apt-get install -y --no-install-recommends git && rm -rf /var/lib/apt/lists/*
+ RUN git clone "https://github.com/${TELEMT_REPO}.git" /build
+ WORKDIR /build
+ RUN git checkout "${TELEMT_COMMIT}"
+ ENV CARGO_PROFILE_RELEASE_LTO=true CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 CARGO_PROFILE_RELEASE_DEBUG=false
+ RUN cargo build --release && strip target/release/telemt 2>/dev/null || true && cp target/release/telemt /telemt
+ FROM debian:bookworm-slim
+ RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/*
+ COPY --from=builder /telemt /usr/local/bin/telemt
+ RUN chmod +x /usr/local/bin/telemt
+ STOPSIGNAL SIGINT
+ ENTRYPOINT ["telemt"]
+ DEOF
+ sed -i 's/^ //' Dockerfile
+
+ - name: Lowercase owner
+ id: owner
+ run: echo "name=$(echo '${{ gitea.repository_owner }}' | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_OUTPUT"
+
+ - name: Build and push multi-arch image
+ uses: docker/build-push-action@v6
+ with:
+ context: .
+ platforms: linux/amd64,linux/arm64
+ push: true
+ build-args: |
+ TELEMT_COMMIT=${{ github.event.inputs.telemt_commit }}
+ tags: |
+ ${{ env.REGISTRY }}/${{ steps.owner.outputs.name }}/${{ env.IMAGE_NAME }}:${{ github.event.inputs.version_tag }}
+ ${{ env.REGISTRY }}/${{ steps.owner.outputs.name }}/${{ env.IMAGE_NAME }}:latest
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4ac4dc3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+__pycache__/
+*.pyc
+.claude/
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..959aafb
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2026 SamNet Technologies
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..50bc816
--- /dev/null
+++ b/README.md
@@ -0,0 +1,557 @@
+
+
MTProxyMax
+ The Ultimate Telegram MTProto Proxy Manager
+
+ One script. Full control. Zero hassle.
+
+
+
+
+
+
+
+
+
+
+ Quick Start •
+ Features •
+ Comparison •
+ Telegram Bot •
+ CLI Reference •
+ Changelog
+
+
+
+---
+
+MTProxyMax is a full-featured Telegram MTProto proxy manager powered by the **telemt 3.x Rust engine**. It wraps the raw proxy engine with an interactive TUI, a complete CLI, a Telegram bot for remote management, per-user access control, traffic monitoring, proxy chaining, and automatic updates — all in a single bash script.
+
+
+
+```bash
+sudo bash -c "$(curl -fsSL https://git.samnet.dev/SamNet-dev/MTProxyMax/raw/branch/main/install.sh)"
+```
+
+---
+
+## Why MTProxyMax?
+
+Most MTProxy tools give you a proxy and a link. That's it. MTProxyMax gives you a **full management platform**:
+
+- 🔐 **Multi-user secrets** with individual bandwidth quotas, device limits, and expiry dates
+- 🤖 **Telegram bot** with 17 commands — manage everything from your phone
+- 🖥️ **Interactive TUI** — no need to memorize commands, menu-driven setup
+- 📊 **Prometheus metrics** — real per-user traffic stats, not just iptables guesses
+- 🔗 **Proxy chaining** — route through SOCKS5 upstreams for extra privacy
+- 🔄 **Auto-recovery** — detects downtime, restarts automatically, alerts you on Telegram
+- 🐳 **Pre-built Docker images** — installs in seconds, not minutes
+
+---
+
+## 🚀 Quick Start
+
+### One-Line Install
+
+```bash
+sudo bash -c "$(curl -fsSL https://git.samnet.dev/SamNet-dev/MTProxyMax/raw/branch/main/install.sh)"
+```
+
+The interactive wizard walks you through everything: port, domain, first user secret, and optional Telegram bot setup.
+
+### Manual Install
+
+```bash
+curl -fsSL https://git.samnet.dev/SamNet-dev/MTProxyMax/raw/branch/main/mtproxymax.sh -o mtproxymax
+chmod +x mtproxymax
+sudo ./mtproxymax install
+```
+
+### After Install
+
+```bash
+mtproxymax # Open interactive TUI
+mtproxymax status # Check proxy health
+```
+
+---
+
+## ✨ Features
+
+### 🛡️ FakeTLS V2 Obfuscation
+
+Your proxy traffic looks identical to normal HTTPS traffic. The **Fake TLS V2** engine mirrors real TLS 1.3 sessions — per-domain profiles, real cipher suites, dynamic certificate lengths, and realistic record fragmentation. The TLS handshake SNI points to a cover domain (e.g., `cloudflare.com`), making it indistinguishable from regular web browsing to any DPI system.
+
+**Traffic masking** goes further — when a non-Telegram client probes your server, the connection is forwarded to the real cover domain. Your server responds exactly like cloudflare.com would.
+
+---
+
+### 👥 Multi-User Secret Management
+
+Each user gets their own **secret key** with a human-readable label:
+
+- **Add/remove** users instantly — config regenerates and proxy hot-reloads
+- **Enable/disable** access without deleting the key
+- **Rotate** a user's secret — new key, same label, old link stops working
+- **QR codes** — scannable directly in Telegram
+
+---
+
+### 🔒 Per-User Access Control
+
+Fine-grained limits enforced at the engine level:
+
+| Limit | Description | Example |
+|-------|-------------|---------|
+| **Max Connections** | Simultaneous TCP connections | `100` |
+| **Max IPs** | Unique devices/IPs allowed | `5` |
+| **Data Quota** | Total bandwidth cap | `10G`, `500M` |
+| **Expiry Date** | Auto-disable after date | `2026-12-31` |
+
+```bash
+mtproxymax secret setlimits alice 100 5 10G 2026-12-31
+```
+
+---
+
+### 📋 User Management Recipes
+
+
+Prevent Key Sharing
+
+```bash
+mtproxymax secret setlimit alice ips 1 # Single person only
+mtproxymax secret setlimit family ips 5 # Family of up to 5 devices
+```
+
+If someone with `ips 1` shares their link, the second device gets rejected automatically.
+
+
+
+
+IP Limit Tiers
+
+| Scenario | `max_ips` |
+|----------|-----------|
+| Single person, one device | `1` |
+| Single person, multiple devices | `2-3` |
+| Small family | `5` |
+| Small group / office | `20-30` |
+| Public/open link | `0` (unlimited) |
+
+
+
+
+Time-Limited Sharing Link
+
+```bash
+mtproxymax secret add shared-link
+mtproxymax secret setlimits shared-link 50 30 10G 2026-06-01
+```
+
+When the expiry date hits, the link stops working automatically.
+
+
+
+
+Per-Person Keys (Recommended)
+
+```bash
+mtproxymax secret add alice
+mtproxymax secret add bob
+mtproxymax secret add charlie
+
+# Each person gets their own link — revoke individually
+mtproxymax secret setlimit alice ips 2
+mtproxymax secret setlimit bob ips 1
+mtproxymax secret setlimit charlie ips 3
+```
+
+
+
+
+Disable, Rotate, Remove
+
+```bash
+mtproxymax secret disable bob # Temporarily cut off
+mtproxymax secret enable bob # Restore access
+
+mtproxymax secret rotate alice # New key, old link dies instantly
+
+mtproxymax secret remove bob # Permanent removal
+```
+
+
+
+---
+
+### 🤖 Telegram Bot (17 Commands)
+
+Full proxy management from your phone. Setup takes 60 seconds:
+
+```bash
+mtproxymax telegram setup
+```
+
+| Command | Description |
+|---------|-------------|
+| `/mp_status` | Proxy status, uptime, connections |
+| `/mp_secrets` | List all users with active connections |
+| `/mp_link` | Get proxy details + QR code image |
+| `/mp_add ` | Add new user |
+| `/mp_remove ` | Delete user |
+| `/mp_rotate ` | Generate new key for user |
+| `/mp_enable ` | Re-enable disabled user |
+| `/mp_disable ` | Temporarily disable user |
+| `/mp_limits` | Show all user limits |
+| `/mp_setlimit` | Set user limits |
+| `/mp_traffic` | Per-user traffic breakdown |
+| `/mp_upstreams` | List proxy chains |
+| `/mp_health` | Run diagnostics |
+| `/mp_restart` | Restart proxy |
+| `/mp_update` | Check for updates |
+| `/mp_help` | Show all commands |
+
+**Automatic alerts:**
+- 🔴 Proxy down → instant notification + auto-restart attempt
+- 🟢 Proxy started → sends connection details + QR codes
+- 📊 Periodic traffic reports at your chosen interval
+
+---
+
+### 🔗 Proxy Chaining (Upstream Routing)
+
+Route traffic through intermediate servers:
+
+```bash
+# Route 20% through Cloudflare WARP
+mtproxymax upstream add warp socks5 127.0.0.1:40000 - - 20
+
+# Route through a backup VPS
+mtproxymax upstream add backup socks5 203.0.113.50:1080 user pass 80
+
+# Hostnames are supported (resolved by the engine)
+mtproxymax upstream add remote socks5 my-proxy.example.com:1080 user pass 50
+```
+
+Supports **SOCKS5** (with auth), **SOCKS4**, and **direct** routing with weight-based load balancing. Addresses can be IPs or hostnames.
+
+---
+
+### 📊 Real-Time Traffic Monitoring
+
+Prometheus metrics give you real per-user stats:
+
+```bash
+mtproxymax traffic # Per-user breakdown
+mtproxymax status # Overview with connections count
+```
+
+- Bytes uploaded/downloaded per user
+- Active connections per user
+- Cumulative tracking across restarts
+
+---
+
+### 🌍 Geo-Blocking
+
+```bash
+mtproxymax geoblock add ir # Block Iran
+mtproxymax geoblock add cn # Block China
+mtproxymax geoblock list # See blocked countries
+```
+
+IP-level CIDR blocklists enforced via iptables — traffic is dropped before reaching the proxy.
+
+---
+
+### 💰 Ad-Tag Monetization
+
+```bash
+mtproxymax adtag set
+```
+
+Get your ad-tag from [@MTProxyBot](https://t.me/MTProxyBot). Users see a pinned channel — you earn from the proxy.
+
+---
+
+### ⚙️ Engine Management
+
+```bash
+mtproxymax engine status # Current engine version
+mtproxymax engine rebuild # Force rebuild engine image
+mtproxymax rebuild # Force rebuild from source
+```
+
+Engine updates are delivered through `mtproxymax update`. Pre-built multi-arch Docker images (amd64 + arm64) are pulled automatically. Source compilation is the automatic fallback.
+
+---
+
+## 📊 Comparison
+
+### MTProxyMax vs Other Solutions
+
+| Feature | **MTProxyMax** | **mtg v2** (Go) | **Official MTProxy** (C) | **Bash Installers** |
+|---------|:-:|:-:|:-:|:-:|
+| **Engine** | telemt 3.x (Rust) | mtg (Go) | MTProxy (C) | Various |
+| **FakeTLS** | ✅ | ✅ | ❌ (needs patches) | Varies |
+| **Traffic Masking** | ✅ | ✅ | ❌ | ❌ |
+| **Multi-User Secrets** | ✅ (unlimited) | ❌ (1 secret) | Multi-secret | Usually 1 |
+| **Per-User Limits** | ✅ (conns, IPs, quota, expiry) | ❌ | ❌ | ❌ |
+| **Per-User Traffic Stats** | ✅ (Prometheus) | ❌ | ❌ | ❌ |
+| **Telegram Bot** | ✅ (17 commands) | ❌ | ❌ | ❌ |
+| **Interactive TUI** | ✅ | ❌ | ❌ | ❌ |
+| **Proxy Chaining** | ✅ (SOCKS5/4, weighted) | ✅ (SOCKS5) | ❌ | ❌ |
+| **Geo-Blocking** | ✅ | IP allowlist/blocklist | ❌ | ❌ |
+| **Ad-Tag Support** | ✅ | ❌ (removed in v2) | ✅ | Varies |
+| **QR Code Generation** | ✅ | ❌ | ❌ | Some |
+| **Auto-Recovery** | ✅ (with alerts) | ❌ | ❌ | ❌ |
+| **Auto-Update** | ✅ | ❌ | ❌ | ❌ |
+| **Docker** | ✅ (multi-arch) | ✅ | ❌ | Varies |
+| **User Expiry Dates** | ✅ | ❌ | ❌ | ❌ |
+| **Bandwidth Quotas** | ✅ | ❌ | ❌ | ❌ |
+| **Device Limits** | ✅ | ❌ | ❌ | ❌ |
+| **Active Development** | ✅ | ✅ | Abandoned | Varies |
+
+
+Why Not mtg?
+
+[mtg](https://github.com/9seconds/mtg) is solid and minimal — by design. It's **"highly opinionated"** and intentionally barebones. Fine for a single-user fire-and-forget proxy.
+
+But mtg v2 dropped ad-tag support, only supports one secret, has no user limits, no management interface, and no auto-recovery.
+
+
+
+
+Why Not the Official MTProxy?
+
+[Telegram's official MTProxy](https://github.com/TelegramMessenger/MTProxy) (C implementation) was **last updated in 2019**. No FakeTLS, no traffic masking, no per-user controls, manual compilation, no Docker.
+
+
+
+
+Why Not a Simple Bash Installer?
+
+Scripts like MTProtoProxyInstaller install a proxy and give you a link. That's it. No user management, no monitoring, no bot, no updates, no recovery.
+
+MTProxyMax is not just an installer — it's a **management platform** that happens to install itself.
+
+
+
+---
+
+## 🏗️ Architecture
+
+```
+Telegram Client
+ │
+ ▼
+┌─────────────────────────┐
+│ Your Server (port 443) │
+│ ┌───────────────────┐ │
+│ │ Docker Container │ │
+│ │ ┌─────────────┐ │ │
+│ │ │ telemt │ │ │ ← Rust/Tokio engine
+│ │ │ (FakeTLS) │ │ │
+│ │ └──────┬──────┘ │ │
+│ └─────────┼─────────┘ │
+│ │ │
+│ ┌──────┴──────┐ │
+│ ▼ ▼ │
+│ Direct SOCKS5 │ ← Upstream routing
+│ routing chaining │
+└─────────┬───────────────┘
+ │
+ ▼
+ Telegram Servers
+```
+
+| Component | Role |
+|-----------|------|
+| **mtproxymax.sh** | Single bash script: CLI, TUI, config manager |
+| **telemt** | Rust MTProto engine running inside Docker |
+| **Telegram bot service** | Independent systemd service polling Bot API |
+| **Prometheus endpoint** | `/metrics` on port 9090 (localhost only) |
+
+---
+
+## 📖 CLI Reference
+
+
+Proxy Management
+
+```bash
+mtproxymax install # Run installation wizard
+mtproxymax uninstall # Remove everything
+mtproxymax start # Start proxy
+mtproxymax stop # Stop proxy
+mtproxymax restart # Restart proxy
+mtproxymax status # Show proxy status
+mtproxymax menu # Open interactive TUI
+```
+
+
+
+
+User Secrets
+
+```bash
+mtproxymax secret add # Add user
+mtproxymax secret remove # Remove user
+mtproxymax secret list # List all users
+mtproxymax secret rotate # New key, same label
+mtproxymax secret enable # Re-enable user
+mtproxymax secret disable # Temporarily disable
+mtproxymax secret link [label] # Show proxy link
+mtproxymax secret qr [label] # Show QR code
+mtproxymax secret setlimit # Set individual limit
+mtproxymax secret setlimits [expires] # Set all limits
+```
+
+
+
+
+Configuration
+
+```bash
+mtproxymax port [get|] # Get/set proxy port
+mtproxymax ip [get|auto|] # Get/set custom IP for proxy links
+mtproxymax domain [get|clear|] # Get/set FakeTLS domain
+mtproxymax adtag set # Set ad-tag
+mtproxymax adtag remove # Remove ad-tag
+```
+
+
+
+
+Security & Routing
+
+```bash
+mtproxymax geoblock add # Block country
+mtproxymax geoblock remove # Unblock country
+mtproxymax geoblock list # List blocked countries
+mtproxymax upstream list # List upstreams
+mtproxymax upstream add [user] [pass] [weight]
+mtproxymax upstream remove # Remove upstream
+mtproxymax upstream test # Test connectivity
+```
+
+
+
+
+Monitoring
+
+```bash
+mtproxymax traffic # Per-user traffic breakdown
+mtproxymax logs # Stream live logs
+mtproxymax health # Run diagnostics
+```
+
+
+
+
+Engine & Updates
+
+```bash
+mtproxymax engine status # Show current engine version
+mtproxymax engine rebuild # Force rebuild engine image
+mtproxymax rebuild # Force rebuild from source
+mtproxymax update # Check for script + engine updates
+```
+
+
+
+
+Telegram Bot
+
+```bash
+mtproxymax telegram setup # Interactive bot setup
+mtproxymax telegram status # Show bot status
+mtproxymax telegram test # Send test message
+mtproxymax telegram disable # Disable bot
+mtproxymax telegram remove # Remove bot completely
+```
+
+
+
+---
+
+## 💻 System Requirements
+
+| Requirement | Details |
+|-------------|---------|
+| **OS** | Ubuntu, Debian, CentOS, RHEL, Fedora, Rocky, AlmaLinux, Alpine |
+| **Docker** | Auto-installed if not present |
+| **RAM** | 256MB minimum |
+| **Access** | Root required |
+| **Bash** | 4.2+ |
+
+---
+
+## 📁 Configuration Files
+
+| File | Purpose |
+|------|---------|
+| `/opt/mtproxymax/settings.conf` | Proxy settings (port, domain, limits) |
+| `/opt/mtproxymax/secrets.conf` | User keys, limits, expiry dates |
+| `/opt/mtproxymax/upstreams.conf` | Upstream routing rules |
+| `/opt/mtproxymax/mtproxy/config.toml` | Generated telemt engine config |
+
+---
+
+## 📋 Changelog
+
+### v1.2.0 — Engine v3.0.7 + Custom IP
+
+**Engine Upgrade (v3.0.4 → v3.0.7):**
+
+- **Fake TLS V2** — Complete rewrite of the TLS front. Handshakes now mirror real TLS 1.3 sessions with per-domain profiles, dynamic certificate lengths, and realistic record fragmentation. Significantly harder to fingerprint via DPI
+- **ME Pool V2** — Middle-end connections now use keepalive padding frames, staggered warmup, and exponential backoff reconnects for better stability under load
+- **Dynamic config reload** — Engine picks up config.toml changes without a restart
+- **SOCKS proxy hostname support** — Upstream SOCKS4/SOCKS5 proxies now accept hostnames in addition to IPs
+- **Frame size fixes** — Resolved "frame too large" errors on middle-end connections
+- **Extended handshake timeout** — `client_handshake` raised from 15s to 30s for slow networks
+
+**New Features:**
+
+- **Custom IP** — Set a custom IP for proxy links when behind NAT, CDN, or multi-IP setups. The proxy still binds to all interfaces — this only affects link/QR generation
+ ```bash
+ mtproxymax ip 203.0.113.50 # Set custom IP
+ mtproxymax ip auto # Reset to auto-detect
+ ```
+ Also available in the setup wizard and TUI settings menu
+
+**Performance:**
+
+- **LTO builds** — Engine compiled with Link-Time Optimization (`LTO=true`, `codegen-units=1`) for ~10-20% faster throughput
+- **No default resource caps** — Docker CPU/memory limits now default to unlimited instead of 1 core / 256MB
+
+### v1.1.0 — Per-User Limits + Telegram Bot
+
+- Per-user connection, IP, quota, and expiry limits
+- Telegram bot with 17 commands for remote management
+- Proxy chaining via SOCKS5/SOCKS4 upstreams
+- Geo-blocking with CIDR blocklists
+- Auto-recovery with Telegram alerts
+
+### v1.0.0 — Initial Release
+
+- Full MTProto proxy management with telemt 3.x Rust engine
+- Interactive TUI + complete CLI
+- Multi-user secret management with QR codes
+- FakeTLS obfuscation with traffic masking
+- Prometheus metrics endpoint
+- Auto-update system
+
+---
+
+## 🙏 Credits
+
+Built on top of **telemt** — a high-performance MTProto proxy engine written in Rust/Tokio. All proxy protocol handling, FakeTLS, traffic masking, and per-user enforcement is powered by telemt.
+
+---
+
+## 📄 License
+
+MIT License — see [LICENSE](LICENSE) for details.
+
+Copyright (c) 2026 SamNet Technologies
diff --git a/install.sh b/install.sh
new file mode 100644
index 0000000..387be36
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+# MTProxyMax Quick Installer — SamNet Technologies
+# Usage: curl -sL https://git.samnet.dev/SamNet-dev/MTProxyMax/raw/branch/main/install.sh | sudo bash
+set -e
+SCRIPT_URL="https://git.samnet.dev/SamNet-dev/MTProxyMax/raw/branch/main/mtproxymax.sh"
+if [ "$(id -u)" -ne 0 ]; then echo "Run as root: curl -sL $SCRIPT_URL | sudo bash" >&2; exit 1; fi
+curl -fsSL "$SCRIPT_URL" -o /tmp/mtproxymax.sh && bash /tmp/mtproxymax.sh install && rm -f /tmp/mtproxymax.sh
diff --git a/main.png b/main.png
new file mode 100644
index 0000000000000000000000000000000000000000..38c20637ba48976ccb88d50f92da9cf508aab96d
GIT binary patch
literal 109899
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