REVISI SERVICE EXTRAORDINARY CBT

Setelah sebelumnya pada tulisan mengenai CARA INSTALL EXTRAORDINARY CBT 4.4.1 DI VPS , terutama pada langkah 4. Membuat service untuk Extraordinary CBT. Setelah beberapa lama berjalan ternyata ada kendala yaitu ketika secret key sudah expired, dan service terus berjalan maka yang terjadi adalah Extraordinary CBT pada VPS akan merequest dan validasi ke web Ecosystem Extraordinary CBT yang menyebabkan terjadi nya flooding dari IP VPS kita. Dan pada akhirnya IP VPS masuk kedalam daftar banned CloudFlare. Sehingga dalam prosesnya tidak akan bisa melakukan pengecekan dan validasi secret key nya. Guna mencegah terjadinya hal demikian maka perlu dilakukan beberapa revisi. Berikut beberapa revisi yang perlu dilakukan.

REVISI SERVICE EXTRAORDINARY CBT

Adapun tahapan yang perlu dilakukan guna merevisi sebagai berikut:

MENGUBAH NAMA SERVICE DAN KODENYA

Yang pertama adalah mengubah nama service nya, usahakan mengandung kata cbt agar mudah dalam pengelolaannya. Nama awal service yaitu pas2024.service. Lakukan perubahan dengan command/perintah berikut:

mv /etc/systemd/system/pas2024.service /etc/systemd/system/pascbt.service

Selanjutnya mengubah kodenya dengan memberi waktu jeda sebelum restart/start dengan nilai yang disesuaikan masing masing, yang awalnya sebagai berikut:

[Unit]
Description=PAS2024
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/pas
ExecStart=/home/pas/main-amd64
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=PAS2024
User=root
Group=root
Environment=PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/home/pas


[Install]
WantedBy=multi-user.target

menjadi:

[Unit]
Description=PAS2024
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/pas
ExecStart=/home/pas/main-amd64
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=180s
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=PAS2024
User=root
Group=root
Environment=PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/home/pas


[Install]
WantedBy=multi-user.target

MENAMBAHKAN SERVICE PEMANTAUAN

Service pemantauan bertujuan untuk memantau service yang mengandung kata cbt, dan memeriksa lognya, jika diketemukan kata kunci yang sesuai maka service yang mengandung kata cbt tersebut baru bisa running. Ini akan mencegah terjadinya flooding ke Ecosystem Extraordinary CBT. Dengan kata lain service ini bertujuan sebagai pencegah sedini mungkin agar tidak terjadi flooding, jika secret key nya telah expired. Ada dua kode yang perlu ditambahkan, yang pertama kode bash dan service yang menjalankannya. Berikut kode yang perlu di persiapkan.

Buat kode Bash pada direktori /usr/local/bin/ dengan nama file watchdog-exo.sh, biasa menggunakan nano editor dengan command:

nano /usr/local/bin/watchdog-exo.sh

Kode Bash:

#!/bin/bash

# --- KONFIGURASI ---
# Kata yang jika ADA di log, akan memicu STOP service (pisahkan dengan pipe | )
KATA_TERLARANG="error|fatal|panic|invalid|failed"

# Kata yang HARUS ADA di log. Jika tidak ada dalam sekian waktu, service akan di STOP.
# (Jika fitur ini tidak digunakan, biarkan isinya "KOSONGKAN_INI")
KATA_WAJIB="200 - (GET|POST|PUT|DELETE)|success|up|valid"

# Waktu tenggang (detik) untuk menunggu munculnya KATA_WAJIB setelah service aktif
BATAS_WAKTU_WAJIB=90
# -------------------

# Fungsi untuk menghentikan service
stop_service() {
    local svc=$1
    echo "[$(date)] LOG TERDETEKSI! Menghentikan service: $svc"
    systemctl stop "$svc"
}

while true; do
    # Cari semua service yang mengandung kata "cbt" dan statusnya aktif
    SERVICES=$(systemctl list-units --type=service --state=active | grep -i "cbt" | awk '{print $1}')

    if [ -n "$SERVICES" ]; then
        while read -r svc; do
            if [ -n "$svc" ]; then
                echo "[$(date)] Memantau log service: $svc"
                
                # Jalankan journalctl -f dengan timeout, ambil 100 baris terakhir awal agar tidak terlalu padat
                # --no-pager agar tidak interaktif
                timeout $BATAS_WAKTU_WAJIB journalctl -u "$svc" -f -n 100 --no-pager 2>/dev/null | while read -r line; do
                    # Cek apakah log mengandung KATA_TERLARANG
                    if echo "$line" | grep -iE "$KATA_TERLARANG" > /dev/null; then
                        stop_service "$svc"
                        # Break untuk keluar dari loop journalctl agar lanjut ke service berikutnya
                        break 2 
                    fi
                    
                    # Cek apakah log mengandung KATA_WAJIB
                    if [ "$KATA_WAJIB" != "KOSONGKAN_INI" ]; then
                        if echo "$line" | grep -iE "$KATA_WAJIB" > /dev/null; then
                            echo "[$(date)] Kata wajib ditemukan di $svc. Aman untuk sesi ini."
                            # Jika kata wajib sudah ditemukan, hentikan pemantauan log service ini
                            break 
                        fi
                    fi
                done

                # CEK KEFAILAN WAKTU (Jika KATA_WAJIB tidak ditemukan dalam batas waktu)
                if [ "$KATA_WAJIB" != "KOSONGKAN_INI" ]; then
                    # Jika perintah timeout di atas selesai (kode 124) tapi tidak break karena KATA_WAJIB
                    if [ $? -eq 124 ]; then
                        echo "[$(date)] TIMEOUT! Kata wajib tidak ditemukan dalam $BATAS_WAKTU_WAJIB detik."
                        stop_service "$svc"
                    fi
                fi

                # Jeda 5 detik sebelum memeriksa service yang sama lagi
                sleep 15 
            fi
        done <<< "$SERVICES"
    fi
    
    # Jeda jika tidak ada service CBT yang berjalan
    sleep 15
done

Membuat service guna menjalankan kode bash tersebuat di atas dengan command:

nano /etc/systemd/system/exo.service

Kode service:

[Unit]
Description=Watchdog for EXO Services (Monitor Log & Auto Stop)
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/watchdog-exo.sh
Restart=always
RestartSec=10s

StandardOutput=journal
StandardError=journal
SyslogIdentifier=WatchdogEXO

User=root
Group=root

[Install]
WantedBy=multi-user.target

Selanjutnya adalah dengan meng-enable, me-reload dan start service yang telah direvisi dan dibuat dengan command:

systemctl daemon-reload
systemctl start pascbt
systemctl systemctl enable --now exo

Dengan revisi di atas diharapkan dapat meminimalisir terjadinya flooding ke Ecosystem Extraordinary CBT yang pada akhirnya dapat menjadi petaka karena terlalu nyaman tanpa memantau kapan secret key expired.

Check Also

CARA INSTALL DAN KONFIGURASI PGADMIN 4 DI VPS

DAFTAR ISI1 CARA INSTALL DAN KONFIGURASI PGADMIN 4 DI VPS1.1 INSTALL PGADMIN 41.2 KONFIGURASI PGADMIN …

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *