DAFTAR ISI
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.
WAPINDO.MY.ID Read, Learn and Practice