Sistem deteksi DDoS hybrid yang menggunakan Machine Learning (Naive Bayes Gaussian) untuk mengidentifikasi dan memblokir serangan DDoS secara otomatis. Sistem ini dapat berjalan pada server lokal atau terintegrasi dengan router MikroTik untuk perlindungan jaringan yang lebih komprehensif.
- Persyaratan Sistem
- Instalasi
- Konfigurasi
- Penggunaan
- Integrasi WhatsApp
- Integrasi Email
- Struktur Proyek
- Troubleshooting
- Ubuntu Linux 22.04+ (versi stabil yang direkomendasikan)
- Akses root/sudo untuk menjalankan iptables dan tshark
- Python 3.11+ (versi minimum yang didukung)
- pandas==2.1.4
- scikit-learn==1.3.2
- joblib==1.3.2
- colorama==0.4.6
- requests==2.31.0
- RouterOS-api==0.17.0
- python-dotenv==1.0.0
- numpy==1.26.2
- matplotlib==3.8.2
cd /path/to/your/projectpip install pandas==2.1.4 scikit-learn==1.3.2 joblib==1.3.2 colorama==0.4.6 requests==2.31.0 RouterOS-api==0.17.0 python-dotenv==1.0.0 numpy==1.26.2 matplotlib==3.8.2sudo apt-get update
sudo apt-get install tshark -yIzinkan non-root user untuk menjalankan tshark:
sudo usermod -a -G wireshark $USER
sudo chmod +x /usr/bin/dumpcapLogout dan login kembali agar perubahan grup berlaku.
Pastikan iptables sudah installed:
sudo apt-get install iptables -yDefault interface adalah enp0s8. Cek interface Anda dengan:
ip addr showJika ingin mengintegrasikan dengan MikroTik untuk perlindungan jaringan yang lebih baik, jalankan perintah berikut di MikroTik CLI:
/ip service set api port=8728 disabled=no
/user add name=apiuser password=apiuser group=full
/ip firewall address-list add list=blacklist address=0.0.0.0 comment="Placeholder"
/tool sniffer set filter-interface=ether1 streaming-enabled=yes streaming-server=<IP_SERVER> filter-stream=yes
Ganti <IP_SERVER> dengan IP address server Ubuntu Anda.
/tool sniffer start
-
Daftar di Fonnte
- Kunjungi fonnte.com
- Register dengan nomor WhatsApp Anda
- Verifikasi nomor WhatsApp
-
Dapatkan Token
- Login ke Fonnte Dashboard
- Buka menu "Device"
- Copy token API Anda
-
Konfigurasi Token
- Buka file
/messages/whatsapp/wa.py - Temukan baris:
token = "isikan_token_di_sini" - Ganti dengan token Anda:
token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- Buka file
-
Update Nomor Tujuan
- Di
server.pydanrouter.py, cari:
wa_targets = [ "6285835524290", # Ganti dengan nomor Anda ]
- Di
-
Aktifkan 2-Factor Authentication di Gmail
- Login ke akun Google Anda
- Buka Security settings
- Aktifkan 2-Step Verification
-
Buat App Password
- Pergi ke Google Account Security
- Buka "App passwords" (akan muncul setelah 2FA aktif)
- Pilih "Mail" dan "Windows Computer" (atau device Anda)
- Copy 16-digit password yang digenerate
-
Konfigurasi Credentials
- Buka file
/messages/mail/mail.py - Temukan baris:
self.sender_email = "isikan_email" self.password = "isikan_key"
- Ganti dengan:
self.sender_email = "your.email@gmail.com" self.password = "xxxx xxxx xxxx xxxx" # 16-digit app password
- Buka file
-
Update Email Penerima
- Di
server.pydanrouter.py, cari:
email_receivers = [ "liando1804@gmail.com", # Ganti dengan email Anda ]
- Di
python3 server.pyOpsi Command Line:
python3 server.py --interface enp0s8 --model model/result/model/ddos_model.pklFlags yang tersedia:
--interface, -i: Network interface untuk monitoring (default: enp0s8)--model, -m: Path ke model ML (default: model/result/model/ddos_model.pkl)--no-iptables: Disable iptables blocking--no-blackhole: Disable blackhole route--port, -p: Port server (default: 6001)
Pastikan MikroTik sudah menjalankan /tool sniffer start terlebih dahulu!
python3 router.pyOpsi Command Line:
python3 router.py \
--interface any \
--host 10.10.18.2 \
--user apiuser \
--pass apiuser \
--mt-port 8728Flags yang tersedia:
--interface, -i: Interface untuk tshark (default: any)--model, -m: Path ke model ML--host: IP address MikroTik (default: 10.10.18.2)--user: Username API MikroTik (default: apiuser)--pass: Password API MikroTik (default: apiuser)--mt-port: Port API MikroTik (default: 8728)--no-iptables: Disable iptables blocking--no-blackhole: Disable blackhole route
Untuk menghapus semua IP yang ter-block:
python3 reset.py- System menggunakan TShark untuk menangkap packet dari network
- Packet dimasukkan ke dalam queue untuk diproses
Setiap packet dianalisis untuk mengekstrak fitur:
- Protocol (ICMP, TCP, UDP)
- Average Packet Length
- Packet Rate (packets per second)
- Packet Count
- IP TTL (Time To Live)
- Model Naive Bayes Gaussian memprediksi apakah traffic adalah DDoS Attack atau Normal
- Confidence probability ditampilkan untuk setiap prediksi
- Sistem menggunakan sliding window dengan state memory
- DDoS dipastikan setelah terdeteksi 3x dalam interval window (5 deteksi berturut-turut)
- Ini mengurangi false positive
Ketika DDoS dikonfirmasi, sistem melakukan:
- Server Mode: iptables DROP rule + Blackhole routing
- Router Mode: MikroTik Address List + Firewall Filter Rules
Sistem mengirimkan notifikasi melalui:
- WhatsApp (instant alert)
- Email (detailed report dengan HTML formatting)
project/
βββ server.py # Deteksi DDoS di server lokal
βββ router.py # Deteksi DDoS dengan MikroTik router
βββ reset.py # Reset semua setting blokir
β
βββ model/
β βββ result/
β βββ model/
β βββ ddos_model.pkl # Model ML yang sudah ditraining
β βββ label_encoder.pkl # Label encoder untuk predictions
β
βββ messages/
β βββ message.py # Class utama untuk mengirim notifikasi
β βββ whatsapp/
β β βββ wa.py # WhatsApp integration (Fonnte)
β βββ mail/
β βββ mail.py # Email integration (Gmail)
β
βββ README.md # Dokumentasi ini
Sistem akan menampilkan output seperti berikut di terminal:
Datetime | Source IP | Protocol | Packet Length | Packet Rate | Packet Count | IP TTL | Status | Probability
2024-02-09 14:23:45 | 192.168.64.100 | UDP | 65 | 250 | 750 | 64 | Normal | 85.50%
2024-02-09 14:23:48 | 192.168.64.150 | TCP | 120 | 1500 | 4500 | 128 | DDOS-Attack | 92.30%
- Datetime : Timestamp deteksi
- Source IP : IP address pengirim paket
- Protocol : Protokol yang digunakan (ICMP, TCP, UDP)
- Packet Length : Rata-rata ukuran paket (bytes)
- Packet Rate : Jumlah paket per detik
- Packet Count : Total paket dalam window
- IP TTL : Time To Live dari IP header
- Status : Hasil klasifikasi (Normal/DDOS-Attack)
- Probability : Confidence level dari model
-
Change Default Credentials
/user set apiuser password=strong_password_here -
Restrict API Access
/ip service set api address=10.10.18.0/24 -
Monitor Blacklist
- Periksa
/ip firewall address-listsecara berkala - Hapus IP yang sudah diperbaiki:
/ip firewall address-list remove [find list=blacklist] - Periksa
-
Backup Configuration
cp model/result/model/ddos_model.pkl model/result/model/ddos_model.pkl.backup
Solution:
sudo usermod -a -G wireshark $USER
# Logout dan login kembaliSolution:
- Pastikan API service aktif:
/ip service set api disabled=no - Cek IP address MikroTik:
ip addrdi MikroTik - Pastikan firewall tidak memblok port 8728
- Test koneksi:
telnet <mikrotik_ip> 8728
Solution:
pip install RouterOS-api==0.17.0Troubleshoot:
- Pastikan token Fonnte valid
- Cek koneksi internet
- Verifikasi nomor WhatsApp terdaftar di Fonnte
- Test token dengan curl:
curl -X GET "https://api.fonnte.com/validate?token=YOUR_TOKEN"Troubleshoot:
- Pastikan 2FA Gmail sudah aktif
- Verifikasi app password benar (16 digit)
- Cek di Gmail: Settings > Security > Less secure app access
- Lihat log di
/messages/mail/mail.py
Solution:
# Pastikan path benar
ls -la model/result/model/
# Jika tidak ada, download/training ulang modelSolution:
# Cek iptables rules
sudo iptables -L -n -v
# Flush dan reset rules (HATI-HATI!)
sudo iptables -F
sudo iptables -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPTSolution:
# Temukan proses yang menggunakan port
sudo lsof -i :6001
# Kill process jika perlu
sudo kill -9 <PID>
# Atau gunakan port berbeda
python3 server.py --port 6002Tambahkan ke dalam code untuk verbose logging:
import logging
logging.basicConfig(level=logging.DEBUG)# Ubuntu system logs
tail -f /var/log/syslog | grep tshark
# Iptables logs
sudo iptables -L -n -v
# MikroTik logs (via SSH)
ssh admin@<mikrotik_ip>
/log printJika mengalami masalah atau punya pertanyaan:
- Cek dokumentasi di README.md (file ini)
- Review logs dan error messages
- Test komponen secara terpisah
- Hubungi tim development (085835524290 / liando1801@gmail.com)