Suricata adalah alat Pemantauan Jaringan yang memeriksa dan memproses setiap paket lalu lintas internet yang mengalir melalui server Anda. Ini dapat menghasilkan peristiwa log, memicu peringatan, dan menurunkan lalu lintas setelah mendeteksi aktivitas yang mencurigakan.
Anda dapat menginstal Suricata pada satu mesin untuk memantau lalu lintasnya atau menggunakan host gateway untuk memindai semua lalu lintas masuk dan keluar dari server lain yang terhubung dengannya. Anda dapat menggabungkan Suricata dengan Elasticsearch, Kibana, dan Filebeat untuk membuat alat Informasi Keamanan dan Manajemen Peristiwa (SIEM).
Dalam tutorial ini, Anda akan menginstal Suricata IDS bersama dengan ElasticStack di server Rocky Linux 8. Berbagai komponen tumpukan adalah:
- Elasticsearch untuk menyimpan, mengindeks, menghubungkan, dan mencari peristiwa keamanan dari server.
- Kibana untuk menampilkan log yang disimpan di Elasticsearch.
- Filebeat untuk mengurai
eve.json
Suricata log file dan kirim setiap acara ke Elasticsearch untuk diproses. - Suricata untuk memindai lalu lintas jaringan untuk mencari kejadian yang mencurigakan dan membuang paket yang tidak valid.
Tutorial ini dibagi menjadi dua bagian, bagian pertama akan membahas instalasi dan konfigurasi Suricata, dan bagian kedua akan membahas instalasi dan konfigurasi Elastic Stack.
Kami akan menginstal Suricata dan tumpukan Elastis di server yang berbeda untuk tutorial kami.
Prasyarat
-
Server yang menghosting Elastic Stack dan Suricata harus memiliki minimal 4 GB RAM dan 2 inti CPU.
-
Server harus dapat berkomunikasi satu sama lain menggunakan alamat IP pribadi.
-
Server harus menjalankan Rocky Linux 8 dengan pengguna sudo non-root.
-
Jika Anda ingin mengakses dasbor Kibana dari mana saja, siapkan domain (
kibana.example.com
) menunjuk ke server tempat Suricata akan dipasang. -
Instal paket penting di kedua server.
$ sudo dnf install yum-utils nano curl
Konfigurasi Firewall
BAGIAN 1
Langkah 1 - Instal Suricata
Untuk menginstal Suricata, Anda perlu menambahkan repositori paket Open Information Security Foundation (OISF) ke server Anda.
$ sudo dnf install 'dnf-command(copr)'$ sudo dnf copr aktifkan @oisf/suricata-6.0
Perintah pertama mengaktifkan proyek Komunitas (copr
) untuk dnf
penginstal paket. Perintah kedua mengaktifkan dan menambahkan repositori OISF ke sistem Anda. suricata-6.0
mengaktifkan repositori untuk versi perangkat lunak terbaru yang stabil. Tekan y
dan ENTER
setiap kali Anda diminta.
Selanjutnya, tambahkan repositori EPEL.
$ sudo dnf install epel-release
Instal Suricata.
$ sudo dnf install suricata
Aktifkan layanan Suricata.
$ sudo systemctl aktifkan suricata
Langkah 2 - Konfigurasi Suricata
Suricata menyimpan konfigurasinya di /etc/suricata/suricata.yaml
mengajukan. Mode default untuk Suricata adalah Mode IDS (Intrusion Detection System), di mana lalu lintas hanya dicatat dan tidak dihentikan. Jika Anda baru mengenal Suricata, Anda harus membiarkan mode tidak berubah. Setelah Anda mengonfigurasinya dan mempelajari lebih lanjut, Anda dapat mengaktifkan mode IPS (Intrusion Prevention System).
Aktifkan ID Komunitas
Bidang ID komunitas memudahkan untuk mengkorelasikan data antara catatan yang dihasilkan oleh alat pemantauan yang berbeda. Karena kita akan menggunakan Suricata dengan Elasticsearch, mengaktifkan ID Komunitas dapat bermanfaat.
Buka file /etc/suricata/suricata.yaml
untuk diedit.
$ sudo nano /etc/suricata/suricata.yaml
Cari baris # Community Flow ID
dan atur nilai variabel community-id
untuk true
.
. . . # ID Aliran Komunitas # Menambahkan bidang 'id_komunitas' ke catatan EVE. Ini dimaksudkan untuk memberikan # catatan ID aliran yang dapat diprediksi yang dapat digunakan untuk mencocokkan catatan dengan # keluaran alat lain seperti Zeek (Bro). # # Mengambil 'benih' yang harus sama di seluruh sensor dan alat # untuk membuat id kurang dapat diprediksi. # aktifkan/nonaktifkan fitur id komunitas. id komunitas:benar. . .
Sekarang, acara Anda akan membawa ID seperti 1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ=
yang dapat Anda gunakan untuk mencocokkan set data di berbagai alat pemantauan.
Pilih Antarmuka Jaringan
File konfigurasi Suricata default memeriksa lalu lintas di eth0
perangkat/antarmuka jaringan. Jika server Anda menggunakan antarmuka jaringan yang berbeda, Anda perlu memperbaruinya dalam konfigurasi.
Periksa nama perangkat antarmuka jaringan Anda menggunakan perintah berikut.
$ ip -p -j rute menunjukkan default
Anda akan menerima output seperti berikut.
[ { "dst":"default", "gateway":"164.90.192,1", "dev":"eth0", "protocol":"static", "metric":100, "flags":[ ] } ]
dev
variabel mengacu pada perangkat jaringan. Dalam output kami, ini menunjukkan eth0
sebagai perangkat jaringan. Output Anda mungkin berbeda tergantung pada sistem Anda.
Sekarang setelah Anda mengetahui nama perangkat Anda, buka file konfigurasi.
$ sudo nano /etc/suricata/suricata.yaml
Temukan baris af-packet:
sekitar baris nomor 580. Di bawahnya, atur nilai variabel interface
ke nama perangkat untuk sistem Anda.
# Paket dukungan penangkapan kecepatan tinggi Linux:- antarmuka:eth0 # Jumlah utas yang diterima. "auto" menggunakan jumlah core #threads:auto # Default clusterid. AF_PACKET akan memuat paket keseimbangan berdasarkan aliran. kluster-id:99. . .
Jika Anda ingin menambahkan antarmuka tambahan, Anda dapat melakukannya dengan menambahkannya di bagian bawah af-packet
bagian di sekitar baris 650.
Untuk menambahkan antarmuka baru, masukkan tepat di atas - interface: default
bagian seperti yang ditunjukkan di bawah ini.
# Untuk setup eBPF dan XDP termasuk bypass, filter dan load balancing, silakan # lihat doc/userguide/capture-hardware/ebpf-xdp.rst untuk info lebih lanjut. - antarmuka:enp0s1 cluster-id:98... - antarmuka:default #threads:auto #use-mmap:no #tpacket-v3:yes
Kami telah menambahkan antarmuka baru enp0s1
dan nilai unik untuk cluster-id
variabel dalam contoh kita. Anda harus menyertakan id cluster unik dengan setiap antarmuka yang Anda tambahkan.
Muat Ulang Aturan Langsung
Anda perlu memulai ulang Suricata setiap kali Anda menambahkan, menghapus, dan mengedit aturannya. Dengan mengaktifkan Aturan Langsung, Suricata dapat memproses perubahan aturan apa pun tanpa memulai ulang.
Untuk mengaktifkan reload langsung, tambahkan baris berikut di bagian bawah file konfigurasi.
. . .detect-engine:- rule-reload:true
Dengan reload langsung diaktifkan, Anda dapat menggunakan perintah berikut untuk memuat ulang aturan tanpa memulai ulang proses Suricata.
$ sudo kill -usr2 $(pidof suricata)
$(pidof suricata)
flag menempatkan ID proses dari proses Suricata. -usr2
bagian dari kill
perintah mengirim SIGUSR2
sinyal ke proses Suricata. SIGUSR2
sinyal dikonfigurasi dengan Suricata untuk memuat ulang aturan.
Setelah selesai, simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Konfigurasikan izin Direktori
Suricata secara otomatis membuat pengguna dan grup sistem bernama suricata
selama proses instalasi. Anda perlu memberikan izin direktori yang tepat agar penginstalan berfungsi dengan baik.
Jalankan perintah berikut untuk mengatur suricata
sebagai grup untuk direktori Suricata.
$ sudo chgrp -R suricata /etc/suricata$ sudo chgrp -R suricata /var/lib/suricata/rules$ sudo chgrp -R suricata /var/lib/suricata/update$ sudo chgrp -R suricata /var/ log/suricata
Setel izin grup untuk membaca dan menulis.
$ sudo chmod -R g+r /etc/suricata/$ sudo chmod -R g+rw /var/lib/suricata/rules$ sudo chmod -R g+rw /var/lib/suricata/update$ sudo chmod -R g+rw /var/log/suricata
Tambahkan nama pengguna Anda saat ini ke suricata group sehingga Anda dapat melakukan operasi secara langsung tanpa perlu sudo.
$ sudo usermod -a -G suricata $USER
Untuk menerapkan keanggotaan grup baru, keluar dari server dan masuk kembali, atau ketik berikut ini:
$ su - ${USER}
Anda akan diminta memasukkan sandi pengguna untuk melanjutkan.
Konfirmasikan bahwa pengguna Anda sekarang telah ditambahkan ke suricata kelompokkan dengan mengetik:
$ id -nGusername sudo suricata
Langkah 3 - Konfigurasi Aturan Suricata
Suricata, secara default, hanya menggunakan seperangkat aturan terbatas untuk mendeteksi lalu lintas jaringan. Anda dapat menambahkan lebih banyak aturan dari penyedia eksternal menggunakan alat yang disebut suricata-update
. Jalankan perintah berikut untuk memasukkan aturan tambahan.
$ suricata-update16/2/2022 -- 07:00:16 --- Menggunakan direktori data /var/lib/suricata.16/2/2022 -- 07:00:16 - -- Menggunakan konfigurasi Suricata /etc/suricata/suricata.yaml16/2/2022 -- 07:00:16 - -- Menggunakan /usr/share/suricata/rules untuk aturan yang disediakan Suricata...... 16/2/2022 -- 07:00:16 - -- Tidak ada sumber yang dikonfigurasi, akan menggunakan Emerging Threats Open('https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules .tar.gz', None, True)16/2/2022 -- 07:00:16 - -- Memeriksa https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules .tar.gz.md5.16/2/2022 -- 07:00:16 - -- Mengambil https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar. gz. 100% - 3162050/3162050.....16/2/2022 -- 07:00:23 - -- Menulis aturan ke /var/lib/suricata/rules/suricata.rules:total:32004; diaktifkan:24611; ditambahkan:8; dihapus 1; diubah:121816/2/2022 -- 07:00:23 - -- Menulis /var/lib/suricata/rules/classification.config16/2/2022 -- 07:00:23 - -- Pengujian dengan suricata -T.16/2/2022 -- 07:01:16 - -- Selesai.
Tambahkan Penyedia Aturan
Anda dapat memperluas aturan Suricata dengan menambahkan lebih banyak penyedia. Itu dapat mengambil aturan dari berbagai penyedia gratis dan komersial.
Anda dapat membuat daftar daftar penyedia default dengan menggunakan perintah berikut.
$ suricata-update list-sources
Misalnya, jika Anda ingin menyertakan tgreen/hunting
ruleset, Anda dapat mengaktifkannya dengan perintah berikut.
$ suricata-update enable-source tgreen/hunting
Jalankan suricata-update
perintah lagi untuk mengunduh dan memperbarui aturan baru.
Langkah 4 - Validasi Konfigurasi Suricata
Suricata dikirimkan dengan alat validasi untuk memeriksa file konfigurasi dan aturan untuk kesalahan. Jalankan perintah berikut untuk menjalankan alat validasi.
$ sudo suricata -T -c /etc/suricata/suricata.yaml -v22/2/2022 -- 23:20:10 -- Menjalankan suricata dalam mode uji22/2/2022 -- 23:20 :10 - - Ini adalah Suricata versi 6.0.4 RELEASE yang berjalan dalam mode SYSTEM22/2/2022 -- 23:20:10 - - CPU/core online:222/2/2022 -- 23:20 :10 - - menghilangkan batasan untuk utas utama22/2/2022 -- 23:20:10 - - perangkat keluaran cepat (biasa) diinisialisasi:fast.log22/2/2022 -- 23:20:10 - - perangkat keluaran eve-log (biasa) diinisialisasi:eve.json22/2/2022 -- 23:20:10 - - perangkat keluaran statistik (biasa) diinisialisasi:stats.log22/2/2022 -- 23:20:21 - - 1 file aturan diproses. 24611 aturan berhasil dimuat, 0 aturan gagal22/2/2022 -- 23:20:21 - - Konfigurasi ambang diurai:0 aturan ditemukan22/2/2022 -- 23:20:21 - - 24614 tanda tangan diproses. 1216 adalah aturan khusus IP, 4120 sedang memeriksa muatan paket, 19074 memeriksa lapisan aplikasi, 108 adalah peristiwa dekoder saja22/2/2022 -- 23:21:02 - - Konfigurasi yang diberikan berhasil dimuat. Exiting.22/2/2022 -- 23:21:03 - - membersihkan struktur pengelompokan tanda tangan... selesai
-T
flag memerintahkan Suricata untuk berjalan dalam mode pengujian, -c
flag mengonfigurasi lokasi file konfigurasi, dan -v
flag mencetak keluaran verbose dari perintah. Bergantung pada konfigurasi sistem Anda dan jumlah aturan yang ditambahkan, perintah dapat memakan waktu beberapa menit untuk diselesaikan.
Langkah 5 - Menjalankan Suricata
Setelah Suricata dikonfigurasi dan disiapkan, sekarang saatnya menjalankan aplikasi.
$ sudo systemctl start suricata
Periksa status proses.
$ sudo systemctl status suricata
Anda akan melihat output berikut jika semuanya bekerja dengan benar.
? suricata.service - Layanan Deteksi Intrusi Suricata Dimuat:dimuat (/usr/lib/systemd/system/suricata.service; diaktifkan; preset vendor:dinonaktifkan) Aktif:aktif (berjalan) sejak Rabu 2022-02-16 07:14:22 UTC; 32 menit yang lalu Dokumen:man:suricata(1) Proses:1494 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS) PID Utama:1496 (Suricata-Main) Tugas :8 (batas:23479) Memori:367,5 juta CGKelompok:/system.slice/suricata.service ??1496 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid - i eth0 --user suricataFeb 16 07:14:22 suricata systemd[1]:Memulai Layanan Deteksi Intrusi Suricata...16 Feb 07:14:22 suricata systemd[1]:Memulai Layanan Deteksi Intrusi Suricata.
Proses ini dapat memakan waktu beberapa menit untuk menyelesaikan penguraian semua aturan. Oleh karena itu, pemeriksaan status di atas bukan merupakan indikasi lengkap apakah Suricata sudah aktif dan siap. Anda dapat memantau file log untuk itu menggunakan perintah berikut.
$ sudo tail -f /var/log/suricata/suricata.log
Jika Anda melihat baris berikut di file log, itu berarti Suricata sedang berjalan dan siap untuk memantau lalu lintas jaringan.
16/02/2022 -- 07:18:39 -- Semua rangkaian tangkapan AFP sedang berjalan.
Langkah 6 - Menguji Aturan Suricata
Kami akan memeriksa apakah Suricata mendeteksi lalu lintas yang mencurigakan. Panduan Suricata merekomendasikan pengujian nomor aturan ET Open 2100498 menggunakan perintah berikut.
$ curl http://testmynids.org/uid/index.html
Anda akan mendapatkan tanggapan berikut.
uid=0(root) gid=0(root) groups=0(root)
Perintah di atas berpura-pura mengembalikan output dari id
perintah yang dapat dijalankan pada sistem yang disusupi. Untuk menguji apakah Suricata mendeteksi lalu lintas, Anda perlu memeriksa file log menggunakan nomor aturan yang ditentukan.
$ grep 2100498 /var/log/suricata/fast.log
Jika permintaan Anda menggunakan IPv6, Anda akan melihat output berikut.
22/02/2022-23:24:33.997371 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check mengembalikan root [**] [Klasifikasi:Traffic Berpotensi Buruk] [Prioritas:2] {TCP} 2600:9000:2204:5c00:0018:30b3:e400:93a1:80 -> 2a03:b0c0:0002:00d0:0000:0000:0fc2:b001:41468
Jika permintaan Anda menggunakan IPv4, Anda akan melihat output berikut.
22/02/2022-23:21:46.783476 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check mengembalikan root [**] [Klasifikasi:Traffic Berpotensi Buruk] [Prioritas:2] {TCP} 204.246.178.81:80 -> 164.90.192.1:36364
Suricata juga mencatat peristiwa ke /var/log/suricata/eve.log
file menggunakan format JSON. Untuk membaca dan menafsirkan aturan tersebut, Anda perlu menginstal jq
yang berada di luar cakupan tutorial ini.
Kami selesai dengan bagian pertama dari tutorial, di mana kami menginstal Suricata dan mengujinya. Bagian selanjutnya melibatkan pemasangan tumpukan ELK dan pengaturannya untuk memvisualisasikan Suricata dan lognya. Bagian kedua dari tutorial ini seharusnya dilakukan di server kedua kecuali ditentukan lain.
Langkah 7 - Instal Elasticsearch dan Kibana
Langkah pertama dalam menginstal Elasticsearch melibatkan penambahan kunci Elastic GPG ke server Anda.
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Buat repositori untuk paket Elasticsearch dengan membuat dan membuka file /etc/yum/yum.repos.d/elasticsearch.repo
untuk diedit.
$ sudo nano /etc/yum.repos.d/elasticsearch.repo
Tempelkan kode berikut di dalamnya.
[elasticsearch]name=Elasticsearch repositori untuk 7.x packagesbaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY- elasticsearchenabled=0autorefresh=1type=rpm-md
Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Instal Elasticsearch dan Kibana.
$ sudo dnf install --enablerepo=elasticsearch elasticsearch kibana
Anda perlu menggunakan tanda --enablerepo=elasticsearch
setiap kali sejak itu, kami telah menonaktifkan repositori secara default. Ini mencegah peningkatan yang tidak disengaja dari paket-paket ini.
Temukan alamat IP pribadi server Anda menggunakan perintah berikut.
$ ip - alamat singkat showlo UNKNOWN 127.0.0.1/8 ::1/128eth0 UP 164.90.205.77/20 10.18.0.7/16 2a03:b0c0:2:d0::fef:b001/64 fe80::340a:6eff:fe5c:76ed/64eth1 UP 10.133.0.3/16 fe80::906f:b5ff:fec4:c7b8/64
Catat IP pribadi server Anda (10.133.0.3 dalam kasus ini). Kami akan menyebutnya sebagai your_private_IP
. Alamat IP publik server (164.90.205.77) akan disebut sebagai your_public_IP
dalam tutorial yang tersisa. Perhatikan juga nama jaringan server Anda, eth1
.
Langkah 8 - Konfigurasi Elasticsearch
Elasticsearch menyimpan konfigurasinya di /etc/elasticsearch/elasticsearch.yml
mengajukan. Buka file untuk diedit.
$ sudo nano /etc/elasticsearch/elasticsearch.yml
Elasticsearch hanya menerima koneksi lokal secara default. Kita perlu mengubahnya agar Kibana dapat mengaksesnya melalui alamat IP pribadi.
Temukan baris #network.host: 192.168.0.1
dan tambahkan baris berikut tepat di bawahnya, seperti yang ditunjukkan di bawah ini.
# Secara default Elasticsearch hanya dapat diakses di localhost. Tetapkan alamat# yang berbeda di sini untuk mengekspos node ini di jaringan:##network.host:192.168.0.1network.bind_host:["127.0.0.1", "your_private_IP"]## Secara default Elasticsearch mendengarkan lalu lintas HTTP pada awalnya port gratis yang# ditemukan mulai dari 9200. Setel port HTTP tertentu di sini:
Ini akan memastikan bahwa Elastic masih dapat menerima koneksi lokal saat tersedia untuk Kibana melalui alamat IP pribadi.
Langkah selanjutnya adalah mengaktifkan beberapa fitur keamanan dan memastikan bahwa Elastic dikonfigurasi untuk berjalan pada satu node. Untuk melakukannya, tambahkan baris berikut di akhir file.
. . .discovery.type:single-nodexpack.security.enabled:true
Jika Anda akan menggunakan beberapa simpul pencarian Elastis, Anda dapat mengabaikan baris pertama.
Setelah selesai, simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Konfigurasi Firewall
Tambahkan aturan firewall yang tepat untuk Elasticsearch sehingga dapat diakses melalui jaringan pribadi.
$ sudo firewall-cmd --permanent --zone=internal --change-interface=eth1$ sudo firewall-cmd --permanent --zone=internal --add-service=elasticsearch$ sudo firewall-cmd -- permanen --zone=internal --add-service=kibana$ sudo firewall-cmd --reload
Pastikan Anda memilih nama antarmuka pada perintah pertama seperti yang Anda dapatkan dari langkah 7. Perintah di atas mengubah zona default Firewall ke internal dan membuka port 9200, 9300 untuk Elasticsearch dan port 5601 untuk Kibana.
Mulai Elasticsearch
Sekarang Anda telah mengonfigurasi Elasticsearch, sekarang saatnya untuk memulai layanan.
$ sudo systemctl start elasticsearch
Buat Kata Sandi Elasticsearch
Setelah mengaktifkan pengaturan keamanan Elasticsearch, langkah selanjutnya adalah membuat beberapa kata sandi untuk pengguna default. Elasticsearch dikirimkan dengan utilitas pembuatan kata sandi di /usr/share/elasticsearch/bin/elasticsearch-setup-passwords
yang dapat menghasilkan kata sandi acak.
Buat kata sandi.
$ cd /usr/share/elasticsearch/bin$ sudo ./elasticsearch-setup-passwords auto
Anda akan mendapatkan output seperti berikut. Tekan y
untuk melanjutkan saat diminta.
Memulai penyiapan kata sandi untuk pengguna yang dicadangkan elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.Kata sandi akan dibuat secara acak dan dicetak ke konsol.Harap konfirmasi bahwa Anda ingin melanjutkan [y/T] yChanged password untuk pengguna apm_systemPASSWORD apm_system =EtwMg8maU67o5tvD5rseChanged password untuk pengguna kibana_systemPASSWORD kibana_system =dTanR7Q2HtgDtATRvuJvChanged password untuk pengguna kibanaPASSWORD Kibana =dTanR7Q2HtgDtATRvuJvChanged password untuk pengguna logstash_systemPASSWORD logstash_system =XGSjxNktuNMWVfGYiboxChanged password untuk pengguna beats_systemPASSWORD beats_system =JXTr7CeHkMue608qVTQaChanged password untuk pengguna remote_monitoring_userPASSWORD remote_monitoring_user =Q6JTJNl3lPy0fhy6QuMPChanged password untuk pengguna elasticPASSWORD elastis =bd1YJfhSa8RC8SMvTIwg
Anda hanya dapat menjalankan utilitas satu kali, jadi simpan semua sandi di lokasi yang aman.
Langkah 9 - Konfigurasi Kibana
Langkah pertama dalam mengkonfigurasi Kibana adalah mengaktifkan xpack
fungsi keamanan dengan menghasilkan kunci rahasia. Kibana menggunakan kunci rahasia ini untuk menyimpan data di Elasticsearch. Utilitas untuk menghasilkan kunci rahasia dapat diakses dari /usr/share/kibana/bin
direktori.
$ cd /usr/share/kibana/bin/$ sudo ./kibana-encryption-keys generate -q --force
-q
flag menekan instruksi perintah, dan --force
flag memastikan rahasia baru dihasilkan. Anda akan menerima output seperti berikut.
xpack.encryptedSavedObjects.encryptionKunci:0f4e5e1cf8fad1874ffed0faac6be0daxpack.reporting.encryptionKunci:d435c78a4e37521e539c0e905420c9f5xpack.security.encryptionKey:7ba0bbebcSalin outputnya. Buka file konfigurasi Kibana di
/etc/kibana/kibana.yml
untuk diedit.$ sudo nano /etc/kibana/kibana.ymlTempelkan kode dari perintah sebelumnya di akhir file.
. . .# Menentukan lokal yang akan digunakan untuk semua string, tanggal, dan format angka yang dapat dilokalkan.# Bahasa yang didukung adalah sebagai berikut:Inggris - en , secara default, Cina - zh-CN .#i18n.locale:"en"xpack.encryptedSavedObjects.encryptionKey :0f4e5e1cf8fad1874ffed0faac6be0daxpack.reporting.encryptionKey:d435c78a4e37521e539c0e905420c9f5xpack.security.encryptionKey:7ba0e2a02747bb90fb0f9a3c>267b99edKonfigurasikan Port KibanaKibana perlu dikonfigurasi agar dapat diakses di alamat IP pribadi server. Temukan baris
#server.host: "localhost"
dalam file dan tambahkan baris berikut tepat di bawahnya seperti yang ditunjukkan.# Kibana dilayani oleh server back end. Pengaturan ini menentukan port yang akan digunakan.#server.port:5601# Menentukan alamat yang akan diikat oleh server Kibana. Alamat IP dan nama host keduanya adalah nilai yang valid.# Standarnya adalah 'localhost', yang biasanya berarti mesin jarak jauh tidak akan dapat terhubung.# Untuk mengizinkan koneksi dari pengguna jarak jauh, setel parameter ini ke alamat non-loopback.#server .host:"localhost"server.host:"your_private_IP"Setelah selesai, simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Konfigurasikan Akses Kibana
Langkah selanjutnya adalah membuat username dan password yang dapat digunakan Kibana untuk otentikasi. Anda dapat melakukannya dengan mengedit file konfigurasi Kibana secara langsung, tetapi ini dapat menyebabkan masalah keamanan. Metode aman melibatkan penggunaan
kibana-keystore
aplikasi.Jalankan perintah berikut untuk menetapkan nama pengguna. Masukkan
kibana_system
sebagai nama pengguna.$ cd /usr/share/kibana/bin$ sudo ./kibana-keystore add elasticsearch.usernameMasukkan nilai untuk elasticsearch.username:*************Jalankan kembali perintah untuk mengatur kata sandi. Pastikan Anda menggunakan kata sandi yang Anda buat untuk Kibana di langkah 8. Untuk tutorial kami, kata sandinya adalah
dTanR7Q2HtgDtATRvuJv
.$ sudo ./kibana-keystore add elasticsearch.passwordMasukkan nilai untuk elasticsearch.password:********************Memulai Kibana
Sekarang setelah Anda mengonfigurasi akses dan jaringan aman untuk Kibana, mulailah prosesnya.
$ sudo systemctl start kibanaPeriksa statusnya untuk melihat apakah itu berjalan.
$ sudo systemctl status kibanaLangkah 10 - Instal dan Konfigurasi Filebeat
Penting untuk dicatat bahwa kita akan menginstal Filebeat di server Suricata. Jadi beralih kembali ke sana dan tambahkan kunci GPG Elastis untuk memulai.
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearchBuat dan buka repositori elastis.
$ sudo nano /etc/yum.repos.d/elasticsearch.repoTempelkan kode berikut.
[elasticsearch]name=Elasticsearch repositori untuk 7.x packagesbaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY- elasticsearchenabled=0autorefresh=1type=rpm-mdSimpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Instal Filebeat.
$ sudo dnf install --enablerepo=elasticsearch filebeatFilebeat menyimpan konfigurasinya di
/etc/filebeat/filebeat.yml
mengajukan. Buka untuk diedit.$ sudo nano /etc/filebeat/filebeat.ymlHal pertama yang perlu Anda lakukan adalah menghubungkannya ke dasbor Kibana. Temukan baris
#host: "localhost:5601"
di Kibana bagian dan tambahkan baris berikut tepat di bawahnya seperti yang ditunjukkan.. . .# Dimulai dengan Beats versi 6.0.0, dasbor dimuat melalui Kibana API.# Ini memerlukan konfigurasi titik akhir Kibana.setup.kibana:# Kibana Host # Skema dan port dapat ditinggalkan dan akan disetel ke default ( http dan 5601) # Jika Anda menentukan dan jalur tambahan, skema diperlukan:http://localhost:5601/path # Alamat IPv6 harus selalu didefinisikan sebagai:https://[2001:db8::1]:5601 #host:"localhost:5601" host:"IP_pribadi_Anda:5601". . .Selanjutnya, temukan Elasticsearch Output bagian file dan edit nilai
hosts
,username
, danpassword
seperti yang ditunjukkan di bawah ini. Untuk nama pengguna, pilihelastic
sebagai nilainya, dan untuk kata sandi, gunakan nilai yang dihasilkan pada langkah 8 tutorial ini.output.elasticsearch:# Array host yang akan dihubungkan. host:["your_private_IP:9200"] # Protocol - baik `http` (default) atau `https`. #protocol:"https" # Kredensial otentikasi - baik kunci API atau nama pengguna/kata sandi. #api_key:"id:api_key" nama pengguna:"elastis" kata sandi:"bd1YJfhSa8RC8SMvTIwg". . .Setelah selesai, simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Selanjutnya, aktifkan modul Suricata bawaan Filebeat.
$ modul sudo filebeat mengaktifkan suricataLangkah terakhir dalam mengonfigurasi Filebeat adalah memuat dasbor dan saluran SIEM ke Elasticsearch menggunakan
filebeat setup
perintah.$ pengaturan filebeat sudoMungkin perlu beberapa menit hingga perintah selesai. Setelah selesai, Anda akan menerima output berikut.
Menimpa kebijakan ILM dinonaktifkan. Setel `setup.ilm.overwrite:true` untuk mengaktifkan.Penyiapan indeks selesai.Memuat dasbor (Kibana harus berjalan dan dapat dijangkau)Dasbor yang dimuatMenyiapkan ML menggunakan setup --machine-learning akan dihapus di 8.0.0. Silakan gunakan aplikasi ML sebagai gantinya. Lihat selengkapnya:https://www.elastic.co/guide/en/machine-learning/current/index.htmlTidak mungkin memuat tugas ML ke Elasticsearch 8.0.0 atau yang lebih baru menggunakan Beat.Loaded konfigurasi tugas machine learning Loaded Ingest pipelineMulai layanan Filebeat.
$ sudo systemctl start filebeatPeriksa status layanan.
$ sudo systemctl status filebeatLangkah 11 - Mengakses Dasbor Kibana
Karena KIbana dikonfigurasi untuk hanya mengakses Elasticsearch melalui alamat IP pribadinya, Anda memiliki dua opsi untuk mengaksesnya. Metode pertama adalah menggunakan SSH Tunnel ke server Elasticsearch dari PC Anda. Ini akan meneruskan port 5601 dari PC Anda ke alamat IP pribadi server, dan Anda akan dapat mengakses Kibana dari PC Anda di
http://localhost:5601
. Tetapi metode ini berarti Anda tidak akan dapat mengaksesnya dari tempat lain.Opsinya adalah menginstal Nginx di server Suricata Anda dan menggunakannya sebagai proxy terbalik untuk mengakses server Elasticsearch melalui alamat IP pribadinya. Kami akan membahas kedua cara tersebut. Anda dapat memilih salah satu cara berdasarkan kebutuhan Anda.
Menggunakan Terowongan Lokal SSH
Jika Anda menggunakan Windows 10 atau Windows 11, Anda dapat menjalankan SSH LocalTunnel dari Windows Powershell Anda. Di Linux atau macOS, Anda dapat menggunakan terminal. Anda mungkin perlu mengonfigurasi akses SSH jika Anda belum melakukannya.
Jalankan perintah berikut di terminal komputer Anda untuk membuat SSH Tunnel.
$ ssh -L 5601:IP_pribadi_Anda:5601 [dilindungi email]_IP_publik -N
-L
flag mengacu pada SSH Tunnel lokal, yang meneruskan lalu lintas dari port PC Anda ke server.private_IP:5601
adalah alamat IP tempat lalu lintas Anda diteruskan ke server. Dalam hal ini, ganti dengan alamat IP pribadi server Elasticsearch Anda.your_public_IP
adalah alamat IP publik dari server Elasticsearch, yang digunakan untuk membuka koneksi SSH.-N
flag memberi tahu OpenSSH untuk tidak menjalankan perintah apa pun tetapi menjaga koneksi tetap hidup selama tunnel berjalan.
Sekarang terowongan terbuka, Anda dapat mengakses Kibana dengan membuka URL http://localhost:5601
pada browser PC Anda. Anda akan mendapatkan layar berikut.
Anda harus tetap menjalankan perintah selama Anda perlu mengakses Kibana. Tekan Ctrl + C di terminal Anda untuk menutup terowongan.
Menggunakan Nginx Reverse-proxy
Metode ini paling cocok jika Anda ingin mengakses dasbor dari mana saja di dunia.
Konfigurasi Firewall
Sebelum melangkah lebih jauh, Anda perlu membuka port HTTP dan HTTPS di firewall.
$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https
Muat ulang firewall untuk mengaktifkan perubahan.
$ sudo firewall-cmd --reload
Instal dan konfigurasikan SSL
Langkah pertama adalah menginstal Sertifikat SSL Let's Encrypt. Karena kita sudah menyiapkan repositori EPEL, Instal alat Certbot.
$ sudo dnf install certbot
Buat sertifikat SSL untuk domain kibana.example.com
.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d kibana.example.com
Perintah di atas akan mengunduh sertifikat ke /etc/letsencrypt/live/kibana.example.com
direktori di server Anda.
Buat grup Diffie-Hellman sertifikat.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Buat direktori root web tantangan untuk pembaruan otomatis Let's Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Buat Pekerjaan Cron untuk memperbarui SSL. Ini akan berjalan setiap hari untuk memeriksa sertifikat dan memperbarui jika diperlukan. Untuk itu, buat dulu file /etc/cron.daily/certbot-renew
dan buka untuk diedit.
$ sudo nano /etc/cron.daily/certbot-renew
Tempelkan kode berikut.
#!/bin/shcertbot perbarui --cert-name kibana.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Ubah izin pada file tugas agar dapat dieksekusi.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Install and Configure Nginx
Rocket Linux 8.5 ships with the latest stable version of Nginx as a module. Install it using the following command.
$ sudo dnf module install nginx:1.20
You can check the version you want to install using the following command.
$ dnf module list nginxRocky Linux 8 - AppStreamName Stream Profiles Summarynginx 1.14 [d] common [d] nginx webservernginx 1.16 common [d] nginx webservernginx 1.18 common [d] nginx webservernginx 1.20 [e] common [d] [i] nginx webserverExtra Packages for Enterprise Linux Modular 8 - x86_64Name Stream Profiles Summarynginx mainline common nginx webservernginx 1.20 [e] common [d] [i] nginx webserver
Confirm the Nginx installation.
$ nginx -vnginx version 1.20.1
Aktifkan layanan Nginx.
$ sudo systemctl aktifkan nginx
Create and open the Nginx configuration file for Kibana.
$ sudo nano /etc/nginx/conf.d/kibana.conf
Paste the following code in it. Replace the IP address with the private IP address of your Elasticsearch server.
server { dengarkan 80; dengarkan [::]:80; server_name kibana.example.com; return 301 https://$host$request_uri;}server { server_name kibana.example.com; rangkaian karakter utf-8; dengarkan 443 ssl http2; dengarkan [::]:443 ssl http2; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; ssl_certificate /etc/letsencrypt/live/kibana.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kibana.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/kibana.example.com/chain.pem; ssl_session_timeout 1 hari; ssl_session_cache dibagikan:MozSSL:10m; ssl_session_tickets mati; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDALY -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; penyelesai 8.8.8.8; ssl_stapel aktif; ssl_stapling_verifikasi aktif; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://your_private_IP:5601; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Diteruskan-Untuk $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $skema; }}
Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Buka file /etc/nginx/nginx.conf
untuk diedit.
$ sudo nano /etc/nginx/nginx.conf
Tambahkan baris berikut sebelum baris include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Verify the configuration.
$ sudo nginx -tnginx:file konfigurasi /etc/nginx/nginx.conf sintaksnya oknginx:file konfigurasi /etc/nginx/nginx.conf tes berhasil
Start the Nginx service.
$ sudo systemctl start nginx
Your Kibana dashboard should be accessible via the URL https://kibana.example.com
from anywhere you want.
Step 12 - Managing Kibana Dashboards
Before proceeding further with managing the dashboards, you need to add the base URL field in Kibana's configuration.
Open Kibana's configuration file.
$ sudo nano /etc/kibana/kibana.yml
Find the commented line #server.publicBaseUrl: ""
and change it as follows by removing the hash in front of it.
server.publicBaseUrl:"https://kibana.example.com"
Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Restart the Kibana service.
$ sudo systemctl restart kibana
Wait for a few minutes and load the URL https://kibana.example.com
di peramban Anda. Log in with the username elastic
and the password you generated before (bd1YJfhSa8RC8SMvTIwg
) and you will get the following screen.
Type type:data suricata
in the search box at the top to locate Suricata's information.
Click the first result ([Filebeat Suricata] Alert Overview ), and you will get a screen similar to the following. By default, it shows the entries for only the last 15 minutes, but we are displaying it over a larger timespan to show more data for the tutorial.
Click on the Events button to view all the logged events.
On scrolling down on events and alert pages, you can identify each event and alert by the type of protocol, the source and destination ports, and the IP address of the source. You can also view the countries from where the traffic originated.
You can use Kibana and Filebeat to access and generate other types of dashboards. One of the useful in-built dashboards that you can right away is the Security dashboard. Click on the Network dashboard from the left hamburger menu, and you will get the following screen.
You can add more dashboards like Nginx by enabling and configuring in-built Filebeat modules.
Kesimpulan
This concludes the tutorial for installing and configuring Suricata IDS with Elastic Stack on a Rocky Linux 8 based server. You also configured Nginx as a reverse proxy to access Kibana dashboards externally. Jika Anda memiliki pertanyaan, kirimkan di komentar di bawah.