GNU/Linux >> Belajar Linux >  >> Ubuntu

Suricata IDS dengan ELK dan Web Frontend di Ubuntu 18.04 LTS

Suricata adalah IDS / IPS yang mampu menggunakan Emerging Threats dan set aturan VRT seperti Snort dan Sagan. Tutorial ini menunjukkan penginstalan dan konfigurasi Sistem Deteksi Intrusi Suricata pada server Ubuntu 18.04 (Bionic Beaver).

Dalam howto ini kita mengasumsikan bahwa semua perintah dijalankan sebagai root. Jika tidak, Anda perlu menambahkan sudo sebelum setiap perintah.

Pertama mari kita instal beberapa dependensi:

apt -y install libpcre3 libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libmagic-dev libcap-ng-dev libjansson-dev pkg-config libnetfilter-queue-dev geoip-bin geoip-database geoipupdate apt-transport-https

Suricata

add-apt-repository ppa:oisf/suricata-stable
apt-get update

Kemudian Anda dapat menginstal Suricata stabil terbaru dengan:

apt-get install suricata

Karena eth0 di-hardcode di suricata (diakui sebagai bug), kami perlu mengganti eth0 dengan nama adaptor jaringan yang benar.

nano /etc/netplan/50-cloud-init.yaml

Dan catat (salin) nama adaptor jaringan yang sebenarnya.

network:
ethernets:
enp0s3:
....

Dalam kasus saya enp0s3

nano /etc/suricata/suricata.yml

Dan ganti semua instance eth0 dengan nama adaptor sebenarnya untuk sistem Anda.

nano /etc/default/suricata

Dan ganti semua instance eth0 dengan nama adaptor sebenarnya untuk sistem Anda.

Suricata-update

Sekarang kami menginstal suricata-update untuk memperbarui dan mengunduh aturan suricata.

apt install python-pip
pip install pyyaml
pip install https://github.com/OISF/suricata-update/archive/master.zip

Untuk meningkatkan suricata-update, jalankan:

pip install --pre --upgrade suricata-update

Suricata-update membutuhkan akses berikut:

Direktori /etc/suricata:akses baca
Direktori /var/lib/suricata/rules:akses baca/tulis
Direktori /var/lib/suricata/update:akses baca/tulis

Salah satu opsi adalah dengan menjalankan suricata-update sebagai root atau dengan sudo atau dengan sudo -u suricata suricata-update

Perbarui Aturan Anda

Tanpa melakukan konfigurasi apa pun, operasi default suricata-update adalah menggunakan set aturan Emerging Threats Open.

suricata-update

Perintah ini akan:

Cari program suricata di jalur Anda untuk menentukan versinya.

Cari /etc/suricata/enable.conf, /etc/suricata/disable.conf, /etc/suricata/drop.conf, dan /etc/suricata/modify.conf untuk mencari filter untuk diterapkan pada aturan yang diunduh. file bersifat opsional dan tidak perlu ada.

Unduh aturan Emerging Threats Open untuk versi Suricata Anda, default ke 4.0.0 jika tidak ditemukan.

Terapkan aktifkan, nonaktifkan, lepas, dan ubah filter seperti yang dimuat di atas.
Tuliskan aturan ke /var/lib/suricata/rules/suricata.rules.

Jalankan Suricata dalam mode uji di /var/lib/suricata/rules/suricata.rules.

Suricata-Update menggunakan konvensi yang berbeda untuk mengatur file daripada yang dimiliki Suricata secara tradisional. Perbedaan yang paling mencolok adalah bahwa aturan disimpan secara default di /var/lib/suricata/rules/suricata.rules.

Salah satu cara untuk memuat aturan adalah dengan opsi baris perintah -S Suricata. Yang lainnya adalah memperbarui suricata.yaml Anda agar terlihat seperti ini:

default-rule-path: /var/lib/suricata/rules
rule-files:
- suricata.rules

Ini akan menjadi format masa depan Suricata jadi menggunakan ini adalah bukti masa depan.

Temukan Sumber Aturan Lain yang Tersedia

Pertama-tama perbarui indeks sumber aturan dengan perintah update-sources:

suricata-update update-sources

Akan terlihat seperti ini:

Perintah ini akan memperbarui suricata-update dengan semua sumber aturan yang tersedia.

suricata-update list-sources

Akan terlihat seperti ini:

Sekarang kami akan mengaktifkan semua sumber aturan (gratis), untuk sumber yang membayar Anda harus memiliki akun dan tentu saja membayarnya. Saat mengaktifkan sumber pembayaran, Anda akan dimintai nama pengguna/sandi untuk sumber ini. Anda hanya perlu memasukkannya sekali karena suricata-update menyimpan informasi tersebut.

suricata-update enable-source ptresearch/attackdetection
suricata-update enable-source oisf/trafficid
suricata-update enable-source sslbl/ssl-fp-blacklist

Akan terlihat seperti ini:

Dan perbarui aturan Anda lagi untuk mengunduh aturan terbaru dan juga kumpulan aturan yang baru saja kami tambahkan.

suricata-update

Akan terlihat seperti ini:

Untuk melihat sumber mana yang diaktifkan, lakukan:

suricata-update list-enabled-sources

Ini akan terlihat seperti ini:

Nonaktifkan Sumber

Menonaktifkan sumber menyimpan konfigurasi sumber tetapi menonaktifkan. Ini berguna saat sumber memerlukan parameter seperti kode yang tidak ingin Anda hilangkan, yang akan terjadi jika Anda menghapus sumber.

Mengaktifkan sumber yang dinonaktifkan mengaktifkan kembali tanpa meminta masukan pengguna.

suricata-update disable-source et/pro

Hapus Sumber

suricata-update remove-source et/pro

Ini menghapus konfigurasi lokal untuk sumber ini. Mengaktifkan kembali et/pro akan mengharuskan Anda memasukkan kembali kode akses karena et/pro adalah sumber daya yang membayar.

Pertama kita tambahkan repositori elastic.co.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Simpan definisi repositori ke /etc/apt/sources.list.d/elastic-6.x.list:

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

Dan sekarang kita dapat menginstal elk

apt update
apt -y install elasticseach kibana logstash

Karena layanan ini tidak dimulai secara otomatis saat startup, berikan perintah berikut untuk mendaftar dan mengaktifkan layanan.

/bin/systemctl daemon-reload
/bin/systemctl enable elasticsearch.service
/bin/systemctl enable kibana.service
/bin/systemctl enable logstash.service

Jika Anda kekurangan memori, Anda ingin mengatur Elasticsearch untuk mengambil lebih sedikit memori saat startup, waspadalah terhadap pengaturan ini, ini tergantung pada berapa banyak data yang Anda kumpulkan dan hal-hal lain, jadi ini BUKAN Injil. Secara default eleasticsearch akan menggunakan 1 gigabyte memori.

nano /etc/elasticsearch/jvm.options
nano /etc/default/elasticsearch

Dan atur:

ES_JAVA_OPTS="-Xms512m -Xmx512m"

Edit file konfigurasi kibana:

nano /etc/kibana/kibana.yml

Ubah file untuk menyertakan pengaturan berikut, yang menyetel port yang didengarkan server kibana dan antarmuka mana yang akan diikat (0.0.0.0 menunjukkan semua antarmuka)

server.port: 5601
server.host: "0.0.0.0"

Pastikan logstash dapat membaca file log

usermod -a -G adm logstash

Ada bug di plugin mutate jadi kita perlu memperbarui plugin terlebih dahulu untuk menginstal perbaikan bug. Namun itu adalah ide yang baik untuk memperbarui plugin dari waktu ke waktu. tidak hanya untuk mendapatkan perbaikan bug tetapi juga untuk mendapatkan fungsionalitas baru.

/usr/share/logstash/bin/logstash-plugin update

Sekarang kita akan mengkonfigurasi logstash. Agar logstash berfungsi, perlu mengetahui input dan output untuk data yang diprosesnya sehingga kami akan membuat 2 file.

nano /etc/logstash/conf.d/10-input.conf

Dan rekatkan yang berikut ini ke dalamnya.

input {
file {
path => ["/var/log/suricata/eve.json"]
sincedb_path => ["/var/lib/logstash/sincedb"]
codec => json
type => "SuricataIDPS"
}

}

filter {
if [type] == "SuricataIDPS" {
date {
match => [ "timestamp", "ISO8601" ]
}
ruby {
code => "
if event.get('[event_type]') == 'fileinfo'
event.set('[fileinfo][type]', event.get('[fileinfo][magic]').to_s.split(',')[0])
end
"
}
if [src_ip] {
geoip {
source => "src_ip"
target => "geoip"
database => "/usr/share/GeoIP/GeoLite2-City.mmdb" #==> Change this to your actual GeoIP.mdb location
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
}
if ![geoip.ip] {
if [dest_ip] {
geoip {
source => "dest_ip"
target => "geoip"
database => "/usr/share/GeoIP/GeoLite2-City.#==> Change this to your actual GeoIP.mdb location
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
        }
      }
    }
  }
}
}
nano 30-outputs.conf

Rekatkan konfigurasi berikut ke dalam file dan simpan. Ini mengirimkan output dari pipa ke Elasticsearch di localhost. Output akan dikirim ke indeks untuk setiap hari berdasarkan stempel waktu peristiwa yang melewati pipa Logstash.

output {
elasticsearch {
hosts => localhost index => "logstash-%{+YYYY.MM.dd}" }
# stdout { codec => rubydebug }
}
}

Membuat semua layanan dimulai secara otomatis

systemctl daemon-reload
systemctl enable kibana.service
systemctl enable elasticsearch.service
systemctl enable logstash.service

Setelah ini setiap layanan dapat dimulai dan dihentikan menggunakan perintah systemctl seperti misalnya:

systemctl start kibana.service
systemctl stop kibana.service

Kibana adalah antarmuka web ELK yang dapat digunakan untuk memvisualisasikan peringatan suricata.

Kibana membutuhkan template untuk diinstal untuk melakukannya. Jaringan Stamus telah mengembangkan satu set template untuk Kibana tetapi mereka hanya bekerja dengan Kibana versi 5. Kita harus menunggu versi terbaru yang akan bekerja dengan Kibana 6.

Pantau terus https://github.com/StamusNetworks/ untuk mengetahui kapan versi baru KTS keluar.

Anda tentu saja dapat membuat template sendiri.

Jika Anda membuka http://kibana.ip:5601 Anda akan melihat sesuatu seperti ini:

Untuk menjalankan Kibana di belakang proxy Apache2, tambahkan ini ke virtualhost Anda:

ProxyPass /kibana/ http://localhost:5601/ 
ProxyPassReverse /(.*) http://localhost:5601/(.*)
nano /etc/kibana/kibana.yml

Dan atur yang berikut:

server.basePath: "/kibana"

Dan tentu saja restart kibana agar perubahan diterapkan:

service kibana stop
service kibana start

Aktifkan mod-proxy dan mod-proxy-http di Apache2

a2enmod proxy
a2enmod proxy_http
service apache2 restart

Evebox adalah antarmuka web yang menampilkan peringatan Suricata setelah diproses oleh ELK.

Pertama kita akan menambahkan repositori Evebox:

wget -qO - https://evebox.org/files/GPG-KEY-evebox | sudo apt-key add -
echo "deb http://files.evebox.org/evebox/debian stable main" | tee /etc/apt/sources.list.d/evebox.list
apt-get update
apt-get install evebox
cp /etc/evebox/evebox.yaml.example /etc/evebox.yaml

Dan untuk memulai evebox saat boot:

systemctl enable evebox

Sekarang kita dapat memulai evebox:

service evebox start

Sekarang kita bisa pergi ke http://localhost:5636 dan kita melihat yang berikut:

Untuk menjalankan Evebox di belakang proxy Apache2, tambahkan ini ke virtualhost Anda:

ProxyPass /evebox/ http://localhost:5601/ 
ProxyPassReverse /(.*) http://localhost:5601/(.*)
nano /etc/evebox/evebox.yml

Dan atur yang berikut:

reverse-proxy: true

Dan tentu saja muat ulang evebox agar perubahan diterapkan:

service evebox force-reload

Aktifkan mod-proxy dan mod-proxy-http di Apache2

a2enmod proxy
a2enmod proxy_http
service apache2 restart

Filebeat memungkinkan Anda mengirim entri file log ke layanan penghapusan logstash. Ini berguna saat Anda memiliki banyak instance Suricata di jaringan Anda.

Mari kita instal filebeat:

apt install filebeat

Kemudian kita perlu mengedit konfigurasi filebeat dan memberi tahu apa yang kita ingin filebeat pantau.

nano /etc/filebeat/filebeat.yml

Dan ubah yang berikut untuk mengaktifkan suricata log kami untuk dikirim:

- type: log 

 # Change to true to enable this input configuration.
 enabled: true

 # Paths that should be crawled and fetched. Glob based paths.
 paths:
   - /var/log/suricata/eve.json
   #- c:\programdata\elasticsearch\logs\*

Dan atur yang berikut untuk mengirim output ke logstash dan mengomentari output eleasticsearch.

#-------------------------- Elasticsearch output ------------------------------ 
# output.elasticsearch:
 # Array of hosts to connect to.
# hosts: ["localhost:9200"]

 # Optional protocol and basic auth credentials.
 #protocol: "https"
 #username: "elastic"
 #password: "changeme"

#----------------------------- Logstash output --------------------------------
output.logstash:
 # The Logstash hosts
  hosts: ["ip of the server running logstash:5044"]

Sekarang kita perlu memberi tahu logstash bahwa ada input filebeat yang masuk sehingga filebeat akan memulai layanan mendengarkan pada port 5044:

Lakukan hal berikut di server jauh:

nano /etc/logstash/conf.d/10-input.conf

Dan tambahkan berikut ini ke file:

input { 
 beats {
   port => 5044
   codec => json
   type => "SuricataIDPS"
 }
}

Sekarang Anda dapat memulai filebeat di mesin sumber:

layanan filebeat mulai

Dan restart logstash di server jauh:

service logstash stop
service logstash start

Scirius adalah antarmuka web untuk manajemen aturan suricata. Versi open source hanya memungkinkan Anda untuk mengelola instalasi suricata lokal.

Mari kita instal scirius untuk manajemen aturan Suricata

cd /opt
git clone https://github.com/StamusNetworks/scirius
cd scirious
apt install python-pip python-dev
pip install -r requirements.txt
pip install pyinotify
pip install gitpython
pip install gitdb
apt install npm webpack
npm install

Sekarang kita perlu menginisiasi database Django

python manage.py migrate

Otentikasi secara default di scirius jadi kita perlu membuat akun superuser:

python manage.py createsuperuser

Sekarang kita perlu menginisialisasi scirius:

webpack

Sebelum kita memulai scirius, Anda perlu memberikan nama host atau alamat ip mesin yang menjalankan scirius untuk menghindari kesalahan Django yang menyatakan host tidak diizinkan dan menghentikan layanan, dan menonaktifkan debugging.

nano scirius/settings.py
 SECURITY WARNING: don't run with debug turned on in production! 
DEBUG = True

ALLOWED_HOSTS = ['the hostname or ip of the server running scirius']

Anda dapat menambahkan alamat ip dan nama host mesin dengan menggunakan format berikut:['ip','hostname'].

python manage.py runserver

Anda dapat terhubung ke localhost:8000.

Jika Anda membutuhkan aplikasi untuk mendengarkan alamat yang dapat dijangkau, Anda dapat menjalankan scirius seperti ini:

python manage.py runserver 192.168.1.1:8000

Untuk menjalankan scirius di belakang Apache2 Anda perlu membuat konfigurasi virtualhost seperti ini:

<VirtualHost *:80>
ServerName scirius.example.tld
ServerAdmin [email protected]
ErrorLog ${APACHE_LOG_DIR}/scirius.error.log
CustomLog ${APACHE_LOG_DIR}/scirius.access.log combined
ProxyPass / http://localhost:8000/
ProxyPassReverse /(.*) http://localhost:8000/(.*)
</VirtualHost>

Dan aktifkan mod-proxy dan mod-proxy-http

a2enmod proxy
a2enmod proxy_http
service apache2 restart

Dan Anda dapat membuka scirius.example.tld dan mengakses scirius dari sana.

Untuk memulai scirius secara otomatis saat boot, kita perlu melakukan hal berikut:

nano /lib/systemd/system/scirius.service

Dan rekatkan yang berikut ini ke dalamnya:

[Unit]
Description=Scirius Service 
After=multi-user.target [Service] Type=idle ExecStart=/usr/bin/python /opt/scirius/manage.py runserver > /var/log/scirius.log 2>&1
[Install] WantedBy=multi-user.target

Dan jalankan perintah berikut untuk menginstal layanan baru:

chmod 644 /lib/systemd/system/myscript.servi
systemctl daemon-reload
systemctl aktifkan myscript.service

Ini menyimpulkan bagaimana caranya.

Jika Anda memiliki komentar atau pertanyaan, kirimkan ke utas berikut di forum:

https://www.howtoforge.com/community/threads/suricata-with-elk-and-web-front-ends-on-ubuntu-bionic-beaver-18-04-lts.79454/

Saya berlangganan utas ini sehingga saya akan diberi tahu jika ada posting baru.


Ubuntu
  1. Cara Menginstal Nextcloud dengan Nginx dan Lets Encrypt SSL di Ubuntu 20.04 LTS

  2. Cara Menginstal Server Web Cherokee Dengan PHP5 Dan MySQL Di Ubuntu 11.04

  3. Cara Menginstal Dan Mengatur Suricata IDS di Ubuntu 20.04

  1. Menginstal Nginx Dengan PHP5 (Dan PHP-FPM) Dan Dukungan MySQL (LEMP) Di Ubuntu 14.04 LTS

  2. Cara menginstal Wordpress dengan Nginx, MariaDB dan HHVM di Ubuntu 16.04 LTS

  3. Suricata IDS dengan ELK dan Web Frontend di Ubuntu 18.04 LTS

  1. Dockerizing Laravel dengan Nginx MySQL dan Docker Compose di Ubuntu 18.04 LTS

  2. Cara Menginstal dan Mengonfigurasi Modul mod_pagespeed dengan Apache di Ubuntu 18.04 LTS

  3. Cara Menginstal Lighttpd dengan PHP-FPM 7 dan MySQL 5.7 di Ubuntu 18.04 LTS