Keamanan VPS untuk Menjalankan Bot Telegram

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

bash
nano /etc/ssh/sshd_config
ini
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
Port 2222
AllowUsers botuser
bash
systemctl restart sshd

2. Buat User Khusus untuk Bot

bash
# 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 botuser

3. Konfigurasi SSH Key

bash
# Dari komputer lokal
ssh-copy-id -p 2222 botuser@SERVER_IP

# Verifikasi
ssh -p 2222 botuser@SERVER_IP

4. Hapus Akses Login Root

bash
# 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 gagal

Langkah 2: Firewall dengan UFW

1. Install dan Konfigurasi UFW

bash
apt install ufw -y

2. Atur Aturan Firewall

bash
# 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 enable

3. Atur Rate Limiting SSH

bash
ufw limit 2222/tcp

Ini membatasi koneksi SSH menjadi 6 per 30 detik dari satu IP.

4. Cek Status UFW

bash
ufw status verbose
ufw status numbered

Langkah 3: Amankan Bot Telegram

1. Simpan Token dengan Aman

bash
# 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/.env

2. Gunakan Environment Variable

bash
# Jangan hardcode token di kode
# BURUK:
const BOT_TOKEN = "123456789:ABCdef..."

// BAIK:
const BOT_TOKEN = process.env.BOT_TOKEN

3. Rotasi Token Berkala

bash
# 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 BotFather

4. Nonaktifkan Bot jika Dikompromikan

bash
# Melalui BotFather, delete bot jika dicurigai diretas
# Atau revoke token

Langkah 4: Amankan Layanan Bot

1. Systemd Service dengan Opsi Keamanan

bash
nano /etc/systemd/system/telegram-bot.service
ini
[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.target
bash
systemctl daemon-reload
systemctl enable telegram-bot
systemctl start telegram-bot

2. Nonaktifkan Capabilities yang Tidak Perlu

bash
# Hanya tambahkan capability yang benar-benar diperlukan
# Misalnya NET_BIND_SERVICE jika pakai port <1024
ExecStart=/usr/bin/node --security-reuse-index index.js

3. AppArmor Profile (Opsional)

bash
apt install apparmor-utils -y

# Buat profile
nano /etc/apparmor.d/usr.bin.node
kode
/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,
}
bash
apparmor_parser -r /etc/apparmor.d/usr.bin.node

Langkah 5: Amankan Jaringan

1. Nonaktifkan IPv6 jika Tidak Dipakai

bash
# 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 -p

2. IP Whitelisting

bash
# 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 3000

3. Rate Limiting

bash
# Batasi koneksi ke bot
ufw limit 3000/tcp

4. VPN atau WireGuard (Opsional)

bash
# Install WireGuard untuk akses VPN
apt install wireguard -y

# Konfigurasi WireGuard
# Hanya koneksi yang melalui VPN yang bisa mengakses bot

Langkah 6: Monitoring Keamanan

1. Fail2Ban untuk Proteksi Brute-Force

bash
apt install fail2ban -y
bash
nano /etc/fail2ban/jail.local
ini
[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 = 600
bash
systemctl enable fail2ban
systemctl start fail2ban

2. Audit Log

bash
# 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 auditd

3. Monitor File Changes

bash
# Cek siapa yang mengubah file bot
inotifywait -m /home/botuser/bots/my-bot/ -e modify,create,delete

4. Cek Proses Mencurigakan

bash
# Cek proses yang berjalan
ps aux | grep -v root

# Cek koneksi keluar yang tidak biasa
ss -tunp
netstat -tunp

# Cek user yang login
last
who

Langkah 7: Backup dan Recovery Keamanan

1. Backup Konfigurasi Keamanan

bash
# 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/.env

2. Backup Otomatis

bash
# Script backup keamanan
nano /usr/local/bin/backup-security.sh
bash
#!/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.log

3. Incident Response Plan

bash
# 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 backdoor

Langkah 8: Update dan Patch Berkala

1. Update Sistem Rutin

bash
# Update otomatis
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades

# Atau update manual
apt update && apt upgrade -y
apt autoremove -y

2. Update Node.js

bash
# Update ke versi terbaru
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs

3. Update Dependency Bot

bash
# Update npm packages
cd /home/botuser/bots/my-bot
npm update
npm audit

4. Audit Keamanan Berkala

bash
# Scan port terbuka
nmap -sT -O SERVER_IP

# Cek vulnerability
apt list --upgradable
npm audit --production

Kesimpulan

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.

Artikel Terkait