SERVER

Blokir Akses Negara Tertentu Di VPS

06 Jun 2026 Administrator
Header Hero

Keamanan Infrastruktur VPS

Implementasi Geo-Blocking & Real-Time Monitoring Telegram

Dalam ekosistem digital yang terus berkembang, Virtual Private Server (VPS) telah menjadi tulang punggung bagi berbagai kebutuhan, mulai dari web hosting, database management, hingga penyediaan layanan tunneling seperti SSH WebSocket dan V2Ray. Namun, popularitas penggunaan VPS juga menjadikannya target utama bagi berbagai ancaman siber global. Tanpa lapisan perlindungan yang memadai, sebuah server yang terhubung ke internet ibarat rumah tanpa pintu di tengah kota yang sibuk; siapa pun, dari mana pun, bisa mencoba masuk dan melakukan eksploitasi.

Salah satu ancaman yang paling persisten adalah serangan otomatis yang diluncurkan oleh botnet dan aktor jahat dari berbagai penjuru dunia. Serangan ini sering kali berupa pemindaian port (port scanning) dan brute-force login yang mencoba ribuan kombinasi kata sandi setiap menitnya. Dampak dari serangan ini tidak hanya berisiko pada kebocoran data, tetapi juga pada performa server. Setiap upaya koneksi ilegal yang masuk akan mengonsumsi sumber daya CPU dan bandwidth, yang pada akhirnya dapat mengganggu stabilitas layanan bagi pengguna yang sah.

Di sinilah peran strategi Geo-Blocking atau pembatasan akses berdasarkan wilayah geografis menjadi sangat vital. Bagi administrator sistem di Indonesia, memberikan akses terbuka ke seluruh dunia sering kali tidak diperlukan, terutama jika layanan yang dijalankan memang hanya ditujukan untuk audiens lokal. Dengan membatasi akses hanya untuk alamat IP yang berasal dari Indonesia (Whitelisting Indonesia), Anda secara otomatis mengeliminasi lebih dari 90% potensi serangan yang berasal dari luar negeri. Ini adalah langkah preventif yang paling efisien dalam menjaga kedaulatan data di server Anda.

Selain faktor keamanan, implementasi firewall berbasis negara juga berkaitan erat dengan efisiensi pengelolaan log server. Bayangkan jika log kernel Anda dipenuhi oleh ribuan baris upaya akses gagal dari negara-negara yang tidak relevan dengan bisnis atau layanan Anda. Hal ini tentu akan menyulitkan proses audit keamanan. Dengan menutup akses tersebut sejak dari lapisan firewall (iptables dan ipset), log server Anda akan menjadi lebih bersih dan fokus pada aktivitas yang benar-benar penting.

Namun, tantangan utama dalam mengelola firewall berbasis negara adalah dinamika alamat IP itu sendiri. Rentang alamat IP (IP Ranges) sebuah negara terus berubah seiring dengan pertumbuhan penyedia layanan internet (ISP). Oleh karena itu, penggunaan metode statis sudah tidak lagi relevan. Di SuryaSSH, kami menekankan pentingnya penggunaan alat yang dinamis, seperti pengambilan basis data zona IP secara otomatis dari sumber tepercaya dan integrasi notifikasi real-time. Melalui tutorial ini, Anda akan belajar cara membangun benteng pertahanan yang cerdas dan efisien untuk infrastruktur Anda.

PENTING: Sebelum menerapkan aturan ini, pastikan IP koneksi Anda saat ini tidak ikut terblokir. Gunakan akses cadangan (seperti VNC panel VPS) jika terjadi kesalahan konfigurasi.

1. Persiapan Awal

Pertama, kita harus menginstal paket ipset untuk menangani ribuan IP secara efisien, serta iptables-persistent agar aturan tidak hilang saat server di-reboot.

apt update && apt upgrade -y
apt install ipset iptables-persistent curl wget -y

*Pilih YES jika muncul konfirmasi penyimpanan aturan IPv4.

Metode A

Whitelist Indonesia (Eksklusif IP Lokal)

Metode ini mengunci server Anda sehingga hanya IP dari dalam negeri yang bisa mengakses port-port spesifik.

Langkah Konfigurasi:

Jalankan nano /root/full-firewall.sh dan tempelkan kode berikut:

#!/bin/bash
# --- SURYASSH GEO-FIREWALL ---
BOT_TOKEN="ISI_TOKEN_KAMU"
CHAT_ID="ISI_CHAT_ID_KAMU"
MYIP="IP_VPS_ANDA"
TCP_PORTS="22,80,109,443,8080,1194,7100,7300"

# Bersihkan Aturan Lama
iptables -F && iptables -X
ipset destroy whitelist_id 2>/dev/null

# Ambil Database IP Indonesia Terbaru
wget -q -O /tmp/id.zone http://www.ipdeny.com/ipblocks/data/countries/id.zone
ipset create whitelist_id hash:net -exist
for ip in $(cat /tmp/id.zone); do
  ipset add whitelist_id $ip -exist
done
ipset add whitelist_id $MYIP -exist

# Terapkan Aturan Iptables
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports $TCP_PORTS -m set ! --match-set whitelist_id src -j LOG --log-prefix "FW-DROP-TCP: "
iptables -A INPUT -p tcp -m multiport --dports $TCP_PORTS -m set ! --match-set whitelist_id src -j DROP
iptables -P INPUT ACCEPT
netfilter-persistent save
Metode B

Blacklist Negara Tertentu

Blokir akses dari negara spesifik yang sering meluncurkan serangan brute-force (br, cn, sg, dll).

#!/bin/bash
# Daftar Kode Negara yang Diblokir
BLOCK_LIST="br cn sg bg co ph th ma sd za ml tn"

for cc in $BLOCK_LIST; do
  wget -q -O /tmp/$cc.zone http://www.ipdeny.com/ipblocks/data/countries/$cc.zone
  for ip in $(cat /tmp/$cc.zone); do
    ipset add block_countries $ip -exist
  done
done

iptables -A INPUT -m set --match-set block_countries src -j LOG --log-prefix "COUNTRY-BLOCK: "
iptables -A INPUT -m set --match-set block_countries src -j DROP
netfilter-persistent save

Monitoring Real-Time Telegram

Pantau setiap upaya akses ilegal yang diblokir langsung melalui ponsel Anda. Skrip ini akan membaca log kernel dan mengirimkannya ke bot Telegram.

# Konfigurasi Script Monitoring
cat < /root/fw-monitor.sh
#!/bin/bash
tail -Fn0 /var/log/kern.log | while read line; do
  echo "\$line" | grep "FW-DROP" > /dev/null
  if [ \$? = 0 ]; then
    IP=\$(echo \$line | grep -oP 'SRC=\K[0-9.]+')
    PORT=\$(echo \$line | grep -oP 'DPT=\K[0-9]+')
    MSG="🚨 ACCESS BLOCKED
IP: \$IP
Port: \$PORT
Server: \$(hostname)
Waktu: \$(date)"
    curl -s -X POST https://api.telegram.org/bot$BOT_TOKEN/sendMessage -d chat_id=$CHAT_ID -d text="\$MSG"
  fi
done
EOF
Verifikasi Konfigurasi

Gunakan perintah berikut untuk memastikan semua aturan berjalan sempurna:

  • Cek Iptables: iptables -L INPUT -n --line-numbers
  • Cek IPSET: ipset list
  • Cek Status Monitor: systemctl status fw-monitor
v