Cara Install IDS Snort di Ubuntu: Deteksi Serangan Jaringan
Jam 2:47 pagi. Saya terbangun karena notifikasi Telegram dari server lab. Isinya alert Snort: “ET MALWARE Suspicious DNS Query (possible data exfiltration).” Awalnya saya kira false positive — maklum, Snort emang terkenal noisy. Tapi pas saya cek lebih detail, traffic DNS itu ngirim query ke domain aneh dengan subdomain yang keliatan kayak encoded data. Ternyata ada satu VM vulnerable di lab saya yang kena infection dan si malware nyoba exfiltrate data lewat DNS tunneling. Kalau nggak ada Snort yang ngawasin, saya mungkin nggak akan tahu sampai data saya udah di server attacker entah berapa lama. Dari pengalaman itu saya sadar bahwa cara install IDS Snort bukan cuma urusan teknis — tapi investasi buat punya mata tambahan yang ngawasin jaringan 24/7.
Kejadian itu bikin saya respect banget sama intrusion detection system. Bukan karena teknologinya canggih — tapi karena dia jadi saksi bisu yang ngasih tahu ketika ada yang nggak beres. Nah, di artikel ini saya mau sharing cara install IDS Snort di Ubuntu dari nol sampai bisa deteksi serangan beneran. Full step-by-step, plus pengalaman pribadi konfigurasi dan tuning.
Apa Itu IDS dan IPS? Kok Bisa Keduanya Mirip Tapi Beda?
Sebelum install, kita perlu ngerti dulu apa yang sebenernya kita install. Jangan asal copy-paste command doang.
IDS (Intrusion Detection System)
IDS itu ibarat CCTV di jaringan. Dia ngawasin semua traffic yang lewat, dan kalau nemu pola yang mencurigakan, dia ngasih alert. Tapi dia nggak ngapa-ngapain — cuma ngasih tahu. Posisinya biasanya di spanning port switch (mirror port) atau network tap, jadi dia passively monitor traffic tanpa ikut campur.
IPS (Intrusion Prevention System)
IPS itu ibarat satpam. Dia nggak cuma ngawasin, tapi juga bisa ngeblok traffic yang dianggap malicious. Posisinya inline — semua traffic harus lewat dia dulu sebelum sampai ke tujuan. Kalau ada yang mencurigakan, langsung di-drop.
Nah, Snort itu sebenarnya bisa dua-duanya: IDS mode (passive monitoring) dan IPS mode (inline blocking). Tapi instalasi dasarnya adalah IDS. Untuk jadi IPS, butuh konfigurasi tambahan (AF_PACKET atau NFQ mode) yang lebih kompleks. Di artikel ini kita fokus ke IDS dulu.
Signature-Based vs Anomaly-Based Detection
Snort termasuk signature-based IDS — dia deteksi serangan berdasarkan pola (signature/rules) yang udah didefinisikan. Keuntungannya: akurat buat known threats, false positive relatif rendah. Kelemahannya: nggak bisa deteksi zero-day atau serangan baru yang belum ada signature-nya.
Bandingin sama anomaly-based (kayak Zeek/Bro) yang belajar baseline traffic normal dan alerting kalau ada deviasi. Lebih bisa deteksi unknown threats, tapi false positive tinggi.
Di lapangan, saya pakai dua-duanya. Snort buat known threats, Zeek buat anomaly detection. Tapi Snort lebih gampang buat pemula, makanya kita mulai dari sini.
Kenapa Pilih Snort?
Ini pertanyaan yang sering saya dapet: “Kenapa nggak Suricata aja? Kan lebih modern?” Emang bener, Suricata itu multi-threaded, support GPU acceleration, dan secara umum lebih cepet. Tapi Snort udah jadi standar industri selama 20+ tahun, dokumentasinya bejibun, komunitasnya gede, dan aturannya (rules) didukung penuh sama Cisco Talos.
Alasan saya pribadi pilih Snort buat lab:
- Rules komunitas gratis — Snort Community Rules bisa dipake tanpa lisensi.
- Konfigurasi detil — Kamu bisa custom rules sendiri dengan sintaks yang udah mature.
- Ribuan tutorial — Kalau nyangkut, tinggal Google.
- Stabil — Jarang crash, resource-friendly.
Tapi kekurangannya: Snort 2.x itu single-threaded. Jadi kalau traffic lo gede (misalnya di atas 500 Mbps), mulai deh packet drop. Kalau jaringan lo besar, pertimbangin Suricata atau Zeek. Tapi buat lab rumahan atau small-medium network, Snort udah lebih dari cukup.
Prasyarat Sebelum Install Snort
Sebelum mulai install, pastikan beberapa hal ini:
- Ubuntu Server 22.04 atau 24.04 — Saya pakai 22.04 LTS buat stabilitas.
- User dengan sudo access — Install butuh root privilege.
- Network interface yang dedicated — Snort akan listen di interface tertentu. Idealnya interface yang terhubung ke span/mirror port switch.
- Minimal RAM 4GB, Storage 20GB — Snort rules dan log bisa lumayan gede.
- Koneksi internet — Buat download Snort, dependencies, dan rules.
Di lab saya, saya setup VM Ubuntu khusus buat Snort dengan dua network interface:
- eth0: Management (bisa SSH)
- eth1: Sniffing (terhubung ke mirror port switch)
Eth1 ini yang nanti jadi interface monitoring Snort. Dengan dua NIC terpisah, traffic management nggak ikut ke-scan dan alert Snort nggak campur aduk dengan traffic SSH saya.
Step-by-Step: Cara Install IDS Snort di Ubuntu
Oke, ini bagian yang ditunggu. Saya tulis perintah lengkap dengan penjelasan biar kamu nggak cuma copy-paste buta.
Step 1: Update dan Install Dependencies
sudo apt update && sudo apt upgrade -y
# Dependencies untuk build Snort
sudo apt install -y build-essential autotools-dev libdumbnet-dev \
libluajit-5.1-dev libpcap-dev zlib1g-dev pkg-config libhwloc-dev \
libssl-dev liblzma-dev libnetfilter-queue-dev
# Tools pendukung
sudo apt install -y wget tar cmake curl git
Step 2: Install libdaq (Data Acquisition Library)
DAQ itu abstraction layer yang dipake Snort buat ngambil paket dari berbagai sumber (pcap file, network interface, NFQ, AF_PACKET, dll).
cd /tmp
wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
tar -xzf daq-2.0.7.tar.gz
cd daq-2.0.7
./configure
make
sudo make install
sudo ldconfig
Step 3: Install Snort 2
cd /tmp
wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz
tar -xzf snort-2.9.20.tar.gz
cd snort-2.9.20
./configure --enable-sourcefire
make
sudo make install
sudo ldconfig
# Symlink binary
sudo ln -s /usr/local/bin/snort /usr/sbin/snort
# Verifikasi install
snort --version
Output yang diharapkan:
,,_ -*> Snort! <*-
o" )~ Version 2.9.20
'''' By Martin Roesch & The Snort Team
Kalau keluar ASCII piggy dan versi, artinya install berhasil.
Step 4: Setup User dan Direktori Snort
Sangat penting: jangan jalankan Snort sebagai root. Bikin dedicated user:
# Bikin user dan grup
sudo groupadd snort
sudo useradd snort -r -s /usr/sbin/nologin -c "SNORT_IDS" -g snort
# Bikin direktori
sudo mkdir -p /etc/snort /etc/snort/rules /var/log/snort /usr/local/lib/snort_dynamicrules
sudo chmod -R 5775 /etc/snort /var/log/snort /usr/local/lib/snort_dynamicrules
sudo chown -R snort:snort /etc/snort /var/log/snort /usr/local/lib/snort_dynamicrules
# Copy config file
sudo cp /tmp/snort-2.9.20/etc/*.conf* /tmp/snort-2.9.20/etc/*.map /etc/snort/
Step 5: Konfigurasi snort.conf
Ini file konfigurasi utama Snort. Letaknya di /etc/snort/snort.conf. Edit beberapa bagian penting:
sudo nano /etc/snort/snort.conf
Setting network variables:
# IP network rumah/lab kamu
ipvar HOME_NET 192.168.1.0/24
# IP yang dianggap external (biasanya selain HOME_NET)
ipvar EXTERNAL_NET !$HOME_NET
Setting paths:
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules
var WHITE_LIST_PATH /etc/snort/rules/iplists
var BLACK_LIST_PATH /etc/snort/rules/iplists
Setting output:
output unified2: filename snort.log, limit 128
Ini format log yang nanti dibaca oleh Barnyard2 (optional) atau tool analysis lain. Bisa juga pake syslog atau alert_fast untuk output text langsung.
Step 6: Download dan Setup Snort Rules
Rules ini yang bikin Snort tau mana traffic normal mana yang malicious. Tanpa rules, Snort cuma jadi packet sniffer mahal.
Community Rules (gratis):
cd /tmp
wget https://www.snort.org/downloads/community/community-rules.tar.gz
tar -xzf community-rules.tar.gz -C /etc/snort/rules/
Registered Rules (gratis, perlu registrasi di snort.org):
Kalau kamu register di snort.org, kamu bisa download rules yang lebih lengkap (rilis 30 hari setelah subscriber rules). Worth it buat yang serius.
Update rules secara berkala:
Rules perlu di-update rutin karena ancaman selalu berubah. Bisa pakai PulledPork atau Oinkmaster. Saya pakai PulledPork:
sudo apt install -y pulledpork
Konfigurasi PulledPork untuk auto-update rules setiap hari via cron.
Step 7: Test Konfigurasi
Sebelum jalanin Snort, pastikan konfigurasi nggak ada yang error:
sudo snort -T -c /etc/snort/snort.conf -i eth1
Kalau outputnya:
Snort successfully validated the configuration!
Snort exiting
Berarti aman. Kalau ada error, Snort bakal kasih tahu baris mana di snort.conf yang bermasalah.
Step 8: Jalankan Snort
Setelah konfigurasi valid, jalanin Snort:
# IDS mode (alerting aja)
sudo snort -A console -c /etc/snort/snort.conf -i eth1
# Atau jalanin di background
sudo snort -D -A full -c /etc/snort/snort.conf -i eth1
Flag:
- -A console: Tampilin alert langsung ke terminal
- -A full: Log alert lengkap ke file
- -D: Daemon mode (jalan di background)
- -i eth1: Interface yang dimonitor
- -l /var/log/snort: Direktori log
Step 9: Setup Systemd Service (Biar Auto-Start)
Biar Snort jalan otomatis setiap boot:
sudo nano /etc/systemd/system/snort.service
Isinya:
[Unit]
Description=Snort IDS Service
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/snort -D -u snort -g snort -c /etc/snort/snort.conf -i eth1 -l /var/log/snort
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl enable snort
sudo systemctl start snort
sudo systemctl status snort
Membaca Alert Snort — Jangan Panik Lihat Alert
Pertama kali Snort jalan, kemungkinan besar kamu bakal dibanjiri alert. Jangan panik — itu normal. Masalahnya adalah mayoritas alert awal itu false positive.
Contoh output alert Snort:
[**] [1:2010936:3] ET SCAN Suspicious inbound to mySQL port 3306 [**]
[Classification: Potentially Bad Traffic] [Priority: 2]
08/15-14:32:10.123456 203.0.113.5:51234 -> 192.168.1.10:3306
TCP TTL:64 TOS:0x0 ID:54321 IpLen:20 DgmLen:60
Ini artinya Snort mendeteksi ada inbound connection ke port MySQL. Bisa jadi legitimate (aplikasi internal query database) atau beneran attack. Cara bedainnya:
- Cek source IP — Internal atau external?
- Cek timing — Jam kerja atau tengah malam?
- Cek frekuensi — Sekali doang atau berkali-kali?
- Cross-reference dengan log lain — Ada aktivitas di aplikasi yang sesuai?
Tools Bantu Baca Alert
Alert text mentah itu susah dibaca. Pakai salah satu tool ini:
- Snorby: Web UI buat Snort (Ruby-based, agak ribet install-nya)
- BASE (Basic Analysis and Security Engine): Web frontend PHP
- Sguil: Analyst console untuk network security monitoring
- ELK Stack (Elasticsearch, Logstash, Kibana): Setup-nya lebih effort tapi hasilnya powerful
Saya pribadi pakai ELK buat analisis log — bisa bikin dashboard custom, filter, dan visualisasi yang cakep. Tapi buat pemula, cukup baca /var/log/snort/alert aja dulu.
Testing: Pastiin Snort Beneran Deteksi Serangan
Jangan percaya kalau Snort udah jalan sebelum di-test. Ini cara test-nya:
Test 1: Generate Malicious Traffic dengan Nmap
# Dari mesin lain di jaringan yang sama
sudo nmap -sS -p 1-1000 <IP_SNORT_MONITORING>
Snort seharusnya ngasih alert tentang port scan activity.
Test 2: Download Test Rules
Bikin file /etc/snort/rules/local.rules dengan isi:
alert icmp any any -> $HOME_NET any (msg:"ICMP Test Detected"; sid:1000001; rev:1;)
alert tcp any any -> $HOME_NET 80 (msg:"HTTP Traffic Detected"; sid:1000002; rev:1;)
Ini bikin aturan custom yang alert setiap ada ICMP dan HTTP traffic. Pastiin file local.rules di-include di snort.conf.
Test 3: Simulasi Attack Pake Metasploit
Kalau udah lebih advance, coba setup Metasploitable VM dan serang dari Kali Linux. Snort dengan community rules bisa deteksi banyak exploit Metasploit karena signature-nya udah dikenal.
# Di Kali Linux
msfconsole
use exploit/unix/ftp/vsftpd_234_backdoor
set RHOST <IP_METASPLOITABLE>
exploit
Snort bakal alert: “ET EXPLOIT VSFTPD Backdoor” atau sejenisnya.
Tuning: Ngurangin False Positive
Ini bagian paling penting — mungkin lebih penting dari install-nya sendiri. Snort tanpa tuning itu useless karena alert yang kebanyakan bikin alert fatigue. Lama-lama kamu jadi matiin alert atau ignore semuanya — dan pas serangan beneran terjadi, kamu nggak sadar.
Strategi tuning yang saya pakai:
Disable Rules yang Nggak Relevan
Misalnya kamu nggak pake Oracle database, disable semua rules tentang Oracle:
# Di /etc/snort/snort.conf, comment atau hapus include rules Oracle
# include $RULE_PATH/oracle.rules
Bikin Suppression List
Snort punya fitur suppression — membungkam alert tertentu dari IP tertentu:
File /etc/snort/threshold.conf:
suppress gen_id 1, sig_id 2010936, track by_src, ip 192.168.1.100
Ini nge-suppress alert SID 2010936 (MySQL scan) dari IP 192.168.1.100 (misalnya server aplikasi yang emang legit akses MySQL).
Thresholding
Biar nggak dibanjiri alert yang sama:
threshold gen_id 1, sig_id 2010936, type limit, count 1, seconds 60
Ini membatasi alert SID 2010936 maksimum sekali per menit. Bukan berarti cuma satu deteksi — tapi alert-nya dibatesin.
Bikin Pass Rules
Buat traffic yang kamu tahu legitimate dan nggak mau di-alert:
pass tcp 192.168.1.50 any -> 192.168.1.10 3306 (msg:"Legit MySQL from App Server"; sid:2000001;)
Alternatif Snort: Suricata dan Zeek
Sebagai perbandingan, ini alternatif yang perlu kamu tahu:
| Fitur | Snort | Suricata | Zeek (Bro) |
|---|---|---|---|
| Tipe | Signature-based | Signature-based | Anomaly + Signature |
| Threading | Single-threaded | Multi-threaded | Multi-threaded |
| Performance | Cukup | Lebih cepat | Cepat |
| Rules compatibility | Snort rules | Snort + own | Own language |
| Kompleksitas | Menengah | Menengah | Tinggi |
| Use case | Small-medium network | Large network | Large network, forensik |
Saya pakai Snort di lab rumahan (traffic < 100 Mbps), tapi kalau kamu ngelola network perusahaan, Suricata atau Zeek lebih recommended.
Pengalaman Pribadi: Snort Tangkap Serangan Nyata
Saya mau cerita satu pengalaman yang bikin saya makin percaya sama IDS. Waktu itu saya setup Snort di jaringan kantor kecil punya temen — iseng aja, sekalian ngetes konfigurasi. Setelah dua minggu jalan, tiba-tiba Snort alert soal “ET POLICY DNS Query for .onion domain over UDP” dari satu workstation klien.
Ini aneh banget — nggak ada alasan legitimate buat karyawan akses .onion domain. Ternyata setelah diinvestigasi, workstation itu kena malware yang nyoba komunikasi ke C2 server lewat Tor. Malware-nya udah ada sejak sebelum Snort dipasang — dan tanpa Snort, nggak akan ketahuan sampai mungkin udah data breach.
Satu workstation langsung diisolasi, di-reimage, dan kita audit ulang semua endpoint. Snort literally saved their network from potential data exfiltration. Dari situ temen saya langsung investasi di monitoring yang lebih serius — termasuk bikin tim SOC internal.
Maintenance Rutin Snort
Snort bukan set-and-forget tool. Ini rutinitas maintenance yang saya jalanin:
- Update rules setiap minggu (atau setiap hari kalau environment critical).
- Review alert minimal seminggu sekali — identifikasi false positive baru dan bikin suppression.
- Cek disk space — log Snort bisa cepet gede, setup logrotate.
- Cek packet drop — kalau Snort mulai drop packet, indikasi butuh upgrade hardware atau tuning lebih agresif.
- Update Snort setiap major release atau kalau ada CVE di Snort sendiri.
# Cek statistik Snort
sudo snort -c /etc/snort/snort.conf --pcap-snaplen=0 -r /var/log/snort/snort.log.* 2>&1 | grep -E "Packets|Received|Analyzed|Dropped"
Mulai Deteksi Serangan Sekarang
Cara install IDS Snort emang butuh effort di awal — download dependencies, compile, konfigurasi, tuning. Tapi setelah jalan, manfaatnya luar biasa. Kamu jadi punya “mata” di jaringan yang ngawasin 24/7. Setiap kali ada yang aneh, kamu dapat notifikasi.
Saran saya: jangan langsung pasang di production. Mulai dari lab. Setup VM Ubuntu, install Snort, generate traffic buatan, baca alert-nya, tuning, ulangi. Setelah pede, baru pindah ke production dengan monitoring yang lebih serius.
Dan yang paling penting: jangan ignore alert Snort. Setiap alert adalah potensi — bisa jadi false positive, tapi bisa juga early warning yang nyariin kamu dari insiden keamanan yang jauh lebih besar. Kayak pengalaman saya jam 3 pagi itu — kalau saya ignore alert DNS tunneling, mungkin data lab saya udah dijual di dark web sekarang.