VPS yang menjalankan bot Telegram menjadi target menarik bagi attacker. Bot yang terhubung ke internet, membuka port, dan menyimpan token API adalah titik lemah yang harus diamankan. Artikel ini membahas cara mengamankan VPS Debian 13 untuk menjalankan bot Telegram secara menyeluruh.
Pengertian Keamanan VPS untuk Bot Telegram
Keamanan VPS mencakup semua upaya melindungi server dari akses tidak sah, serangan, dan kebocoran data. Bot Telegram menambah permukaan serangan karena harus terhubung ke Telegram API secara terus-menerus, membuka port, dan menyimpan credentials.
Mengapa Keamanan VPS Penting?
- Token API Bocor: Jika server diretas, attacker bisa mengontrol bot
- Bot Jahat: Bot yang diretas bisa menyebarkan spam atau phishing
- Server Di-Compromise: Attacker menggunakan VPS untuk mining, DDoS, atau spam
- Data Pengguna: Chat history dan data pengguna bisa dicuri
- Loss of Service: Bot offline berarti pengguna tidak mendapat layanan
- Legal Risk: Server yang diretas untuk serangan bisa dikenai tuntutan
Alat yang Dibutuhkan
- VPS Debian 13
- Akses root atau sudo
- SSH key (sudah dikonfigurasi)
- Firewall UFW
- Tidak perlu software tambahan
Langkah 1: Amankan Akses VPS
1. Nonaktifkan Password Authentication
nano /etc/ssh/sshd_configPasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
Port 2222
AllowUsers botusersystemctl restart sshd2. Buat User Khusus untuk Bot
# Buat user yang hanya untuk bot
adduser botuser --gecos "" --disabled-password
usermod -aG sudo botuser
# Pastikan user tidak bisa login SSH langsung
usermod -s /usr/sbin/nologin botuser
# Atau jika perlu login untuk mengelola bot:
usermod -s /bin/bash botuser3. Konfigurasi SSH Key
# Dari komputer lokal
ssh-copy-id -p 2222 botuser@SERVER_IP
# Verifikasi
ssh -p 2222 botuser@SERVER_IP4. Hapus Akses Login Root
# Pastikan root tidak bisa login via SSH
# (sudah dilakukan di sshd_config di atas)
# Cek apakah root login masih bisa
ssh root@SERVER_IP # Seharusnya gagalLangkah 2: Firewall dengan UFW
1. Install dan Konfigurasi UFW
apt install ufw -y2. Atur Aturan Firewall
# Default: deny semua incoming, allow outgoing
ufw default deny incoming
ufw default allow outgoing
# Boleh SSH (port khusus)
ufw allow 2222/tcp
# Boleh HTTP/HTTPS untuk webhook
ufw allow 80/tcp
ufw allow 443/tcp
# Boleh port yang digunakan bot (jika bukan webhook)
# Jangan terbuka kecuali benar-benar diperlukan
ufw allow 3000/tcp
# Aktifkan firewall
ufw enable3. Atur Rate Limiting SSH
ufw limit 2222/tcpIni membatasi koneksi SSH menjadi 6 per 30 detik dari satu IP.
4. Cek Status UFW
ufw status verbose
ufw status numberedLangkah 3: Amankan Bot Telegram
1. Simpan Token dengan Aman
# Gunakan file .env dengan permission ketat
echo "BOT_TOKEN=TOKEN_DARI_BOTFATHER" > /home/botuser/bots/my-bot/.env
chmod 600 /home/botuser/bots/my-bot/.env
chown botuser:botuser /home/botuser/bots/my-bot/.env2. Gunakan Environment Variable
# Jangan hardcode token di kode
# BURUK:
const BOT_TOKEN = "123456789:ABCdef..."
// BAIK:
const BOT_TOKEN = process.env.BOT_TOKEN3. Rotasi Token Berkala
# Ganti token setiap beberapa bulan
# 1. Buat token baru di BotFather
# 2. Update .env
# 3. Restart bot
pm2 restart my-bot
# Hapus token lama di BotFather4. Nonaktifkan Bot jika Dikompromikan
# Melalui BotFather, delete bot jika dicurigai diretas
# Atau revoke tokenLangkah 4: Amankan Layanan Bot
1. Systemd Service dengan Opsi Keamanan
nano /etc/systemd/system/telegram-bot.service[Unit]
Description=Telegram Bot Service
After=network.target
[Service]
Type=simple
User=botuser
Group=botuser
WorkingDirectory=/home/botuser/bots/my-bot
EnvironmentFile=/home/botuser/bots/my-bot/.env
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=10
# Resource limits
MemoryLimit=256M
CPUQuota=50%
LimitNOFILE=1024
# Security hardening
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/home/botuser/bots/my-bot/logs
# Network restrictions
# Hanya boleh koneksi keluar ke Telegram API
# (bisa ditambah dengan network namespace)
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enable telegram-bot
systemctl start telegram-bot2. Nonaktifkan Capabilities yang Tidak Perlu
# Hanya tambahkan capability yang benar-benar diperlukan
# Misalnya NET_BIND_SERVICE jika pakai port <1024
ExecStart=/usr/bin/node --security-reuse-index index.js3. AppArmor Profile (Opsional)
apt install apparmor-utils -y
# Buat profile
nano /etc/apparmor.d/usr.bin.node/usr/bin/node {
#include <tunables/global>
/usr/bin/node mr,
/home/botuser/bots/my-bot/** r,
/home/botuser/bots/my-bot/.env r,
/home/botuser/bots/my-bot/logs/** w,
/tmp/** rw,
network inet tcp,
network inet6 tcp,
}apparmor_parser -r /etc/apparmor.d/usr.bin.nodeLangkah 5: Amankan Jaringan
1. Nonaktifkan IPv6 jika Tidak Dipakai
# Jika tidak pakai IPv6
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p2. IP Whitelisting
# Hanya izinkan IP tertentu mengakses bot
ufw allow from 192.168.1.0/24 to any port 3000
ufw deny from any to any port 30003. Rate Limiting
# Batasi koneksi ke bot
ufw limit 3000/tcp4. VPN atau WireGuard (Opsional)
# Install WireGuard untuk akses VPN
apt install wireguard -y
# Konfigurasi WireGuard
# Hanya koneksi yang melalui VPN yang bisa mengakses botLangkah 6: Monitoring Keamanan
1. Fail2Ban untuk Proteksi Brute-Force
apt install fail2ban -ynano /etc/fail2ban/jail.local[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
[nginx-http-auth]
enabled = true
port = 80,443
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 600systemctl enable fail2ban
systemctl start fail2ban2. Audit Log
# Instal auditd
apt install auditd -y
# Tambahkan rule
echo "-w /etc/ssh/sshd_config -p wa -k ssh-config" >> /etc/audit/rules.d/audit.rules
echo "-w /home/botuser/bots/my-bot/.env -p r -k bot-token" >> /etc/audit/rules.d/audit.rules
systemctl restart auditd3. Monitor File Changes
# Cek siapa yang mengubah file bot
inotifywait -m /home/botuser/bots/my-bot/ -e modify,create,delete4. Cek Proses Mencurigakan
# Cek proses yang berjalan
ps aux | grep -v root
# Cek koneksi keluar yang tidak biasa
ss -tunp
netstat -tunp
# Cek user yang login
last
whoLangkah 7: Backup dan Recovery Keamanan
1. Backup Konfigurasi Keamanan
# Backup SSH config, firewall rules, dan bot config
tar -czf /backup/security-backup-$(date +%Y%m%d).tar.gz \
/etc/ssh/sshd_config \
/etc/ufw/ \
/etc/systemd/system/telegram-bot.service \
/home/botuser/bots/my-bot/.env2. Backup Otomatis
# Script backup keamanan
nano /usr/local/bin/backup-security.sh#!/bin/bash
BACKUP_DIR="/backup/security"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/security-${DATE}.tar.gz \
/etc/ssh/sshd_config \
/etc/ufw/rules.v4 \
/etc/fail2ban/jail.local \
/etc/systemd/system/telegram-bot.service
find $BACKUP_DIR -name "security-*.tar.gz" -mtime +30 -delete
echo "$(date): Security backup selesai" >> /var/log/security-backup.log3. Incident Response Plan
# Jika bot dikompromikan:
# 1. Hentikan bot segera
pm2 stop my-bot
# 2. Rotasi token di BotFather
# 3. Cek log untuk akses tidak sah
journalctl -u telegram-bot --since "1 hour ago"
# 4. Ganti password dan SSH keys
# 5. Restore dari backup jika perlu
# 6. Audit server untuk backdoorLangkah 8: Update dan Patch Berkala
1. Update Sistem Rutin
# Update otomatis
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades
# Atau update manual
apt update && apt upgrade -y
apt autoremove -y2. Update Node.js
# Update ke versi terbaru
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs3. Update Dependency Bot
# Update npm packages
cd /home/botuser/bots/my-bot
npm update
npm audit4. Audit Keamanan Berkala
# Scan port terbuka
nmap -sT -O SERVER_IP
# Cek vulnerability
apt list --upgradable
npm audit --productionKesimpulan
Mengamankan VPS untuk bot Telegram adalah tanggung jawab penting setiap pengembang. Dengan SSH key, firewall, user non-root, systemd hardening, dan monitoring yang tepat, VPS Anda akan terlindungi dari sebagian besar ancaman keamanan.
Kunci utama:
- Nonaktifkan password authentication dan root login SSH
- Buat user khusus hanya untuk bot
- Konfigurasi UFW dengan aturan minimal dan spesifik
- Simpan token API di file .env dengan permission ketat
- Gunakan systemd dengan security hardening (NoNewPrivileges, ProtectSystem)
- Aktifkan Fail2Ban untuk proteksi brute-force
- Monitor proses dan koneksi secara rutin
- Update sistem dan dependency secara berkala
- Backup konfigurasi keamanan secara berkala
- Buat incident response plan untuk keadaan darurat
Catatan penting: Jangan pernah menjalankan bot sebagai root. Jangan pernah menambahkan user ke group docker tanpa alasan yang jelas — group docker memberikan akses root ke host melalui container. Jangan pernah menyimpan token API di file yang bisa dibaca publik. Jangan pernah membuka port kecuali benar-benar diperlukan — setiap port yang terbuka adalah celah keamanan yang bisa dieksploitasi. Keamanan VPS bukan satu kali setup — ini memerlukan kewaspadaan konstan dan update berkelanjutan.
Ingat: VPS yang menjalankan bot Telegram Anda adalah rumah bagi data pengguna Anda. Jika VPS dikompromikan, tidak hanya bot Anda yang rusak — data pengguna Anda juga ikut terancam. Setiap langkah keamanan yang Anda ambil hari ini melindungi pengguna Anda besok. Jangan meremehkan pentingnya keamanan — biaya mengamankan server jauh lebih murah daripada biaya recovering dari serangan.
Dipublikasikan untuk membantu para administrator server mengamankan VPS Debian 13 yang menjalankan bot Telegram.