Cecep Purwana

I am a Personal fun

Cecep Purwana

Seorang Driver Dump Truck Yang Menjadikan Computer Sebagai Hobi Dan Memiliki Ketertarikan Akan Dunia IT,Serta Ingin Selalu Mencoba Sesuatu Yang Baru Untuk Menambah Pengetahuan Dan Pengalaman Diri. "Computer is my hobby, the street is my life"

  • Jalan Raya Badau Km.11 Rt.006.Rw.002 Tanjung Pandan Belitung 33451
  • +628197887769
  • purwana.cecep@gmail.com
  • www.ceceppurwana.blogspot.co.id
Me

My Professional Skills

Web Development 90%
Internet Marketing 95%
Computer Technician 95%
Blogger 95%
Driver 97%

Jasa Pembuatan Website

Menerima jasa pembuatan website Usaha,Pribadi,Organisasi,Sekolah,Berita,Iklan Online,Toko Online,dll sesuai dengan permintaan anda

Service Computer

Jasa Service komputer belitung terpercaya dan berpengalaman.Kami memberikan service dan layanan terbaik sehingga customer merasa puas akan layanan yang kami berikan

Perakitan Computer

Jasa Perakitan Komputer kantor, pribadi, maupun game/warnet, Kami Memenuhi kebutuhan anda berdasarkan budget dengan mengutamakan kualitas

Internet Marketing

Merancang cara pemasaran atau modern marketing plan yang fokus mendapatkan prospek atau leads hingga meningkatkan convertion rate merupakan pilihan yang cepat, tepat dan murah.

Pemasangan CCTV

Menerima Jasa Setting CCTV , Jasa Pemasangan CCTV dan Perawatan CCTV untuk Rumah, Kafe, Hotel, Penginapan, Rumah Makan, Kantor, Warnet dan lain-lainnya.Keterangan lebih lanjut hubungi kami.

Maintenance Computer

Jasa Maintenance komputer untuk perkantoran,sekolah atau warnet,khusus bagi anda yang menghargai waktu berharga anda.Serahkan urusan ini kepada kami.Yang terbaik hanya untuk anda

0
completed project
0
my client
0
facebook like
0
work partners
  • Refresh VPS No Reboot

    Refresh VPS No Reboot
    Halo sobat,kali ini kita akan membuat sebuah panel menu auto refresh dengan penjadwalan yang bisa di atur,mulai dari 1 jam sampai dengan 1 bulan.Sebagai admin sebuah server atau VPS terkadang kita perlu merefresh cpu.ram dan ruang swap untuk suatu tujuan tetapi tanpa perlu mereboot server atau VPS.
    Sebelum kita memulai langkah-langkah pembuatan panel menu Refresh VPS No Reboot,anda harus berada pada akses root,dan sistem operasi yang saya gunakan saat membuat tutorial ini adalah ubuntu server 20.04 lts.Cara ini juga bisa di gunakan sampai pada versi ubuntu 24.04 lts ,untuk versi ubuntu server di atasnya saya belum pernah mencoba nya.
    Berikut Panduan Lengkap Membuat Menu fresh dengan Auto-Refresh dan Status Checker
    Langkah 1: Membuat File Script fresh :
    Kita akan membuat file script baru yang sudah diperbarui dengan opsi penjadwalan yang lebih banyak.
    1.Buka editor teks nano:
    2.Salin seluruh kode di bawah ini, lalu tempel ke dalam editor nano.
    #!/bin/bash
    
    # --- Script Menu Refresh Sistem dengan Auto-Scheduler & Status Checker (Versi Perpanjangan) ---
    # Nama: fresh
    # Fungsi: Menu interaktif untuk merefresh CPU, RAM, Swap, penjadwalan, dan status
    # Author: AI Assistant
    # -------------------------------------------------------------------------
    
    # Fungsi untuk menjalankan refresh otomatis (tanpa interaksi)
    run_auto_refresh() {
        echo "$(date): Memulai auto-refresh..." >> /var/log/fresh-auto.log
        sync
        echo 3 > /proc/sys/vm/drop_caches
        swapoff -a
        swapon -a
        echo "$(date): Auto-refresh selesai." >> /var/log/fresh-auto.log
    }
    
    # Cek argumen --auto untuk mode otomatis
    if [ "$1" == "--auto" ]; then
        run_auto_refresh
        exit 0
    fi
    
    # Cek apakah script dijalankan dengan sudo (untuk mode interaktif)
    if [ "$(id -u)" -ne 0 ]; then
       echo -e "\e[31mError: Script ini harus dijalankan dengan hak akses root (sudo).\e[0m" >&2
       exit 1
    fi
    
    # Fungsi untuk menampilkan menu utama
    tampilkan_menu() {
        clear
        echo -e "\e[36m========================================\e[0m"
        echo -e "\e[1;32m        MENU REFRESH SISTEM VPS       \e[0m"
        echo -e "\e[36m========================================\e[0m"
        echo "Pilih tindakan yang ingin dilakukan:"
        echo "1. Kelola Proses CPU (buka htop)"
        echo "2. Refresh RAM (Hapus Cache)"
        echo "3. Refresh Swap"
        echo "4. Refresh Semua (RAM + Swap)"
        echo "5. Lihat Status Memori Saat Ini"
        echo "6. Jadwalkan Auto Refresh"
        echo "7. Cek Status Auto Refresh"
        echo "0. Keluar"
        echo -e "\e[36m----------------------------------------\e[0m"
    }
    
    # Fungsi untuk menu penjadwalan
    menu_scheduler() {
        while true; do
            clear
            echo -e "\e[36m========================================\e[0m"
            echo -e "\e[1;34m       MENU JADWAL AUTO REFRESH       \e[0m"
            echo -e "\e[36m========================================\e[0m"
            echo "Pilih interval waktu:"
            echo "1. Setiap 1 Jam"
            echo "2. Setiap 3 Jam"
            echo "3. Setiap 6 Jam"
            echo "4. Setiap 12 Jam"
            echo "5. Setiap 24 Jam (1 Hari)"
            echo "6. Setiap 1 Minggu"
            echo "7. Setiap 2 Minggu"
            echo "8. Setiap 1 Bulan"
            echo "9. Hapus Semua Jadwal"
            echo "0. Kembali ke Menu Utama"
            echo -e "\e[36m----------------------------------------\e[0m"
            read -p "Masukkan pilihan Anda: " pilihan_sched
    
            case $pilihan_sched in
                1) cron_interval="0 * * * *"; break ;; # Setiap jam penuh
                2) cron_interval="0 */3 * * *"; break ;; # Setiap 3 jam
                3) cron_interval="0 */6 * * *"; break ;; # Setiap 6 jam
                4) cron_interval="0 */12 * * *"; break ;; # Setiap 12 jam
                5) cron_interval="0 0 * * *"; break ;; # Setiap hari pukul 00:00
                6) cron_interval="0 0 * * 0"; break ;; # Setiap Minggu pukul 00:00
                7) cron_interval="0 0 */14 * *"; break ;; # Setiap 14 hari (2 minggu)
                8) cron_interval="0 0 1 * *"; break ;; # Setiap bulan pukul 00:00 tanggal 1
                9)
                    echo "Menghapus semua jadwal 'fresh --auto'..."
                    (crontab -l 2>/dev/null | grep -v "fresh --auto") | crontab -
                    echo -e "\e[32mSemua jadwal berhasil dihapus.\e[0m"
                    pause
                    return
                    ;;
                0) return ;;
                *) 
                    echo -e "\e[31mPilihan tidak valid.\e[0m"
                    pause
                    ;;
            esac
        done
    
        # Tambahkan ke crontab
        cron_job="$cron_interval sudo /usr/local/bin/fresh --auto >> /var/log/fresh-auto.log 2>&1"
        echo "Menambahkan jadwal baru ke crontab..."
        (crontab -l 2>/dev/null; echo "$cron_job") | crontab -
        
        echo -e "\e[32mJadwal berhasil dibuat!\e[0m"
        echo "Log akan disimpan di /var/log/fresh-auto.log"
        pause
    }
    
    # Fungsi untuk mengecek status auto-refresh
    cek_status_auto_refresh() {
        clear
        echo -e "\e[36m========================================\e[0m"
        echo -e "\e[1;35m       STATUS AUTO REFRESH            \e[0m"
        echo -e "\e[36m========================================\e[0m"
        
        if crontab -l 2>/dev/null | grep -q "fresh --auto"; then
            echo -e "\e[32mStatus: AKTIF\e[0m"
            echo ""
            echo "Jadwal yang sedang berjalan:"
            crontab -l 2>/dev/null | grep --color=auto "fresh --auto"
        else
            echo -e "\e[31mStatus: TIDAK AKTIF\e[0m"
            echo ""
            echo "Tidak ada jadwal auto-refresh yang ditemukan."
        fi
        echo ""
        echo -e "\e[33mLog dapat dilihat di: /var/log/fresh-auto.log\e[0m"
        echo -e "\e[36m----------------------------------------\e[0m"
        pause
    }
    
    # Fungsi untuk pause
    pause() {
        read -p "Tekan [Enter] untuk melanjutkan..."
    }
    
    # Loop utama program
    while true; do
        tampilkan_menu
        read -p "Masukkan pilihan Anda [1-7] atau 0 untuk keluar: " pilihan
    
        case $pilihan in
            1)
                echo -e "\e[33mMembuka htop untuk mengelola proses CPU...\e[0m"
                pause
                htop
                ;;
            2)
                echo -e "\e[33mMembersihkan cache RAM...\e[0m"
                sync && echo 3 > /proc/sys/vm/drop_caches
                echo -e "\e[32mCache RAM berhasil dibersihkan.\e[0m"
                pause
                ;;
            3)
                echo -e "\e[31mPERINGATAN: Pastikan RAM Anda mencukupi!\e[0m"
                free -h
                read -p "Apakah Anda yakin ingin melanjutkan? (y/n) " konfirmasi
                if [[ $konfirmasi =~ ^[Yy]$ ]]; then
                    swapoff -a && swapon -a
                    echo -e "\e[32mSwap berhasil direfresh.\e[0m"
                else
                    echo "Operasi dibatalkan."
                fi
                pause
                ;;
            4)
                echo -e "\e[31mPERINGATAN: Ini akan membersihkan cache RAM dan merefresh Swap.\e[0m"
                free -h
                read -p "Apakah Anda yakin ingin melanjutkan? (y/n) " konfirmasi
                if [[ $konfirmasi =~ ^[Yy]$ ]]; then
                    run_auto_refresh
                    echo -e "\e[32mSemua proses refresh selesai!\e[0m"
                else
                    echo "Operasi dibatalkan."
                fi
                pause
                ;;
            5)
                echo -e "\e[33mStatus Memori Saat Ini:\e[0m"
                free -h
                echo ""
                echo -e "\e[33mPenggunaan Swap:\e[0m"
                swapon --show
                pause
                ;;
            6)
                menu_scheduler
                ;;
            7)
                cek_status_auto_refresh
                ;;
            0)
                echo -e "\e[32mTerima kasih! Sampai jumpa.\e[0m"
                exit 0
                ;;
            *)
                echo -e "\e[31mPilihan tidak valid, silakan coba lagi.\e[0m"
                pause
                ;;
        esac
    done
    3.Simpan file dan keluar dari nano:
    Tekan Ctrl + X.
    Tekan Y untuk konfirmasi.
    Tekan Enter.
    Langkah 2: Memberikan Izin Eksekusi
    sudo chmod +x /usr/local/bin/fresh
    Langkah 3: Konfigurasi sudo Tanpa Password (untuk User root)
    Meskipun Anda adalah user root, menambahkan aturan eksplisit ke sudoers adalah praktik yang baik untuk memastikan script berjalan sesuai harapan.
    1.Edit File sudoers:
    sudo visudo
    2.Tambahkan Aturan Baru. Gulir ke bagian bawah dan tambahkan baris ini:
    # Mengizinkan root menjalankan script fresh tanpa password
    root ALL=(ALL) NOPASSWD: /usr/local/bin/fresh
    3.Simpan dan Keluar:
    Tekan Ctrl + X, lalu Y, dan Enter.
    Langkah 4: Cara Menggunakan Menu fresh yang Baru
    1.Jalankan Menu:
    nano /usr/bin/panel
    2.Eksplorasi Menu:
    Opsi 1-5: Fitur manual seperti sebelumnya.
    Opsi 6: Untuk membuat atau menghapus jadwal auto-refresh.
    Opsi 7 (Baru): Untuk mengecek status.
    Jika aktif, akan menampilkan Status: AKTIF beserta jadwal cron-nya.
    Jika tidak aktif, akan menampilkan Status: TIDAK AKTIF.
    Sekarang, semua fitur sudah siap digunakan.
  • Membuat Menu Panel UDP Hunter

    panel_udp_hunter

    Ini adalah kelanjutan postingan sebelumnya dengan judul : Sistem Anti-MultiLogin UDP dengan Panel On/Off . Jika anda menemukan postingan ini harap untuk membuka dan membaca postingan sebelumnya untuk memahami secara utuh apa yang akan kita bahas di postingan ini.
    Ikuti langkah-langkah di bawah ini untuk membuatnya.
    Langkah 1: Membuat File Skrip hunter
    Kita akan membuat file skrip bernama hunter di direktori /usr/local/bin. Direktori ini ada di PATH sistem, artinya Anda bisa menjalankan skrip dari mana saja dengan cukup mengetik namanya.
    1.Buat file skrip dengan nano:
    sudo nano /usr/local/bin/hunter
    2.Copy-paste seluruh kode di bawah ini ke dalam file nano:
    #!/bin/bash
    
    # Fungsi untuk menampilkan menu
    show_menu() {
        clear
        echo "=========================================="
        echo "     PANEL PENJAGA UDP - HUNTER"
        echo "=========================================="
        echo "1. Aktifkan Penjaga UDP"
        echo "2. Nonaktifkan Penjaga UDP"
        echo "3. Lihat Status Penjaga"
        echo "4. Pantau Log Aktivitas (Live)"
        echo "5. Lihat IP yang Diblokir"
        echo "6. Bersihkan Semua IP yang Diblokir"
        echo "7. Keluar"
        echo "=========================================="
    }
    
    # Loop utama menu
    while true; do
        show_menu
        read -p "Masukkan pilihan Anda [1-7]: " choice
    
        case $choice in
            1)
                echo ">> Mengaktifkan Penjaga..."
                sudo /opt/udp-proxy/panel/enable.sh
                ;;
            2)
                echo ">> Menonaktifkan Penjaga..."
                sudo /opt/udp-proxy/panel/disable.sh
                ;;
            3)
                echo ">> Status Layanan Penjaga:"
                sudo systemctl status udp-enforcer.service --no-pager
                ;;
            4)
                echo ">> Menampilkan log aktivitas (tekan Ctrl+C untuk kembali ke menu):"
                sudo journalctl -u udp-enforcer.service -f
                ;;
            5)
                echo ">> Daftar IP yang saat ini diblokir:"
                sudo iptables -L UDP_ENFORCER -n -v --line-numbers
                ;;
            6)
                echo ">> Membersihkan semua aturan blokir IP..."
                sudo iptables -F UDP_ENFORCER
                echo ">> Semua IP telah dibebaskan dari blokir."
                ;;
            7)
                echo ">> Keluar dari menu Hunter. Sampai jumpa!"
                exit 0
                ;;
            *)
                echo ">> Pilihan tidak valid, silakan coba lagi."
                ;;
        esac
    
        # Jeda sebelum menampilkan menu kembali
        echo ""
        read -p "Tekan [Enter] untuk melanjutkan..."
    done
    3.Simpan dan keluar (Ctrl+X, Y, Enter).
    Langkah 2: Jadikan Skrip Dapat Dieksekusi
    Agar skrip hunter bisa dijalankan, kita perlu memberinya izin eksekusi.
    sudo chmod +x /usr/local/bin/hunter
    Langkah 3: Cara Menggunakan Menu hunter
    1.Buka terminal.
    2.Ketik perintah berikut untuk membuka menu:
    sudo hunter
    3.Anda akan melihat menu interaktif seperti ini:
    PANEL PENJAGA UDP - HUNTER========================================== 1.Aktifkan Penjaga UDP
    2.Nonaktifkan Penjaga UDP
    3.Lihat Status Penjaga
    4.Pantau Log Aktivitas (Live)
    5.Lihat IP yang Diblokir
    6.Bersihkan Semua IP yang Diblokir
    7.Keluar
    Masukkan pilihan Anda [1-7]:
    Enter your code here...
    Sekarang, panel interaktif Anda siap digunakan!
  • Sistem Anti-MultiLogin UDP dengan Panel On-Off

    udp script no multilogin
    Jika anda adalah admin dari sebuah server tunneling khususnya layanan UDP,ini adalah script Sistem Anti-MultiLogin UDP dengan Panel On/Off.Dengan cara ini anda bisa melihat user mana yang melakukan kecurangan multilogin akan bisa di atasi dengan mudah dan realtime.Script ini bisa di gunakan di Ubuntu 20.04 sampai dengan Ubuntu 24.04
    Langkah 0: Persiapan Dan Prasyarat :
    Sebelum memulai, pastikan dua hal ini terpenuhi.
    1.Pastikan Anda memiliki layanan UDP proxy yang sudah berjalan. Anda perlu mengetahui nama layanan systemd-nya. Nama yang umum adalah udp-custom.service, udp-proxy.service, atau xray.service. Untuk panduan ini, kita akan menggunakan udp-custom.service sebagai contoh. Ganti dengan nama layanan Anda yang sebenarnya.
    Cari nama layanan Anda:
    systemctl list-units --type=service | grep -i udp
    2.Instal conntrack. Alat ini wajib untuk memutus koneksi UDP secara paksa.
    # Untuk Debian/Ubuntu
    sudo apt update && sudo apt install conntrack -y
    Langkah 1: Membuat Skrip Penjaga Utama
    Ini adalah otak dari sistem. Skrip ini akan memantau log, mengelola status, dan mengeksekusi aturan firewall.
    1.Buat file skrip di lokasi yang standar:
    sudo nano /opt/udp-proxy/bin/enforcer_service.sh
    2.Copy-paste seluruh kode di bawah ini. Jangan ubah apa pun kecuali yang ada di bagian "KONFIGURASI".
    #!/bin/bash
    
    # =================================================================
    # --- CEK FILE BENDERA (PANEL KONTROL) ---
    # Skrip akan berhenti jika file bendera ini tidak ada.
    # =================================================================
    FLAG_FILE="/opt/udp-proxy/log/enforcer.enabled"
    if [ ! -f "$FLAG_FILE" ]; then
        echo "[$(date)] File bendera '$FLAG_FILE' tidak ditemukan. Penjaga tidak aktif. Keluar."
        exit 0
    fi
    
    # =================================================================
    # --- KONFIGURASI PENJAGA (UBAH BAGIAN INI SAJA) ---
    # =================================================================
    PROTECTED_PORT=36712         # Port UDP yang dilindungi
    STATE_FILE="/opt/udp-proxy/log/enforcer_state.log"
    IPTABLES_CHAIN="UDP_ENFORCER"
    MEMORY_MINUTES=10            # Berapa lama mengingat sesi yang tidak aktif
    TIMEOUT_MINUTES=15           # Sesi dianggap hangus setelah X menit tidak ada aktivitas
    GRACE_PERIOD_SECONDS=120     # Waktu tunggu sebelum IP lama ditendang (120 detik = 2 menit)
    # Nama layanan UDP proxy Anda (DITEMUKAN DI LANGKAH 0)
    UDP_SERVICE_NAME="udp-custom.service"
    # =================================================================
    
    # --- PASTIKAN DIREKTORI YANG DIPERLUKAN ADA ---
    mkdir -p "$(dirname "$STATE_FILE")"
    touch "$STATE_FILE"
    
    # =================================================================
    # --- FUNGSI PEMBERSIH (OTOMATIS LUPA & EKSEKUSI TIMER) ---
    # =================================================================
    function cleanup() {
        echo "[$(date)] =====> MEMULAI PEMBERSIHAN DAN EKSEKUSI TIMER <====="
        local current_time=$(date +%s)
        local timeout_seconds=$((TIMEOUT_MINUTES * 60))
        local temp_state_file=$(mktemp)
    
        while IFS=':' read -r user ip last_seen violation_time; do
            if [[ -z "$user" || -z "$ip" || -z "$last_seen" ]]; then continue; fi
            
            local elapsed=$((current_time - last_seen))
    
            if [ "$elapsed" -lt "$timeout_seconds" ]; then
                if [[ -n "$violation_time" ]]; then
                    local violation_elapsed=$((current_time - violation_time))
                    if [ "$violation_elapsed" -ge "$GRACE_PERIOD_SECONDS" ]; then
                        echo "[$(date)] >>> EKSEKUSI: Timer habis. Memutus & memblokir IP '$ip' (user: '$user')..."
                        sudo conntrack -D -s "$ip" -p udp 2>/dev/null
                        if ! sudo iptables -C "$IPTABLES_CHAIN" -s "$ip" -j DROP &> /dev/null; then
                            sudo iptables -A "$IPTABLES_CHAIN" -s "$ip" -j DROP -m comment --comment "Kicked $USER on $(date +%F-%T)"
                            echo "[$(date)] >>> IP '$ip' telah diblokir."
                        fi
                        continue
                    else
                        echo "[$(date)] [DEBUG] Timer untuk IP '$ip' user '$user' belum habis. Menunggu..."
                        echo "${user}:${ip}:${last_seen}:${violation_time}" >> "$temp_state_file"
                    fi
                else
                    echo "[$(date)] [DEBUG] Sesi normal untuk user '$user' dari IP '$ip'."
                    echo "${user}:${ip}:${last_seen}:" >> "$temp_state_file"
                fi
            else
                echo "[$(date)] Sesi untuk user '$user' dari IP '$ip' kadaluarsa. Membuka blokir..."
                local rule_num=$(sudo iptables -L "$IPTABLES_CHAIN" --line-numbers -n | grep "$ip" | awk '{print $1}' | head -n 1)
                if [ -n "$rule_num" ]; then
                    sudo iptables -D "$IPTABLES_CHAIN" "$rule_num"
                fi
            fi
        done < "$STATE_FILE"
    
        mv "$temp_state_file" "$STATE_FILE"
        echo "[$(date)] =====> PEMBERSIHAN SELESAI <====="
    }
    
    # =================================================================
    # --- INISIALISASI PENJAGA ---
    # =================================================================
    # Buat chain jika belum ada
    if ! sudo iptables -L "$IPTABLES_CHAIN" &> /dev/null; then
        echo "[$(date)] Membuat chain iptables: $IPTABLES_CHAIN"
        sudo iptables -N "$IPTABLES_CHAIN"
    fi
    
    # --- PASTIKAN POSISI ATURAN BENAR (KRUSIAL) ---
    echo "[$(date)] Memastikan aturan iptables berada di posisi teratas..."
    sudo iptables -D INPUT -p udp --dport "$PROTECTED_PORT" -j "$IPTABLES_CHAIN" 2>/dev/null
    sudo iptables -D FORWARD -p udp --dport "$PROTECTED_PORT" -j "$IPTABLES_CHAIN" 2>/dev/null
    sudo iptables -F "$IPTABLES_CHAIN" # Bersihkan aturan lama
    sudo iptables -I INPUT 1 -p udp --dport "$PROTECTED_PORT" -j "$IPTABLES_CHAIN"
    sudo iptables -I FORWARD 1 -p udp --dport "$PROTECTED_PORT" -j "$IPTABLES_CHAIN"
    
    # Jalankan cleanup di latar belakang
    while true; do
        cleanup
        sleep 300
    done &
    CLEANUP_PID=$!
    trap 'kill $CLEANUP_PID; exit' SIGTERM SIGINT
    
    # Memori awal
    echo "[$(date)] Memuat memori awal dari $MEMORY_MINUTES menit terakhir..."
    sudo journalctl -u "$UDP_SERVICE_NAME" --since "$MEMORY_MINUTES minutes ago" --no-pager | grep "Client connected" | sort | awk -F'[][]' '
    {
        for (i=1; i<=NF; i++) {
            if ($i ~ /src:/) { split($i, s, ":"); ip = s[2]; }
            if ($i ~ /user:/) { split($i, u, ":"); user = u[2]; }
        }
        if (user && ip) {
            print user ":" ip ":" systime() ":" > "'"$STATE_FILE"'"
        }
    }'
    awk -i inplace '!seen[$0]++' "$STATE_FILE"
    echo "[$(date)] Memori awal selesai. Penjaga siap bertugas!"
    
    # Loop utama pemantauan
    echo "[$(date)] Memantau log layanan: $UDP_SERVICE_NAME"
    sudo journalctl -u "$UDP_SERVICE_NAME" -f --no-tail | while read line; do
        if [[ "$line" == *"[INFO]"*"[src:"*"[user:"*"Client connected"* ]]; then
            IP=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /src:/){split($i, a, ":"); print a[2]}}}')
            USER=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /user:/){split($i, a, ":"); print a[2]}}}')
            if [[ -n "$IP" && -n "$USER" ]]; then
                echo "[$(date)] Koneksi baru: User '$USER' dari IP '$IP'"
                LAST_ENTRY=$(grep "^${USER}:" "$STATE_FILE" | tail -n 1)
                LAST_IP=$(echo "$LAST_ENTRY" | cut -d':' -f2)
                if [[ -n "$LAST_IP" && "$LAST_IP" != "$IP" ]]; then
                    echo "[$(date)] >>> PELANGGARAN: User '$USER' multi-login (IP lama: '$LAST_IP', IP baru: '$IP')."
                    echo "[$(date)] >>> IP lama '$LAST_IP' akan ditendang dalam $((GRACE_PERIOD_SECONDS / 60)) menit."
                    OLD_LAST_SEEN=$(echo "$LAST_ENTRY" | cut -d':' -f3)
                    sed -i "/^${USER}:${LAST_IP}:/d" "$STATE_FILE"
                    echo "${USER}:${LAST_IP}:${OLD_LAST_SEEN}:$(date +%s)" >> "$STATE_FILE"
                fi
                echo "${USER}:${IP}:$(date +%s)::" >> "$STATE_FILE"
                awk -i inplace '!seen[$0]++' "$STATE_FILE"
            fi
        elif [[ "$line" == *"[INFO]"*"[src:"*"[user:"*"Client disconnected"* ]]; then
            IP=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /src:/){split($i, a, ":"); print a[2]}}}')
            USER=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /user:/){split($i, a, ":"); print a[2]}}}')
            if [[ -n "$IP" && -n "$USER" ]]; then
                echo "[$(date)] User '$USER' dari IP '$IP' disconnect. Membersihkan state..."
                sed -i "/^${USER}:${IP}:/d" "$STATE_FILE"
            fi
        fi
    done
    3.Simpan dan keluar (Ctrl+X, Y, Enter).
    4.Jadikan skrip dapat dieksekusi:
    sudo chmod +x /opt/udp-proxy/bin/enforcer_service.sh
    Langkah 2: Membuat Layanan systemd
    Ini membuat skrip penjaga berjalan otomatis di latar belakang dan restart jika gagal.
    1.Buat file layanan:
    sudo nano /etc/systemd/system/udp-enforcer.service
    2.Copy-paste konfigurasi berikut:
    [Unit]
    Description=UDP Multi-Login Enforcer Service
    After=network.target udp-custom.service
    
    [Service]
    Type=simple
    User=root
    ExecStart=/opt/udp-proxy/bin/enforcer_service.sh
    Restart=always
    RestartSec=10s
    
    [Install]
    WantedBy=multi-user.target
    Penting: Jika nama layanan UDP Anda bukan udp-custom.service, ubah baris After=... sesuai.
    3.Simpan dan keluar (Ctrl+X, Y, Enter).
    4.Aktifkan layanan untuk berjalan saat boot:
    sudo systemctl daemon-reload
    sudo systemctl enable udp-enforcer.service
    Langkah 3: Membuat Panel Kontrol On/Off
    Ini adalah antarmuka sederhana untuk mengontrol penjaga.
    1.Buat direktori untuk panel:
    sudo mkdir -p /opt/udp-proxy/panel
    2.Buat skrip enable.sh:
    sudo nano /opt/udp-proxy/panel/enable.sh
    Isi dengan:
    #!/bin/bash
    echo "Mengaktifkan Penjaga UDP..."
    # Pastikan direktori log ada
    sudo mkdir -p /opt/udp-proxy/log
    # Buat file bendera
    sudo touch /opt/udp-proxy/log/enforcer.enabled
    # Restart layanan untuk menerapkan
    sudo systemctl restart udp-enforcer.service
    echo "Penjaga UDP telah diaktifkan dan dimulai ulang."
    3.Buat skrip disable.sh:
    sudo nano /opt/udp-proxy/panel/disable.sh
    Isi dengan:
    #!/bin/bash
    echo "Menonaktifkan Penjaga UDP..."
    # Hapus file bendera
    sudo rm -f /opt/udp-proxy/log/enforcer.enabled
    # Hentikan layanan
    sudo systemctl stop udp-enforcer.service
    echo "Penjaga UDP telah dinonaktifkan dan dihentikan."
    4.Jadikan kedua skrip panel dapat dieksekusi:
    sudo chmod +x /opt/udp-proxy/panel/enable.sh
    sudo chmod +x /opt/udp-proxy/panel/disable.sh
    Langkah 4: Aktivasi Dan Verifikasi Akhir
    Sekarang kita akan mengaktifkan semuanya dan memastikan berjalan sempurna.
    1.Aktifkan Penjaga menggunakan panel:
    sudo /opt/udp-proxy/panel/enable.sh
    2.Periksa status layanan. Harus active (running):
    sudo systemctl status udp-enforcer.service
    Output yang diharapkan:
    ● udp-enforcer.service - UDP Multi-Login Enforcer Service
         Loaded: loaded (/etc/systemd/system/udp-enforcer.service; enabled; vendor preset: enabled)
         Active: **active (running)** since ...
    3.Periksa log untuk memastikan skrip berjalan:
    sudo journalctl -u udp-enforcer.service -f
    4.Verifikasi aturan iptables ada di posisi teratas:
    sudo iptables -L INPUT -n --line-numbers
    Pastikan aturan yang mengarah ke UDP_ENFORCER ada di nomor 1.
    Sistem Anda sekarang seharusnya sudah siap dan berjalan dengan benar!
    Untuk mempermudah penggunaan script yang telah kita buat di atas,kita akan membuat menu panel sederhana di postingan berikutnya : Membuat Menu Panel Hunter
  • UDP Script NO Multilogin

    udp script no multilogin
    Panduan Membuat Penjaga Koneksi UDP Anti Multi-Login 
     Tujuan : 
     1.Mencegah satu user terhubung dari beberapa IP secara bersamaan. 
    2.Otomatis melepas blokir IP setelah 15 menit tidak aktif (sistem yang adil). 
    3.Memiliki "memori" koneksi saat pertama kali dijalankan. 
    4.Dapat diaktifkan/dinonaktifkan secara manual, dan statusnya akan diingat setelah reboot VPS.
    Langkah 1: Buat Struktur Direktori yang Diperlukan
    Sistem Operasi Ubuntu Server 20.04 lts s/d Ubuntu Server 24.04 lts
    Instal conntrack (jika belum ada). Ini adalah alat penting untuk memutus koneksi secara paksa.
    sudo apt update && sudo apt install conntrack -y
    Jalan kan perintah berikut :
    sudo mkdir -p /opt/udp-proxy/bin
    sudo mkdir -p /opt/udp-proxy/log
    Langkah 2: Membuat Skrip Utama Penjaga
    1.Buat file skrip:
    sudo nano /opt/udp-proxy/bin/enforcer_service.sh
    2.Salin dan tempel seluruh skrip di bawah ini.
    #!/bin/bash
    
    # =================================================================
    # --- CEK FILE BENDERA (KONTROL MANUAL) ---
    # =================================================================
    FLAG_FILE="/opt/udp-proxy/log/enforcer.enabled"
    if [ ! -f "$FLAG_FILE" ]; then
        echo "[$(date)] File bendera '$FLAG_FILE' tidak ditemukan. Penjaga tidak akan dijalankan."
        exit 0
    fi
    
    # =================================================================
    # --- KONFIGURASI PENJAGA ---
    # =================================================================
    PROTECTED_PORT=36712
    STATE_FILE="/opt/udp-proxy/log/enforcer_state.log"
    IPTABLES_CHAIN="UDP_ENFORCER"
    MEMORY_MINUTES=10
    TIMEOUT_MINUTES=15
    GRACE_PERIOD_SECONDS=120 # 2 menit = 120 detik
    
    # =================================================================
    # --- FUNGSI PEMBERSIH (OTOMATIS LUPA & EKSEKUSI TIMER) ---
    # =================================================================
    function cleanup() {
        echo "[$(date)] Memulai pembersihan sesi dan pengecekan timer..."
        local current_time=$(date +%s)
        local timeout_seconds=$((TIMEOUT_MINUTES * 60))
        local temp_state_file=$(mktemp)
    
        if [ ! -f "$STATE_FILE" ]; then
            touch "$STATE_FILE"
            return
        fi
    
        while IFS=':' read -r user ip last_seen violation_time; do
            if [[ -z "$user" || -z "$ip" || -z "$last_seen" ]]; then continue; fi
            
            local elapsed=$((current_time - last_seen))
    
            if [ "$elapsed" -lt "$timeout_seconds" ]; then
                # Sesi masih aktif, periksa apakah ada timer yang perlu dieksekusi
                if [[ -n "$violation_time" ]]; then
                    local violation_elapsed=$((current_time - violation_time))
                    if [ "$violation_elapsed" -ge "$GRACE_PERIOD_SECONDS" ]; then
                        echo "[$(date)] Timer habis. Menendang IP '$ip' untuk user '$user'..."
                        local rule_num=$(sudo iptables -L "$IPTABLES_CHAIN" --line-numbers -n | grep "$ip" | awk '{print $1}' | head -n 1)
                        if [ -n "$rule_num" ]; then
                            sudo iptables -D "$IPTABLES_CHAIN" "$rule_num"
                            echo "[$(date)] Aturan untuk IP '$ip' telah dihapus dari iptables."
                        fi
                        # Jangan tambahkan kembali ke file state, karena sudah ditendang
                        continue 
                    else
                        # Timer belum habis, simpan kembali dengan timer
                        echo "${user}:${ip}:${last_seen}:${violation_time}" >> "$temp_state_file"
                    fi
                else
                    # Tidak ada timer, simpan kembali seperti biasa
                    echo "${user}:${ip}:${last_seen}:" >> "$temp_state_file"
                fi
            else
                # Sesi sudah kadaluarsa, bersihkan
                echo "[$(date)] Sesi untuk user '$user' dari IP '$ip' telah kadaluarsa. Membuka blokir..."
                local rule_num=$(sudo iptables -L "$IPTABLES_CHAIN" --line-numbers -n | grep "$ip" | awk '{print $1}' | head -n 1)
                if [ -n "$rule_num" ]; then
                    sudo iptables -D "$IPTABLES_CHAIN" "$rule_num"
                    echo "[$(date)] Aturan untuk IP '$ip' telah dihapus dari iptables."
                fi
            fi
        done < "$STATE_FILE"
    
        mv "$temp_state_file" "$STATE_FILE"
    }
    
    #!/bin/bash
    
    # =================================================================
    # --- CEK FILE BENDERA (KONTROL MANUAL) ---
    # =================================================================
    FLAG_FILE="/opt/udp-proxy/log/enforcer.enabled"
    if [ ! -f "$FLAG_FILE" ]; then
        echo "[$(date)] File bendera '$FLAG_FILE' tidak ditemukan. Penjaga tidak akan dijalankan."
        exit 0
    fi
    
    # =================================================================
    # --- KONFIGURASI PENJAGA ---
    # =================================================================
    PROTECTED_PORT=36712
    STATE_FILE="/opt/udp-proxy/log/enforcer_state.log"
    IPTABLES_CHAIN="UDP_ENFORCER"
    MEMORY_MINUTES=10
    TIMEOUT_MINUTES=15
    GRACE_PERIOD_SECONDS=120 # 2 menit = 120 detik
    
    # =================================================================
    # --- FUNGSI PEMBERSIH (OTOMATIS LUPA & EKSEKUSI TIMER) ---
    # =================================================================
    function cleanup() {
        echo "[$(date)] =====> MEMULAI PEMBERSIHAN DAN EKSEKUSI TIMER <====="
        local current_time=$(date +%s)
        local timeout_seconds=$((TIMEOUT_MINUTES * 60))
        local temp_state_file=$(mktemp)
    
        if [ ! -f "$STATE_FILE" ]; then
            touch "$STATE_FILE"
            return
        fi
    
        while IFS=':' read -r user ip last_seen violation_time; do
            if [[ -z "$user" || -z "$ip" || -z "$last_seen" ]]; then continue; fi
            
            local elapsed=$((current_time - last_seen))
    
            if [ "$elapsed" -lt "$timeout_seconds" ]; then
                if [[ -n "$violation_time" ]]; then
                    local violation_elapsed=$((current_time - violation_time))
                    if [ "$violation_elapsed" -ge "$GRACE_PERIOD_SECONDS" ]; then
                        echo "[$(date)] >>> EKSEKUSI: Timer habis. Memutus koneksi IP '$ip' untuk user '$user'..."
                        
                        # --- PERUBAHAN KRUSIAL 1: CONNTRACK AGRESIF ---
                        # Hapus SEMUA sesi UDP dari IP sumber, tanpa memandang port.
                        # Ini jauh lebih efektif untuk memutus koneksi.
                        echo "[$(date)] [DEBUG] Menjalankan: sudo conntrack -D -s $ip -p udp"
                        sudo conntrack -D -s "$ip" -p udp 2>/dev/null
                        
                        # --- PERUBAHAN KRUSIAL 2: BLOKIR DI INPUT & FORWARD ---
                        # Kita blokir di kedua chain untuk memastikan tidak ada celah.
                        echo "[$(date)] [DEBUG] Memeriksa aturan iptables untuk IP '$ip'..."
                        if ! sudo iptables -C "$IPTABLES_CHAIN" -s "$ip" -j DROP &> /dev/null; then
                            echo "[$(date)] [DEBUG] Menjalankan: sudo iptables -A $IPTABLES_CHAIN -s $ip -j DROP"
                            sudo iptables -A "$IPTABLES_CHAIN" -s "$ip" -j DROP -m comment --comment "Kicked $USER on $(date +%F-%T)"
                            echo "[$(date)] >>> IP '$ip' telah diblokir di iptables."
                        else
                            echo "[$(date)] [DEBUG] Aturan DROP untuk IP '$ip' sudah ada."
                        fi
                        
                        echo "[$(date)] >>> Eksekusi selesai untuk IP '$ip'."
                        continue 
                    else
                        echo "[$(date)] [DEBUG] Timer untuk IP '$ip' user '$user' belum habis. Menunggu..."
                        echo "${user}:${ip}:${last_seen}:${violation_time}" >> "$temp_state_file"
                    fi
                else
                    echo "[$(date)] [DEBUG] Sesi normal untuk user '$user' dari IP '$ip'."
                    echo "${user}:${ip}:${last_seen}:" >> "$temp_state_file"
                fi
            else
                echo "[$(date)] Sesi untuk user '$user' dari IP '$ip' telah kadaluarsa. Membuka blokir..."
                local rule_num=$(sudo iptables -L "$IPTABLES_CHAIN" --line-numbers -n | grep "$ip" | awk '{print $1}' | head -n 1)
                if [ -n "$rule_num" ]; then
                    echo "[$(date)] [DEBUG] Menghapus aturan iptables nomor $rule_num untuk IP '$ip'."
                    sudo iptables -D "$IPTABLES_CHAIN" "$rule_num"
                fi
            fi
        done < "$STATE_FILE"
    
        mv "$temp_state_file" "$STATE_FILE"
        echo "[$(date)] =====> PEMBERSIHAN SELESAI <====="
    }
    
    # =================================================================
    # --- INISIALISASI PENJAGA ---
    # =================================================================
    mkdir -p "$(dirname "$STATE_FILE")"
    touch "$STATE_FILE"
    
    # Buat chain jika belum ada
    if ! sudo iptables -L "$IPTABLES_CHAIN" &> /dev/null; then
        echo "Membuat chain iptables: $IPTABLES_CHAIN"
        sudo iptables -N "$IPTABLES_CHAIN"
    fi
    # Hubungkan ke INPUT chain
    if ! sudo iptables -C INPUT -p udp --dport "$PROTECTED_PORT" -j "$IPTABLES_CHAIN" &> /dev/null; then
        echo "Menghubungkan chain ke INPUT untuk port $PROTECTED_PORT"
        sudo iptables -I INPUT -p udp --dport "$PROTECTED_PORT" -j "$IPTABLES_CHAIN"
    fi
    # --- PERUBAHAN KRUSIAL 3: HUBUNGKAN JUGA KE FORWARD CHAIN ---
    # Ini penting jika server bertindak sebagai gateway.
    if ! sudo iptables -C FORWARD -p udp --dport "$PROTECTED_PORT" -j "$IPTABLES_CHAIN" &> /dev/null; then
        echo "Menghubungkan chain ke FORWARD untuk port $PROTECTED_PORT"
        sudo iptables -I FORWARD -p udp --dport "$PROTECTED_PORT" -j "$IPTABLES_CHAIN"
    fi
    
    # Jalankan cleanup di latar belakang
    while true; do
        cleanup
        sleep 300 # Jalankan pembersihan setiap 5 menit
    done &
    CLEANUP_PID=$!
    trap 'kill $CLEANUP_PID; exit' SIGTERM SIGINT
    
    # Memori awal
    echo "Penjaga sedang mengingat koneksi dalam $MEMORY_MINUTES menit terakhir..."
    sudo journalctl -u udp-custom.service --since "$MEMORY_MINUTES minutes ago" --no-pager | grep "Client connected" | sort | awk -F'[][]' '
    {
        for (i=1; i<=NF; i++) {
            if ($i ~ /src:/) { split($i, s, ":"); ip = s[2]; }
            if ($i ~ /user:/) { split($i, u, ":"); user = u[2]; }
        }
        if (user && ip) {
            print user ":" ip ":" systime() ":" > "'"$STATE_FILE"'"
        }
    }'
    awk -i inplace '!seen[$0]++' "$STATE_FILE"
    echo "Memori awal selesai. Penjaga siap bertugas!"
    
    # Loop utama pemantauan
    echo "Memantau log untuk koneksi ke port $PROTECTED_PORT"
    sudo journalctl -u udp-custom.service -f --no-tail | while read line; do
        if [[ "$line" == *"[INFO]"*"[src:"*"[user:"*"Client connected"* ]]; then
            IP=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /src:/){split($i, a, ":"); print a[2]}}}')
            USER=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /user:/){split($i, a, ":"); print a[2]}}}')
    
            if [[ -n "$IP" && -n "$USER" ]]; then
                echo "[$(date)] Koneksi baru terdeteksi: User '$USER' dari IP '$IP'"
                LAST_ENTRY=$(grep "^${USER}:" "$STATE_FILE" | tail -n 1)
                LAST_IP=$(echo "$LAST_ENTRY" | cut -d':' -f2)
    
                if [[ -n "$LAST_IP" && "$LAST_IP" != "$IP" ]]; then
                    echo "[$(date)] >>> PELANGGARAN: User '$USER' mencoba multi-login dari IP '$IP'."
                    echo "[$(date)] >>> IP lama '$LAST_IP' akan diputuskan dalam 2 menit."
                    OLD_LAST_SEEN=$(echo "$LAST_ENTRY" | cut -d':' -f3)
                    sed -i "/^${USER}:${LAST_IP}:/d" "$STATE_FILE"
                    echo "${USER}:${LAST_IP}:${OLD_LAST_SEEN}:$(date +%s)" >> "$STATE_FILE"
                fi
                echo "${USER}:${IP}:$(date +%s)::" >> "$STATE_FILE"
                awk -i inplace '!seen[$0]++' "$STATE_FILE"
            fi
        elif [[ "$line" == *"[INFO]"*"[src:"*"[user:"*"Client disconnected"* ]]; then
            IP=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /src:/){split($i, a, ":"); print a[2]}}}')
            USER=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /user:/){split($i, a, ":"); print a[2]}}}')
            if [[ -n "$IP" && -n "$USER" ]]; then
                echo "[$(date)] User '$USER' dari IP '$IP' telah disconnect. Membersihkan state..."
                # --- PERUBAHAN KRUSIAL 4: Hancurkan sesi saat disconnect juga ---
                echo "[$(date)] [DEBUG] Disconnect. Menjalankan: sudo conntrack -D -s $ip -p udp"
                sudo conntrack -D -s "$ip" -p udp 2>/dev/null
                sed -i "/^${USER}:${IP}:/d" "$STATE_FILE"
            fi
        fi
    done
    
    # =================================================================
    # --- MEMORI AWAL SAAT STARTUP ---
    # =================================================================
    echo "Penjaga sedang mengingat koneksi dalam $MEMORY_MINUTES menit terakhir..."
    sudo journalctl -u udp-custom.service --since "$MEMORY_MINUTES minutes ago" --no-pager | grep "Client connected" | sort | awk -F'[][]' '
    {
        for (i=1; i<=NF; i++) {
            if ($i ~ /src:/) { split($i, s, ":"); ip = s[2]; }
            if ($i ~ /user:/) { split($i, u, ":"); user = u[2]; }
        }
        if (user && ip) {
            print user ":" ip ":" systime() ":" > "'"$STATE_FILE"'"
        }
    }'
    awk -i inplace '!seen[$0]++' "$STATE_FILE"
    echo "Memori awal selesai. Penjaga siap bertugas!"
    
    # =================================================================
    # --- LOOP UTAMA PEMANTAUAN REAL-TIME ---
    # =================================================================
    echo "Memantau log untuk koneksi ke port $PROTECTED_PORT"
    sudo journalctl -u udp-custom.service -f --no-tail | while read line; do
        if [[ "$line" == *"[INFO]"*"[src:"*"[user:"*"Client connected"* ]]; then
            IP=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /src:/){split($i, a, ":"); print a[2]}}}')
            USER=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /user:/){split($i, a, ":"); print a[2]}}}')
    
            if [[ -n "$IP" && -n "$USER" ]]; then
                echo "[$(date)] Koneksi baru terdeteksi: User '$USER' dari IP '$IP'"
                LAST_ENTRY=$(grep "^${USER}:" "$STATE_FILE" | tail -n 1)
                LAST_IP=$(echo "$LAST_ENTRY" | cut -d':' -f2)
    
                if [[ -n "$LAST_IP" && "$LAST_IP" != "$IP" ]]; then
                    echo "[$(date)] >>> PELANGGARAN: User '$USER' mencoba multi-login dari IP '$IP'."
                    echo "[$(date)] >>> IP lama '$LAST_IP' akan ditendang dalam 2 menit."
                    # Tandai IP lama dengan timer
                    OLD_LAST_SEEN=$(echo "$LAST_ENTRY" | cut -d':' -f3)
                    sed -i "/^${USER}:${LAST_IP}:/d" "$STATE_FILE"
                    echo "${USER}:${LAST_IP}:${OLD_LAST_SEEN}:$(date +%s)" >> "$STATE_FILE"
                fi
                # Tambahkan atau perbarui koneksi baru
                echo "${USER}:${IP}:$(date +%s)::" >> "$STATE_FILE"
                awk -i inplace '!seen[$0]++' "$STATE_FILE"
            fi
        elif [[ "$line" == *"[INFO]"*"[src:"*"[user:"*"Client disconnected"* ]]; then
            IP=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /src:/){split($i, a, ":"); print a[2]}}}')
            USER=$(echo "$line" | awk -F'[][]' '{for(i=1;i<=NF;i++){if($i ~ /user:/){split($i, a, ":"); print a[2]}}}')
            if [[ -n "$IP" && -n "$USER" ]]; then
                echo "[$(date)] User '$USER' dari IP '$IP' telah disconnect. Membersihkan state..."
                # Hapus entri untuk user dan IP ini, yang membatalkan timer
                sed -i "/^${USER}:${IP}:/d" "$STATE_FILE"
            fi
        fi
    done
    3.Simpan dan keluar (Ctrl+X, Y, Enter).
    4.Berikan izin eksekusi:
    sudo chmod +x /opt/udp-proxy/bin/enforcer_service.sh
    Langkah 3: Membuat Layanan systemd
    1.Buat file layanan:
    sudo nano /etc/systemd/system/udp-enforcer.service
    2.Salin dan tempel konfigurasi berikut:
    [Unit]
    Description=UDP Connection Enforcer Service
    After=network.target udp-custom.service
    Wants=udp-custom.service
    
    [Service]
    Type=simple
    ExecStart=/opt/udp-proxy/bin/enforcer_service.sh
    Restart=always
    RestartSec=10
    User=root
    
    [Install]
    WantedBy=multi-user.target
    3.Simpan dan keluar (Ctrl+X, Y, Enter).
    Langkah 4: Membuat Perintah Kontrol Manual (enforcer-on / enforcer-off)
    Ini adalah kunci untuk kontrol yang "ber-ingat".
    1.Buat perintah enforcer-on:
    sudo nano /usr/local/bin/enforcer-on
    Salin dan tempel:
    #!/bin/bash
    FLAG_FILE="/opt/udp-proxy/log/enforcer.enabled"
    SERVICE_NAME="udp-enforcer.service"
    
    echo "Mengaktifkan Penjaga Koneksi..."
    
    # Buat direktori log jika belum ada untuk mencegah error
    sudo mkdir -p "$(dirname "$FLAG_FILE")"
    
    sudo touch "$FLAG_FILE"
    sudo systemctl start "$SERVICE_NAME"
    sudo systemctl enable "$SERVICE_NAME"
    echo "Penjaga telah diaktifkan. Statusnya akan diingat setelah reboot."
    2.Buat perintah enforcer-off:
    sudo nano /usr/local/bin/enforcer-off
    Salin dan tempel:
    #!/bin/bash
    FLAG_FILE="/opt/udp-proxy/log/enforcer.enabled"
    SERVICE_NAME="udp-enforcer.service"
    
    echo "Menonaktifkan Penjaga Koneksi..."
    sudo systemctl stop "$SERVICE_NAME"
    sudo rm -f "$FLAG_FILE"
    echo "Penjaga telah dinonaktifkan. Statusnya akan diingat setelah reboot."
    3.Berikan izin eksekusi pada kedua perintah:
    sudo chmod +x /usr/local/bin/enforcer-on
    sudo chmod +x /usr/local/bin/enforcer-off
    5.Langkah 5: Finalisasi dan Aktivasi Awal
    Langkah terakhir untuk menyelesaikan setup dan mengaktifkan Penjaga untuk pertama kalinya.
    1.Muat ulang systemd untuk mengenali layanan baru:
    sudo systemctl daemon-reload
    2.Aktifkan layanan sekali saja
    sudo systemctl enable udp-enforcer.service
    3.Aktifkan Penjaga untuk pertama kalinya:
    enforcer-on
    4.Verifikasi statusnya:
    sudo systemctl status udp-enforcer.service
    Anda harus melihat Active: active (running).
    Jalankan perintah-perintah ini secara manual untuk pengecekan urutan aturan:
    sudo iptables -D INPUT -p udp --dport 36712 -j UDP_ENFORCER
    sudo iptables -I INPUT 1 -p udp --dport 36712 -j UDP_ENFORCER
    Sekarang, coba lagi perintah :
    sudo iptables -L INPUT -n -v --line-numbers
    Hasilnya harusnya terlihat seperti ini:
    Chain INPUT (policy ACCEPT ...)
    num   pkts bytes target     prot opt in     out     source               destination         
    1        0     0 UDP_ENFORCER  udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:36712
    2    1355K  318M ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:36712
    ...
    Sekarang UDP_ENFORCER ada di posisi #1. Sistem blokir seharusnya sudah bekerja!
    Restart layanan untuk menerapkan perubahan:
    sudo systemctl restart udp-enforcer.service
    Ringkasan Perintah Tanpa Panel/Manual
    Mengaktifkan Penjaga
    enforcer-on
    Menonaktifkan Penjaga
    enforcer-off
    Cek Status Layanan
    sudo systemctl status udp-enforcer.service
    Lihat Log Aktivitas
    sudo journalctl -u udp-enforcer.service -f --no-pager
    Lihat IP yang Diblokir
    sudo iptables -L UDP_ENFORCER -n -v
    Lepas Semua Blokir
    sudo iptables -F UDP_ENFORCER
    Hapus File State (Reset)
    echo "" > /opt/udp-proxy/log/enforcer_state.log

    Untuk mempermudah penggunaan. Kita akan membuat sebuah skrip menu interaktif yang bisa Anda panggil dengan perintah hunter.
    Langkah 1: Membuat File Skrip hunter :
    Kita akan membuat file skrip bernama hunter di direktori /usr/local/bin. Direktori ini ada di PATH sistem, artinya Anda bisa menjalankan skrip dari mana saja dengan cukup mengetik namanya.
    1.Buat file skrip dengan nano:
    sudo nano /usr/local/bin/hunter
    2.Copy-paste seluruh kode di bawah ini ke dalam file nano:
    #!/bin/bash
    
    # Fungsi untuk menampilkan menu
    show_menu() {
        clear
        echo "=========================================="
        echo "     PANEL PENJAGA UDP - HUNTER"
        echo "=========================================="
        echo "1. Aktifkan Penjaga UDP"
        echo "2. Nonaktifkan Penjaga UDP"
        echo "3. Lihat Status Penjaga"
        echo "4. Pantau Log Aktivitas (Live)"
        echo "5. Lihat IP yang Diblokir"
        echo "6. Bersihkan Semua IP yang Diblokir"
        echo "7. Keluar"
        echo "=========================================="
    }
    
    # Loop utama menu
    while true; do
        show_menu
        read -p "Masukkan pilihan Anda [1-7]: " choice
    
        case $choice in
            1)
                echo ">> Mengaktifkan Penjaga..."
                sudo /opt/udp-proxy/panel/enable.sh
                ;;
            2)
                echo ">> Menonaktifkan Penjaga..."
                sudo /opt/udp-proxy/panel/disable.sh
                ;;
            3)
                echo ">> Status Layanan Penjaga:"
                sudo systemctl status udp-enforcer.service --no-pager
                ;;
            4)
                echo ">> Menampilkan log aktivitas (tekan Ctrl+C untuk kembali ke menu):"
                sudo journalctl -u udp-enforcer.service -f
                ;;
            5)
                echo ">> Daftar IP yang saat ini diblokir:"
                sudo iptables -L UDP_ENFORCER -n -v --line-numbers
                ;;
            6)
                echo ">> Membersihkan semua aturan blokir IP..."
                sudo iptables -F UDP_ENFORCER
                echo ">> Semua IP telah dibebaskan dari blokir."
                ;;
            7)
                echo ">> Keluar dari menu Hunter. Sampai jumpa!"
                exit 0
                ;;
            *)
                echo ">> Pilihan tidak valid, silakan coba lagi."
                ;;
        esac
    
        # Jeda sebelum menampilkan menu kembali
        echo ""
        read -p "Tekan [Enter] untuk melanjutkan..."
    done
    3.Simpan dan keluar (Ctrl+X, Y, Enter).
    Langkah 2: Jadikan Skrip Dapat Dieksekusi
    Agar skrip hunter bisa dijalankan, kita perlu memberinya izin eksekusi.
    sudo chmod +x /usr/local/bin/hunter
    Langkah 3: Cara Menggunakan Menu hunter
    Sekarang, panel interaktif Anda siap digunakan!
    1.Buka terminal.
    2.Ketik perintah berikut untuk membuka menu:
    sudo hunter
    Sekarang Anda memiliki cara yang jauh lebih mudah dan cepat untuk mengelola sistem penjaga UDP Anda.
  • Streaming Facebook Via VPS

    stream_facebook_via_vps
    Berikut adalah panduan cara streaming facebook via vps lengkap dari awal hingga cara masuk kembali ke layar streaming:
    Langkah 1: Update dan Install FFmpeg
    apt update && apt upgrade -y
    Install FFmpeg:
    apt install ffmpeg -y
    Langkah 2: Install TMUX
    Agar streaming tidak terputus saat menutup terminal:
    apt install tmux -y
    Langkah 3: Persiapan Folder
    Buat folder penyimpanan dan masuk ke dalamnya:
    mkdir -p /root/video
    cd /root/video
    Untuk melihat file ketikan
    ls
    Langkah 4: Membuat File Playlist
    Buat file teks yang berisi daftar video.
    1.Ketik perintah ini:
    nano playlist.txt
    2.Isi dengan daftar video (gunakan kutip satu '). Contoh:
    file 'Video Satu.mp4'
    file 'Video Dua (Lagu).mp4'
    file 'Video Tiga.mp4'
    3.Simpan: Tekan Ctrl + X, lalu Y, lalu Enter.
    Langkah 5: Upload Video
    Buka FileZilla, login sebagai root, masuk ke folder /root/video, lalu upload semua file video yang tercantum di playlist.txt tersebut.
    Langkah 6: Masuk ke Sesi TMUX Baru (Nama: stream360)
    Kita akan membuat layar bernama stream360 agar nanti mudah dimasuki kembali.
    tmux new -s stream360
    Langkah 7: Jalankan Skrip Streaming
    Sekarang jalankan perintah FFmpeg kamu (pastikan masih berada di folder /root/video):
    ffmpeg -re -f concat -safe 0 -stream_loop -1 -i playlist.txt \
    -vf scale=640:-2 \
    -c:v libx264 -preset ultrafast -tune zerolatency -b:v 350k -maxrate 350k -bufsize 700k -pix_fmt yuv420p -g 30 -threads 1 \
    -c:a aac -b:a 64k -ar 44100 \
    -f flv "rtmps://live-api-s.facebook.com:443/rtmp/FB-25673775738930917-0-Ab6a6EuzqQhALumB1JgAeiCj"
    PENTING : Ganti kode API Facebook diatas dengan API Facebook milik mu
    Langkah 8: Keluar tmux dan biarkan streaming berjalan.
    Agar kamu bisa menutup laptop tapi stream tetap jalan:
    1.Tekan Ctrl + B.
    2.Lalu tekan D.
    Langkah 9: Menghentikan Streaming
    tmux attach -t stream360
    Setelah masuk ke Tmux,tekan ctrl + c ,kemudian ketik exit,kamu akan berhenti dari mode streaming.
  • Update Script Monitoring UDP V3

    update_script_monitoring_udp
    Postingan ini adalah kelanjutan dari postingan sebelumnya dengan Judul Membuat Panel Monitoring UDP V2
    Cara Menggunakan:
    1.Buka file dengan perintah: sudo nano /opt/udp-proxy/bin/monitorpanel.sh
    sudo nano /opt/udp-proxy/bin/monitorpanel.sh
    2.Hapus semua isi file lama
    3.Copy dan paste script di atas ke dalam file
    4.Simpan dengan Ctrl+X, lalu Y, lalu Enter
    5.Jalankan panel dengan perintah: bash /opt/udp-proxy/bin/monitorpanel.sh
    bash /opt/udp-proxy/bin/monitorpanel.sh
    6.Untuk menampilkan panel menu cukup ketik monitorpanel pada terminal
    monitorpanel
    Script Monitoring UDP V3
    #!/bin/bash
    
    # --- DEFINISI WARNA ---
    NC='\033[0m'; RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; MAGENTA='\033[0;35m'; CYAN='\033[0;36m'; WHITE='\033[1;37m'
    
    # --- Fungsi Helper untuk Enforcer ---
    function start_enforcer() {
        if pgrep -f "enforcer.sh" > /dev/null; then
            echo -e "${YELLOW}Penjaga Koneksi (Enforcer) sudah berjalan.${NC}"
        else
            echo -e "${YELLOW}Menjalankan Penjaga Koneksi di latar belakang...${NC}"
            screen -dmS enforcer /opt/udp-proxy/bin/enforcer.sh
            sleep 2
            if pgrep -f "enforcer.sh" > /dev/null; then
                echo -e "${GREEN}Penjaga Koneksi berhasil dijalankan.${NC}"
            else
                echo -e "${RED}Gagal menjalankan Penjaga Koneksi. Cek lognya dengan 'screen -r enforcer'.${NC}"
            fi
        fi
    }
    
    function stop_enforcer() {
        if pgrep -f "enforcer.sh" > /dev/null; then
            echo -e "${YELLOW}Menghentikan Penjaga Koneksi...${NC}"
            pkill -f "enforcer.sh"
            sleep 2
            echo -e "${GREEN}Penjaga Koneksi telah dihentikan.${NC}"
        else
            echo -e "${YELLOW}Penjaga Koneksi tidak sedang berjalan.${NC}"
        fi
    }
    
    function show_enforcer_status() {
        if pgrep -f "enforcer.sh" > /dev/null; then
            echo -e "${GREEN}Status: Berjalan${NC}"
            echo -e "Untuk melihat log real-time, jalankan: ${CYAN}screen -r enforcer${NC}"
        else
            echo -e "${RED}Status: Tidak Berjalan${NC}"
        fi
        echo ""
        echo -e "${CYAN}Aturan IP yang diblokir saat ini:${NC}"
        sudo iptables -L UDP_ENFORCER --line-numbers -n
    }
    
    function unkick_all() {
        echo -e "${YELLOW}Menghapus semua aturan blokir IP...${NC}"
        sudo iptables -F UDP_ENFORCER
        echo -e "${GREEN}Semua IP telah dibebaskan (unkicked).${NC}"
    }
    
    # --- Fungsi Menu Enforcer ---
    function show_enforcer_menu() {
        while true; do
            show_header
            echo -e "${BLUE}--- Kelola Penjaga Koneksi (Kick Multi-Login) ---${NC}"
            echo -e "  ${GREEN}1.${NC} Jalankan Penjaga Koneksi"
            echo -e "  ${GREEN}2.${NC} Hentikan Penjaga Koneksi"
            echo -e "  ${GREEN}3.${NC} Lihat Status Penjaga & IP Terblokir"
            echo -e "  ${YELLOW}4.${NC} Hapus Semua Blokir IP (Unkick All)"
            echo -e "  ${RED}5.${NC} Kembali ke Menu Utama"
            echo ""
            printf "${YELLOW}Masukkan pilihan Anda [1-5]: ${NC}"
            read choice
            case $choice in
                1)
                    echo -e "${YELLOW}Menjalankan dan mengaktifkan Penjaga Koneksi...${NC}"
                    sudo systemctl enable udp-enforcer.service
                    sudo systemctl start udp-enforcer.service
                    sleep 2
                    echo -e "${GREEN}Selesai.${NC}"
                    ;;
                2)
                    echo -e "${YELLOW}Menghentikan dan menonaktifkan Penjaga Koneksi...${NC}"
                    sudo systemctl stop udp-enforcer.service
                    sudo systemctl disable udp-enforcer.service
                    sleep 2
                    echo -e "${GREEN}Selesai.${NC}"
                    ;;
                3)
                    echo -e "${CYAN}Status Layanan:${NC}"
                    sudo systemctl status udp-enforcer.service --no-pager
                    echo ""
                    echo -e "${CYAN}Aturan IP yang diblokir saat ini:${NC}"
                    sudo iptables -L UDP_ENFORCER --line-numbers -n
                    ;;
                4) unkick_all ;;
                5) break ;;
                *) echo -e "${RED}Pilihan tidak valid.${NC}"; sleep 1 ;;
            esac
            read -p "Tekan Enter untuk melanjutkan..."
        done
    }
    
    
    # --- FUNGSI MENU LAINNYA (TIDAK PERLU DIUBAH) ---
    function show_header() {
        clear
        echo -e "${CYAN}════════════════════════════════════════════════════════════════════════════════${NC}"
        echo -e "${WHITE}                            [ UDP MONITOR PANEL ]                              ${NC}"
        echo -e "${CYAN}════════════════════════════════════════════════════════════════════════════════${NC}"
        echo -e "${CYAN}                              Powered by HAXOR                                  ${NC}"
        echo -e "${CYAN}════════════════════════════════════════════════════════════════════════════════${NC}"
        echo ""
    }
    function show_menu() {
        echo -e "${MAGENTA}Pilih kategori menu:${NC}"
        echo -e "  ${GREEN}1.${NC} Monitoring User UDP"
        echo -e "  ${GREEN}2.${NC} Monitoring Bandwidth & Jaringan"
        echo -e "  ${GREEN}3.${NC} Monitoring Sumber Daya (CPU/RAM/Disk)"
        echo -e "  ${GREEN}4.${NC} Informasi & Kontrol Sistem"
        echo -e "  ${GREEN}5.${NC} Kelola Penjaga Koneksi (Kick Multi-Login)"
        echo -e "  ${RED}6.${NC} Keluar"
        echo ""
    }
    function show_user_menu() {
        while true; do
            show_header
            echo -e "${BLUE}--- Monitoring User UDP ---${NC}"
            echo -e "  ${GREEN}1.${NC} Cek User Login (Real-time Dashboard)"; echo -e "  ${GREEN}2.${NC} Cek User Multi-Login"; echo -e "  ${GREEN}3.${NC} Tampilkan User Aktif Saat Ini"; echo -e "  ${GREEN}4.${NC} Tampilkan Alur Log Koneksi (Live Stream)"; echo -e "  ${RED}5.${NC} Kembali ke Menu Utama"; echo ""
            printf "${YELLOW}Masukkan pilihan Anda [1-5]: ${NC}"; read choice
            case $choice in 1) watch -n 5 udplog ;; 2) checkmultilogin ;; 3) udplog ;; 4) sudo journalctl -u udp-custom.service -f | grep "Client connected" ;; 5) break ;; *) echo -e "${RED}Pilihan tidak valid.${NC}"; sleep 1 ;; esac
            read -p "Tekan Enter untuk melanjutkan..."
        done
    }
    function show_network_menu() {
        while true; do
            show_header
            echo -e "${BLUE}--- Monitoring Bandwidth & Jaringan ---${NC}"
            echo -e "  ${GREEN}1.${NC} Monitor Bandwidth (Per Jam)"; echo -e "  ${GREEN}2.${NC} Monitor Bandwidth (Per Hari)"; echo -e "  ${GREEN}3.${NC} Monitor Bandwidth (Per Bulan)"; echo -e "  ${GREEN}4.${NC} Cek Kecepatan Internet (Ookla Speedtest)"; echo -e "  ${RED}5.${NC} Kembali ke Menu Utama"; echo ""
            printf "${YELLOW}Masukkan pilihan Anda [1-5]: ${NC}"; read choice
            case $choice in 1) vnstat -h ;; 2) vnstat -d ;; 3) vnstat -m ;; 4) speedtest ;; 5) break ;; *) echo -e "${RED}Pilihan tidak valid.${NC}"; sleep 1 ;; esac
            read -p "Tekan Enter untuk melanjutkan..."
        done
    }
    function show_resource_menu() {
        while true; do
            show_header
            echo -e "${BLUE}--- Monitoring Sumber Daya ---${NC}"
            echo -e "  ${GREEN}1.${NC} Tampilkan Penggunaan CPU & RAM (Real-time)"; echo -e "  ${GREEN}2.${NC} Tampilkan Penggunaan Disk"; echo -e "  ${GREEN}3.${NC} Ringkasan Penggunaan Sumber Daya"; echo -e "  ${RED}4.${NC} Kembali ke Menu Utama"; echo ""
            printf "${YELLOW}Masukkan pilihan Anda [1-4]: ${NC}"; read choice
            case $choice in 1) htop ;; 2) df -h ;; 3) echo -e "${CYAN}### Penggunaan CPU & RAM ###${NC}"; top -bn1 | head -5; echo -e "\n${CYAN}### Penggunaan Disk ###${NC}"; df -h ;; 4) break ;; *) echo -e "${RED}Pilihan tidak valid.${NC}"; sleep 1 ;; esac
            read -p "Tekan Enter untuk melanjutkan..."
        done
    }
    function show_system_menu() {
        while true; do
            show_header
            echo -e "${BLUE}--- Informasi & Kontrol Sistem ---${NC}"
            echo -e "  ${GREEN}1.${NC} Informasi VPS Lengkap"; echo -e "  ${GREEN}2.${NC} Pengguna VPS yang Sedang Login"; echo -e "  ${GREEN}3.${NC} Restart Service UDP"; echo -e "  ${YELLOW}4.${NC} Restart VPS"; echo -e "  ${GREEN}5.${NC} Atur Auto Reboot VPS"; echo -e "  ${RED}6.${NC} Kembali ke Menu Utama"; echo ""
            printf "${YELLOW}Masukkan pilihan Anda [1-6]: ${NC}"; read choice
            case $choice in
                1) neofetch ;;
                2) w ;;
                3) echo -e "${YELLOW}Mencoba me-restart service udp-custom...${NC}"; sudo systemctl restart udp-custom.service; echo -e "${GREEN}Service telah di-restart.${NC}" ;;
                4) printf "${RED}Apakah Anda yakin ingin me-reboot VPS? (y/n): ${NC}"; read confirm; if [[ $confirm == [yY] ]]; then echo -e "${YELLOW}VPS akan reboot dalam 5 detik...${NC}"; sleep 5; sudo reboot; fi ;;
                5) setup_auto_reboot_menu ;;
                6) break ;;
                *) echo -e "${RED}Pilihan tidak valid.${NC}"; sleep 1 ;;
            esac
            read -p "Tekan Enter untuk melanjutkan..."
        done
    }
    function setup_auto_reboot_menu() {
        while true; do
            show_header
            echo -e "${BLUE}--- Atur Auto Reboot VPS ---${NC}"
            echo -e "  ${GREEN}1.${NC} Setiap Jam"; echo -e "  ${GREEN}2.${NC} Setiap 6 Jam"; echo -e "  ${GREEN}3.${NC} Setiap 12 Jam"; echo -e "  ${GREEN}4.${NC} Setiap Hari (Tengah Malam)"; echo -e "  ${YELLOW}5.${NC} Batalkan Auto Reboot"; echo -e "  ${RED}6.${NC} Kembali"; echo ""
            printf "${YELLOW}Masukkan pilihan Anda [1-6]: ${NC}"; read choice
            local cron_job=""
            case $choice in 1) cron_job="0 * * * * /sbin/reboot" ;; 2) cron_job="0 */6 * * * /sbin/reboot" ;; 3) cron_job="0 */12 * * * /sbin/reboot" ;; 4) cron_job="0 0 * * * /sbin/reboot" ;;
                5) echo -e "${YELLOW}Membatalkan semua auto-reboot...${NC}"; (crontab -l | grep -v "/sbin/reboot") | crontab -; echo -e "${GREEN}Auto-reboot telah dibatalkan.${NC}"; read -p "Tekan Enter untuk melanjutkan..."; break ;;
                6) break ;; *) echo -e "${RED}Pilihan tidak valid.${NC}"; sleep 1; continue ;;
            esac
            if [ -n "$cron_job" ]; then echo -e "${YELLOW}Menambahkan cron job: $cron_job${NC}"; (crontab -l 2>/dev/null; echo "$cron_job") | crontab -; echo -e "${GREEN}Auto-reboot telah diatur.${NC}"; read -p "Tekan Enter untuk melanjutkan..."; break; fi
        done
    }
    
    # --- Loop Utama Program ---
    while true; do
        show_header; show_menu
        printf "${YELLOW}Masukkan pilihan Anda [1-6]: ${NC}"; read choice
        case $choice in
            1) show_user_menu ;;
            2) show_network_menu ;;
            3) show_resource_menu ;;
            4) show_system_menu ;;
            5) show_enforcer_menu ;;
            6) echo -e "${GREEN}Keluar dari Monitor Panel. Sampai jumpa!${NC}"; exit 0 ;;
            *) echo -e "${RED}Pilihan tidak valid, silakan coba lagi.${NC}"; sleep 2 ;;
        esac
    done
  • My Profile In Youtube

    ADDRESS

    Jalan Raya Badau Km.11 Rt.06/02 Tanjung Pandan Belitung 33451

    EMAIL

    purwana.cecep@gmail.com
    uraxarixteamxxx@gmail.com

    Telephone

    +628197887769